// brython.js brython.info // version [3, 3, 0, 'alpha', 0] // implementation [3, 2, 4, 'final', 0] // version compiled from commented, indented source files at github.com/brython-dev/brython var __BRYTHON__=__BRYTHON__ ||{} ;(function($B){ var scripts=document.getElementsByTagName('script') var this_url=scripts[scripts.length-1].src var elts=this_url.split('/') elts.pop() var $path=$B.brython_path=elts.join('/')+'/' var $href=$B.script_path=window.location.href var $href_elts=$href.split('/') $href_elts.pop() var $script_dir=$B.script_dir=$href_elts.join('/') $B.$py_module_path={} $B.$py_src={} $B.path=[$path+'Lib',$path+'libs',$script_dir,$path+'Lib/site-packages'] $B.bound={} $B.type={} $B.async_enabled=false if($B.async_enabled)$B.block={} $B.modules={} $B.imported={} $B.vars={} $B._globals={} $B.frames_stack=[] $B.builtins={__repr__:function(){return "'"},__str__:function(){return ""},} $B.builtins_block={id:'__builtins__',module:'__builtins__'} $B.modules['__builtins__']=$B.builtins_block $B.bound['__builtins__']={'__BRYTHON__':true,'$eval':true,'$open': true} $B.bound['__builtins__']['BaseException']=true $B.type['__builtins__']={} $B.builtin_funcs={} $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('__BRYTHON__ object has no attribute '+attr)}} $B.language=window.navigator.userLanguage ||window.navigator.language $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) $B.$py_UUID=0 $B.lambda_magic=Math.random().toString(36).substr(2,8) $B.callbacks={} 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]}})(__BRYTHON__) __BRYTHON__.implementation=[3,2,4,'final',0] __BRYTHON__.__MAGIC__="3.2.4" __BRYTHON__.version_info=[3,3,0,'alpha',0] __BRYTHON__.compiled_date="2016-01-16 09:01:25.098836" __BRYTHON__.builtin_module_names=["posix","sys","errno","time","_ajax","_browser","_html","_jsre","_multiprocessing","_posixsubprocess","_svg","_sys","builtins","dis","hashlib","javascript","json","long_int","math","modulefinder","random","_abcoll","_codecs","_collections","_csv","_functools","_imp","_io","_random","_socket","_sre","_string","_struct","_sysconfigdata","_testcapi","_thread","_warnings","_weakref"] ;(function($B){var js,$pos,res,$op var keys=$B.keys=function(obj){var res=[],pos=0 for(var attr in obj){res[pos++]=attr} res.sort() return res} var clone=$B.clone=function(obj){var res={} for(var attr in obj){res[attr]=obj[attr]} return res} $B.last=function(table){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} var $operators={"//=":"ifloordiv",">>=":"irshift","<<=":"ilshift","**=":"ipow","**":"pow","//":"floordiv","<<":"lshift",">>":"rshift","+=":"iadd","-=":"isub","*=":"imul","/=":"itruediv","%=":"imod","&=":"iand","|=":"ior","^=":"ixor","+":"add","-":"sub","*":"mul","/":"truediv","%":"mod","&":"and","|":"or","~":"invert","^":"xor","<":"lt",">":"gt","<=":"le",">=":"ge","==":"eq","!=":"ne","or":"or","and":"and","in":"in","is":"is","not_in":"not_in","is_not":"is_not" } var $augmented_assigns={"//=":"ifloordiv",">>=":"irshift","<<=":"ilshift","**=":"ipow","+=":"iadd","-=":"isub","*=":"imul","/=":"itruediv","%=":"imod","&=":"iand","|=":"ior","^=":"ixor"} var noassign=$B.list2obj(['True','False','None','__debug__']) var $op_order=[['or'],['and'],['in','not_in'],['<','<=','>','>=','!=','==','is','is_not'],['|'],['^'],['&'],['>>','<<'],['+'],['-'],['*','/','//','%'],['unary_neg','unary_inv','unary_pos'],['**'] ] var $op_weight={} var $weight=1 for(var $i=0;$i<$op_order.length;$i++){var _tmp=$op_order[$i] for(var $j=0;$j<_tmp.length;$j++){$op_weight[_tmp[$j]]=$weight} $weight++} var $loop_num=0 $B.func_magic=Math.random().toString(36).substr(2,8) function $_SyntaxError(C,msg,indent){ var ctx_node=C while(ctx_node.type!=='node'){ctx_node=ctx_node.parent} var tree_node=ctx_node.node var module=tree_node.module var line_num=tree_node.line_num if(indent!==undefined){line_num++} if(indent===undefined){if(Array.isArray(msg)){$B.$SyntaxError(module,msg[0],$pos)} if(msg==="Triple string end not found"){ $B.$SyntaxError(module,'invalid syntax : triple string end not found',$pos)} $B.$SyntaxError(module,'invalid syntax',$pos)}else{throw $B.$IndentationError(module,msg,$pos)}} function $Node(type){this.type=type this.children=[] this.yield_atoms=[] this.add=function(child){ this.children[this.children.length]=child child.parent=this child.module=this.module} this.insert=function(pos,child){ this.children.splice(pos,0,child) child.parent=this child.module=this.module} this.toString=function(){return ""} this.show=function(indent){ var res='' if(this.type==='module'){for(var i=0;i0)res +='{' res +='\n' for(var i=0;i0){res +=' '.repeat(indent) res+='}\n'} return res} this.to_js=function(indent){ if(this.js!==undefined)return this.js this.res=[] var pos=0 this.unbound=[] if(this.type==='module'){for(var i=0;i0)this.res[pos++]='{' this.res[pos++]='\n' for(var i=0;i0){this.res[pos++]=' '.repeat(indent) this.res[pos++]='}\n'}} this.js=this.res.join('') return this.js} this.transform=function(rank){ if(this.yield_atoms.length>0){ this.parent.children.splice(rank,1) var offset=0 for(var i=0;i0){assigned.push(left) var ctx=node.C ctx.tree=[] var nleft=new $RawJSCtx(ctx,'var $temp'+$loop_num) nleft.tree=ctx.tree nassign=new $AssignCtx(nleft) nassign.tree[1]=right for(var i=0;i1){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($B._globals && $B._globals[scope.id] && $B._globals[scope.id][name]){void(0)}else{left.tree[0].bound=true}} break case 'target_list': case 'list_or_tuple': left_items=left.tree} if(left_items===null){return} var right=this.tree[1] 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=0;i--){node.parent.insert(rank,new_nodes[i])} $loop_num++}else{ var new_node=new $Node() new_node.line_num=node.line_num var js='var $right'+$loop_num+'=getattr' js +='(iter('+right.to_js()+'),"__next__");' new $NodeJSCtx(new_node,js) var new_nodes=[new_node],pos=1 var rlist_node=new $Node() var $var='$rlist'+$loop_num js='var '+$var+'=[], $pos=0;' js +='while(1){try{'+$var+'[$pos++]=$right' js +=$loop_num+'()}catch(err){break}};' new $NodeJSCtx(rlist_node,js) new_nodes[pos++]=rlist_node var packed=null for(var i=0;i1 ?' js +=' "s" : "")+" to unpack")}' new $NodeJSCtx(check_node,js) new_nodes[pos++]=check_node if(packed==null){var check_node=new $Node() var min_length=left_items.length js='if($rlist'+$loop_num+'.length>'+min_length+')' js +='{throw ValueError("too many values to unpack ' js +='(expected '+left_items.length+')")}' new $NodeJSCtx(check_node,js) new_nodes[pos++]=check_node} var j=0 for(var i=0;i=0;i--){node.parent.insert(rank,new_nodes[i])} $loop_num++}} this.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] if(left.type==='expr')left=left.tree[0] var right=this.tree[1] if(left.type=='attribute' ||left.type=='sub'){ var node=$get_node(this),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' res +=left.to_js() left.func='getattr' res=res.substr(0,res.length-1) return res + ','+rvar+');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() res +=','+left.tree[0].to_js()+','+right_js+')};None;'}else{left.func='setitem' res +=left.to_js() res=res.substr(0,res.length-1) left.func='getitem' res +=','+right_js+')};None;'} return res}} return left.to_js()+'='+right.to_js()}} function $AttrCtx(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' this.toString=function(){return '(attr) '+this.value+'.'+this.name} this.to_js=function(){this.js_processed=true return this.func+'('+this.value.to_js()+',"'+this.name+'")'}} function $AugmentedAssignCtx(C,op){ this.type='augm_assign' 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' && C.tree[0].type=='id'){var name=C.tree[0].value if(noassign[name]===true){$_SyntaxError(C,["can't assign to keyword"])}else if((scope.ntype=='def'||scope.ntype=='generator')&& $B.bound[scope.id][name]===undefined){if(scope.globals===undefined ||scope.globals.indexOf(name)==-1){ C.tree[0].unbound=true}}} $get_node(this).bound_before=$B.keys($B.bound[scope.id]) this.module=scope.module this.toString=function(){return '(augm assign) '+this.tree} this.transform=function(node,rank){var func='__'+$operators[op]+'__' var offset=0,parent=node.parent var 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){ this.tree[0].tree[0].augm_assign=true if($B.debug>0){var check_node=$NodeJS('if('+this.tree[0].to_js()+ '===undefined){throw NameError("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=$B.bound[this.scope.id][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') 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,local_ns='$local_'+scope.id.replace(/\./g,'_'),global_ns='$local_'+scope.module.replace(/\./g,'_'),prefix switch(scope.ntype){case 'module': prefix=global_ns break case 'def': case 'generator': if(scope.globals && scope.globals.indexOf(C.tree[0].value)>-1){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() prefix=prefix && !C.tree[0].unknown_binding && left_id_unbound===undefined 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 +='&& '+left+op1+right+'>$B.min_int && '+left+op1+right+ '< $B.max_int){' js +=right_is_int ? '(' : '(typeof $temp=="number" && ' js +='typeof '+left1+'=="number") ? ' js +=left+op+right js +=' : ('+left1+'.constructor===Number ? ' js +=left+'=float('+left+op1 js +=right_is_int ? right : right+'.valueOf()' js +=') : '+left + op js +=right_is_int ? right : right+'.valueOf()' js +=')}' 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]+'(' js1 +=C.tree[0].value.to_js() js1 +=','+C.tree[0].tree[0].to_js()+',' js1 +=right+');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(!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 var ctx1=new $NodeCtx(aa1) var expr1=new $ExprCtx(ctx1,'clone',false) if(left_id_unbound){new $RawJSCtx(expr1,'$locals["'+left_id+'"]')}else{expr1.tree=C.tree for(var i=0;i0){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 'classmethod('+$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){new $IdCtx(this,args[0])}}} break default: if(this.func.type=='unary'){ switch(this.func.op){case '+': return 'getattr('+$to_js(this.tree)+',"__pos__")()' case '-': return 'getattr('+$to_js(this.tree)+',"__neg__")()' case '~': return 'getattr('+$to_js(this.tree)+',"__invert__")()'}}} var _block=false if($B.async_enabled){var scope=$get_scope(this.func) if($B.block[scope.id]===undefined){} else if($B.block[scope.id][this.func.value])_block=true} var pos_args=[],kw_args=[],star_args=null,dstar_args=null for(var i=0;i0){args_str +=','} args_str +='_b_.list('+star_args+'))'} var kw_args_str='{'+kw_args.join(', ')+'}' if(dstar_args){kw_args_str='{$nat:"kw",kw:$B.extend("'+this.func.value+'",'+kw_args_str kw_args_str +=','+dstar_args+')}'}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+')'} if($B.debug>0){ var res="" if(_block){ res="@@;$B.execution_object.$append($jscode, 10); " res+="$B.execution_object.$execute_next_segment(); " res+="$jscode=@@"} res +='getattr('+func_js+',"__call__")' return res+args_str} if(this.tree.length>-1){if(this.func.type=='id'){if(this.func.is_builtin){ if($B.builtin_funcs[this.func.value]!==undefined){return func_js+args_str}}else{var bound_obj=this.func.found if(bound_obj &&(bound_obj.type=='class' || bound_obj.type=='def')){return func_js+args_str}} var res='('+func_js+'.$is_func ? ' res +=func_js+' : ' res +='getattr('+func_js+',"__call__"))'+args_str}else{var res='getattr('+func_js+',"__call__")'+args_str} return res} return 'getattr('+func_js+',"__call__")()'}}} function $ClassCtx(C){ this.type='class' this.parent=C this.tree=[] C.tree[C.tree.length]=this this.expect='id' this.toString=function(){return '(class) '+this.name+' '+this.tree+' args '+this.args} var scope=this.scope=$get_scope(this) this.parent.node.parent_block=scope this.parent.node.bound={} this.set_name=function(name){this.random=$B.UUID() this.name=name this.id=C.node.module+'_'+name+'_'+this.random $B.bound[this.id]={} $B.type[this.id]={} if($B.async_enabled)$B.block[this.id]={} $B.modules[this.id]=this.parent.node this.parent.node.id=this.id 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 && 'generator' !=parent_block.C.tree[0].type){parent_block=parent_block.parent} this.parent.node.parent_block=parent_block $B.bound[this.scope.id][name]=this $B.type[this.scope.id][name]='class' if(scope.is_function){if(scope.C.tree[0].locals.indexOf(name)==-1){scope.C.tree[0].locals.push(name)}}} this.transform=function(node,rank){ this.doc_string=$get_docstring(node) var instance_decl=new $Node() var local_ns='$locals_'+this.id.replace(/\./g,'_') var js=';var '+local_ns+'={}' js +=', $locals = '+local_ns+';' new $NodeJSCtx(instance_decl,js) node.insert(0,instance_decl) 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 scope=$get_scope(this) var name_ref=';$locals_'+scope.id.replace(/\./g,'_') name_ref +='["'+this.name+'"]' if(this.name=="FF"){ var js=[name_ref +'=$B.$class_constructor1("'+this.name],pos=1}else{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=[] for(var i=0;i'+ __BRYTHON__.loop_timeout*1000+ '){throw _b_.RuntimeError("script timeout")}'+ h4+'return true'+h+'}\n' res.splice(0,0,test_timeout) res.push('$test_timeout'+num+'() && ')} res.push('$locals["$no_break'+this.loop_num+'"] && ')} 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('')}} function $ContinueCtx(C){ this.type='continue' this.parent=C C.tree[C.tree.length]=this this.toString=function(){return '(continue)'} this.to_js=function(){this.js_processed=true return 'continue'}} function $DebuggerCtx(C){ this.type='continue' this.parent=C C.tree[C.tree.length]=this this.toString=function(){return '(debugger)'} this.to_js=function(){this.js_processed=true return 'debugger'}} function $DecoratorCtx(C){ this.type='decorator' this.parent=C C.tree[C.tree.length]=this this.tree=[] this.toString=function(){return '(decorator) '+this.tree} this.transform=function(node,rank){var func_rank=rank+1,children=node.parent.children var 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 for(var i=0;i0){defaults[dpos++]='"'+arg.name+'"' defs1[dpos1++]=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){annotations.push(arg.name+': '+arg.annotation.to_js())}} var flags=67 if(this.star_arg){flags |=4} if(this.kw_arg){flags |=8} if(this.type=='generator'){flags |=32} var positional_str=[],positional_obj=[],pos=0 for(var i=0,_len=this.positional_list.length;i<_len;i++){positional_str[pos]='"'+this.positional_list[i]+'"' positional_obj[pos++]=this.positional_list[i]+':null'} positional_str=positional_str.join(',') positional_obj='{'+positional_obj.join(',')+'}' var dobj=[],pos=0 for(var i=0;i0 ||this.positional_list.length>0){ var new_node=new $Node() var js='if(arguments.length>0 && arguments[arguments.length-1].$nat)' new $NodeJSCtx(new_node,js) nodes.push(new_node) new_node.add(make_args_nodes[0]) new_node.add(make_args_nodes[1]) var else_node=new $Node() new $NodeJSCtx(else_node,'else') nodes.push(else_node)} if($B.debug>0){ var pos_len=this.positional_list.length js='if(arguments.length!='+pos_len+')' var wrong_nb_node=new $Node() new $NodeJSCtx(wrong_nb_node,js) else_node.add(wrong_nb_node) if(pos_len>0){ js='if(arguments.length<'+pos_len+')' js +='{var $missing='+pos_len+'-arguments.length;' js +='throw TypeError("'+this.name+'() missing "+$missing+' js +='" positional argument"+($missing>1 ? "s" : "")+": "' js +='+new Array('+positional_str+').slice(arguments.length))}' new_node=new $Node() new $NodeJSCtx(new_node,js) wrong_nb_node.add(new_node) js='else if'}else{js='if'} js +='(arguments.length>'+pos_len+')' js +='{throw TypeError("'+this.name+'() takes '+pos_len js +=' positional argument' js +=(pos_len>1 ? "s" : "") js +=' but more were given")}' new_node=new $Node() new $NodeJSCtx(new_node,js) wrong_nb_node.add(new_node)} for(var i=0;i0){js='var $defaults = {'+defs1.join(',')+'};'} new $NodeJSCtx(default_node,js) node.insert(0,default_node) node.add(def_func_node) var ret_node=new $Node() new $NodeJSCtx(ret_node,')();') node.parent.insert(rank+1,ret_node) var offset=2 if(this.type==='generator' && !this.declared){var sc=scope var env=[],pos=0 while(sc && sc.id!=='__builtins__'){var sc_id=sc.id.replace(/\./g,'_') if(sc===scope){env[pos++]='["'+sc_id+'",$locals]'}else{env[pos++]='["'+sc_id+'",$locals_'+sc_id+']'} sc=sc.parent_block} var env_string='['+env.join(', ')+']' js='$B.$BRgenerator('+env_string+',"'+this.name+'","'+this.id+'")' var gen_node=new $Node() gen_node.id=this.module var ctx=new $NodeCtx(gen_node) var expr=new $ExprCtx(ctx,'id',false) var name_ctx=new $IdCtx(expr,this.name) var assign=new $AssignCtx(expr) var expr1=new $ExprCtx(assign,'id',false) var js_ctx=new $NodeJSCtx(assign,js) expr1.tree.push(js_ctx) node.parent.insert(rank+offset,gen_node) this.declared=true offset++} var prefix=this.tree[0].to_js() if(this.decorated){prefix=this.alias} var indent=node.indent js=prefix+'.$infos = {' var name_decl=new $Node() new $NodeJSCtx(name_decl,js) node.parent.insert(rank+offset,name_decl) offset++ js=' __name__:"' if(this.scope.ntype=='class'){js+=this.scope.C.tree[0].name+'.'} js +=this.name+'",' var name_decl=new $Node() new $NodeJSCtx(name_decl,js) node.parent.insert(rank+offset,name_decl) offset++ var module=$get_module(this) new_node=new $Node() new $NodeJSCtx(new_node,' __defaults__ : ['+this.__defaults__.join(', ')+'],') node.parent.insert(rank+offset,new_node) offset++ var module=$get_module(this) new_node=new $Node() new $NodeJSCtx(new_node,' __module__ : "'+module.module+'",') node.parent.insert(rank+offset,new_node) offset++ js=' __doc__: '+(this.doc_string ||'None')+',' new_node=new $Node() new $NodeJSCtx(new_node,js) node.parent.insert(rank+offset,new_node) offset++ js=' __annotations__: {'+annotations.join(',')+'},' new_node=new $Node() new $NodeJSCtx(new_node,js) node.parent.insert(rank+offset,new_node) offset++ for(var attr in $B.bound[this.id]){this.varnames[attr]=true} var co_varnames=[] for(var attr in this.varnames){co_varnames.push('"'+attr+'"')} var h='\n'+' '.repeat(indent+8) js=' __code__:{'+h+'__class__:$B.$CodeDict' h=','+h js +=h+'co_argcount:'+this.argcount js +=h+'co_filename:$locals_'+scope.module.replace(/\./g,'_')+'["__file__"]' js +=h+'co_firstlineno:'+node.line_num js +=h+'co_flags:'+flags js +=h+'co_kwonlyargcount:'+this.kwonlyargcount js +=h+'co_name: "'+this.name+'"' js +=h+'co_nlocals: '+co_varnames.length js +=h+'co_varnames: ['+co_varnames.join(', ')+']' js +='}\n};' js +='None;' new_node=new $Node() new $NodeJSCtx(new_node,js) node.parent.insert(rank+offset,new_node) if(this.type=='def'){var parent=enter_frame_node.parent for(var pos=0;pos'+__BRYTHON__.loop_timeout*1000+ '){throw _b_.RuntimeError("script timeout")}'+h+'return true}'} var $range=false if(target.tree.length==1 && 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){$range=call}}} var new_nodes=[],pos=0 var children=node.children var offset=1 if($range && scope.ntype!='generator'){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 if(!scope.blurred){var _scope=$get_scope(this),found=[],fpos=0 while(1){if($B.bound[_scope.id]['range']){found[fpos++]=_scope.id} if(_scope.parent_block){_scope=_scope.parent_block} else{break}} range_is_builtin=found.length==1 && found[0]=="__builtins__" if(found==['__builtins__']){range_is_builtin=true}} var test_range_node=new $Node() if(range_is_builtin){new $NodeJSCtx(test_range_node,'if(1)')}else{new $NodeJSCtx(test_range_node,'if('+call.func.to_js()+'===$B.builtins.range)')} new_nodes[pos++]=test_range_node var idt=target.to_js() if($range.tree.length==1){var start=0,stop=$range.tree[0].to_js()}else{var start=$range.tree[0].to_js(),stop=$range.tree[1].to_js()} var js=idt+'='+start+';'+h+'var $stop_'+num +'=$B.int_or_bool('+ stop+'),'+h+ ' $next'+num+'= '+idt+','+h+ ' $safe'+num+'= typeof $next'+num+'=="number" && typeof '+ '$stop_'+num+'=="number";'+h if(__BRYTHON__.loop_timeout){js +=test_timeout+h+'while($test_timeout'+num+'())'}else{js +='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)}')) for(var i=0;i=0;i--){node.parent.insert(rank+k,new_nodes[k].children[i])} node.parent.children[rank].line_num=node.line_num node.children=[] return 0} var else_node=new $Node() new $NodeJSCtx(else_node,'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 js='$locals["$next'+num+'"]' js +='=getattr(iter('+iterable.to_js()+'),"__next__");\n' new $NodeJSCtx(new_node,js) new_nodes[pos++]=new_node if(this.has_break){ new_node=new $Node() new $NodeJSCtx(new_node,local_ns+'["$no_break'+num+'"]=true;') new_nodes[pos++]=new_node} var while_node=new $Node() if(__BRYTHON__.loop_timeout){js=test_timeout+h if(this.has_break){js +='while($test_timeout'+num+'() && '+ local_ns+'["$no_break'+num+'"])'} else{js +='while($test_timeout'+num+'())'}}else{if(this.has_break){js='while('+local_ns+'["$no_break'+num+'"])'} else{js='while(1)'}} new $NodeJSCtx(while_node,js) while_node.C.loop_num=num while_node.C.type='for' while_node.line_num=node.line_num if(scope.ntype=='generator'){ while_node.loop_start=num} 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=new $Node() new $NodeJSCtx(try_node,'try') while_node.add(try_node) var iter_node=new $Node() iter_node.parent=$get_node(this).parent 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) var catch_node=new $Node() var js='catch($err){if($B.is_exc($err,[StopIteration]))' js +='{delete $locals["$next'+num+'"];$B.clear_exc();break;}' js +='else{throw($err)}}' new $NodeJSCtx(catch_node,js) while_node.add(catch_node) for(var i=0;i0){if(_mod.charAt(0)=='.'){if(package===undefined){if($B.imported[mod]!==undefined){package=$B.imported[mod].__package__}}else{package=$B.imported[package]} if(package===undefined){return 'throw SystemError("Parent module \'\' not loaded,'+ ' cannot perform relative import")'}else if(package=='None'){console.log('package is None !')}else{packages.push(package)} _mod=_mod.substr(1)}else{break}} if(_mod){packages.push(_mod)} this.module=packages.join('.') var mod_name=this.module.replace(/\$/g,''),localns='$locals_'+scope.id.replace(/\./g,'_'); if(this.blocking){res[pos++]='$B.$import("'; res[pos++]=mod_name+'",["'; res[pos++]=this.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]=='*'){res[pos++]='\n'+head+'for(var $attr in $B.imported["'+mod_name+ '"]){if($attr.charAt(0)!=="_"){'+ '$locals[$attr]=$B.imported["'+mod_name+'"][$attr]}};'}else{for(var i=0;i-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($B.bound[scope.id][val]){found.push(scope)}}}else{if($B.bound[scope.id][val]){found.push(scope)}} if(scope.parent_block){scope=scope.parent_block} else{break}} this.found=found if(this.nonlocal && found[0]===innermost){found.shift()} if(found.length>0){ if(!this.bound && found[0].C && found[0]===innermost && val.charAt(0)!='$'){var locs=$get_node(this).locals ||{},nonlocs=innermost.nonlocals if(locs[val]===undefined && (nonlocs===undefined ||nonlocs[val]===undefined)){return '$B.$local_search("'+val+'")'}} if(found.length>1 && found[0].C){if(found[0].C.tree[0].type=='class' && !this.bound){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=$B.bound[found[0].id][val] res=ns0}else{this.found=$B.bound[found[1].id][val] res=ns1} return res+'["'+val+'"]'}else{this.found=false var res=ns0 + '["'+val+'"]!==undefined ? ' res +=ns0 + '["'+val+'"] : ' return res + ns1 + '["'+val+'"]'}}} var scope=found[0] this.found=$B.bound[scope.id][val] var scope_ns='$locals_'+scope.id.replace(/\./g,'_') if(scope.C===undefined){ if(scope.id=='__builtins__'){if(gs.blurred){ val='('+global_ns+'["'+val+'"] || '+val+')'}else{ this.is_builtin=true}}else if(scope.id==scope.module){if(this.bound ||this.augm_assign){val=scope_ns+'["'+val+'"]'}else{if(scope===innermost && this.env[val]===undefined){var locs=$get_node(this).locals ||{} if(locs[val]===undefined){ if(found.length>1 && found[1].id=='__builtins__'){this.is_builtin=true return val+$to_js(this.tree,'')}} return '$B.$search("'+val+'")'}else{ val='$B.$check_def("'+val+'",'+scope_ns+'["'+val+'"])'}}}else{val=scope_ns+'["'+val+'"]'}}else if(scope===innermost){if($B._globals[scope.id]&& $B._globals[scope.id][val]){val=global_ns+'["'+val+'"]'}else if(!this.bound && !this.augm_assign){val='$B.$check_def_local("'+val+'",$locals["'+val+'"])'}else{val='$locals["'+val+'"]'}}else if(!this.bound && !this.augm_assign){ val='$B.$check_def_free("'+val+'",'+scope_ns+'["'+val+'"])'}else{val=scope_ns+'["'+val+'"]'} return val+$to_js(this.tree,'')}else{ this.unknown_binding=true return '$B.$search("'+val+'")'}}} function $ImaginaryCtx(C,value){ this.type='imaginary' this.value=value this.toString=function(){return 'imaginary '+this.value} this.parent=C this.tree=[] C.tree[C.tree.length]=this this.to_js=function(){this.js_processed=true return 'complex(0,'+this.value+')'}} function $ImportCtx(C){ this.type='import' this.parent=C this.tree=[] C.tree[C.tree.length]=this this.expect='id' this.toString=function(){return 'import '+this.tree} this.bind_names=function(){ var scope=$get_scope(this) for(var i=0;i1){bound=parts[0]}}else{bound=this.tree[i].alias} $B.bound[scope.id][bound]=true $B.type[scope.id][bound]='module'}} this.to_js=function(){this.js_processed=true var scope=$get_scope(this) var mod=scope.module var res=[],pos=0 for(var i=0;i1){bound=parts[0]}}else{bound=this.tree[i].alias} $B.bound[scope.id][bound]=true $B.type[scope.id][bound]='module'}} this.transform=function(node,rank){ for(var i=1;i$B.min_int && v<$B.max_int){return v} else{return '$B.LongInt("'+value[1]+'", '+value[0]+')'}}} function $JSCode(js){this.js=js this.toString=function(){return this.js} this.to_js=function(){this.js_processed=true return this.js}} function $KwArgCtx(C){ this.type='kwarg' this.parent=C.parent this.tree=[C.tree[0]] C.parent.tree.pop() C.parent.tree.push(this) 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'])} var scope=$get_scope(this) this.toString=function(){return 'kwarg '+this.tree[0]+'='+this.tree[1]} this.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))+'}'}} function $LambdaCtx(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.toString=function(){return '(lambda) '+this.args_start+' '+this.body_start} this.to_js=function(){this.js_processed=true var module=$get_module(this) var src=$B.$py_src[module.id] var qesc=new RegExp('"',"g"), args=src.substring(this.args_start,this.body_start).replace(qesc,'\\"'),body=src.substring(this.body_start+1,this.body_end).replace(qesc,'\\"') body=body.replace(/\n/g,' ') var scope=$get_scope(this),sc=scope,env=[],pos=0 while(sc && sc.id!=='__builtins__'){env[pos++]='["'+sc.id+'",$locals_'+sc.id.replace(/\./g,'_')+']' sc=sc.parent_block} var env_string='['+env.join(', ')+']' return '$B.$lambda('+env_string+',"'+args+'","'+body+'")'}} function $ListOrTupleCtx(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 this.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+')'}} this.is_comp=function(){switch(this.real){case 'list_comp': case 'gen_expr': case 'dict_or_set_comp': return true} return false} this.get_src=function(){ var scope=$get_scope(this) var ident=scope.id while($B.$py_src[ident]===undefined && $B.modules[ident].parent_block){ident=$B.modules[ident].parent_block.id} if($B.$py_src[ident]===undefined){ return $B.$py_src[scope.module]} return $B.$py_src[ident]} this.ids=function(){ var _ids={} for(var i=0;i1){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)} if(node.children.length==0){return $to_js(this.tree)+';'} return $to_js(this.tree)}} function $NodeJS(js){var node=new $Node() new $NodeJSCtx(node,js) return node} function $NodeJSCtx(node,js){ this.node=node node.C=this this.type='node_js' this.tree=[js] this.toString=function(){return 'js '+js} this.to_js=function(){this.js_processed=true return js}} function $NonlocalCtx(C){ this.type='global' 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"])} this.toString=function(){return 'global '+this.tree} this.add=function(name){if($B.bound[this.scope.id][name]=='arg'){$_SyntaxError(C,["name '"+name+"' is parameter and nonlocal"])} this.names[name]=[false,$pos] this.scope.nonlocals[name]=true} this.transform=function(node,rank){var 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($B.bound[pscope.id][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"])}}}} this.to_js=function(){this.js_processed=true return ''}} function $NotCtx(C){ this.type='not' this.parent=C this.tree=[] C.tree[C.tree.length]=this this.toString=function(){return 'not ('+this.tree+')'} this.to_js=function(){this.js_processed=true return '!bool('+$to_js(this.tree)+')'}} function $OpCtx(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=$B.bound[this.scope.id][C.tree[0].value] if(binding){this.left_type=binding.type}}} C.parent.tree.pop() C.parent.tree.push(this) this.toString=function(){return '(op '+this.op+') ['+this.tree+']'} this.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] switch(t1.type){case 'int': switch(t0.type){case 'int': return t0.to_js()+this.op+t1.to_js() case 'str': return '$B.$TypeError("unorderable types: int() < str()")' case 'id': var res='typeof '+t0.to_js()+'=="number" ? ' res +=t0.to_js()+this.op+t1.to_js()+' : ' res +='getattr('+this.tree[0].to_js() res +=',"__'+method+'__")('+this.tree[1].to_js()+')' return res} break; case 'str': switch(t0.type){case 'str': return t0.to_js()+this.op+t1.to_js() case 'int': return '$B.$TypeError("unorderable types: str() < int()")' case 'id': var res='typeof '+t0.to_js()+'=="string" ? ' res +=t0.to_js()+this.op+t1.to_js()+' : ' res +='getattr('+this.tree[0].to_js() res +=',"__'+method+'__")('+this.tree[1].to_js()+')' return res} break; case 'id': if(t0.type=='id'){var res='typeof '+t0.to_js()+'!="object" && ' res +='typeof '+t0.to_js()+'==typeof '+t1.to_js() res +=' ? '+t0.to_js()+this.op+t1.to_js()+' : ' res +='getattr('+this.tree[0].to_js() res +=',"__'+method+'__")('+this.tree[1].to_js()+')' return res} break;}}} switch(this.op){case 'and': var res='$B.$test_expr($B.$test_item('+this.tree[0].to_js()+')&&' return res + '$B.$test_item('+this.tree[1].to_js()+'))' 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(v>$B.min_int && v<$B.max_int){return op+v} return 'getattr('+x.to_js()+', "'+method+'")()' case 'float': return 'float('+op+x.value+')' case 'imaginary': return 'complex(0,'+op+x.value+')'}} return 'getattr('+this.tree[1].to_js()+',"'+method+'")()' case 'is': return 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 '*': 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-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] var 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=$B.bound[scope.id],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.add('+v0.to_js()+','+v1.to_js()+')' 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 for(var i=0;i0 && child.tree[0].type=='packed'){$_SyntaxError(C,["two starred expressions in assignment"])}}} this.parent=C this.tree=[] C.tree[C.tree.length]=this this.toString=function(){return '(packed) '+this.tree} this.to_js=function(){this.js_processed=true return $to_js(this.tree)}} function $PassCtx(C){ this.type='pass' this.parent=C this.tree=[] C.tree[C.tree.length]=this this.toString=function(){return '(pass)'} this.to_js=function(){this.js_processed=true return 'void(0)'}} function $RaiseCtx(C){ this.type='raise' this.parent=C this.tree=[] C.tree[C.tree.length]=this this.toString=function(){return ' (raise) '+this.tree} this.to_js=function(){this.js_processed=true var res='' if(this.tree.length===0)return '$B.$raise()' var exc=this.tree[0],exc_js=exc.to_js() if(exc.type==='id' || (exc.type==='expr' && exc.tree[0].type==='id')){res='if(isinstance('+exc_js+',type)){throw '+exc_js+'()}' return res + 'else{throw '+exc_js+'}'} while(this.tree.length>1)this.tree.pop() return res+'throw '+$to_js(this.tree)}} function $RawJSCtx(C,js){this.type="raw_js" C.tree[C.tree.length]=this this.parent=C this.toString=function(){return '(js) '+js} this.to_js=function(){this.js_processed=true return js}} function $ReturnCtx(C){ this.type='return' this.parent=C this.tree=[] C.tree[C.tree.length]=this var node=$get_node(this) while(node.parent){if(node.parent.C && node.parent.C.tree[0].type=='for'){node.parent.C.tree[0].has_return=true break} node=node.parent} this.toString=function(){return 'return '+this.tree} this.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=$get_scope(this) if(scope.ntype=='generator'){return 'return [$B.generator_return(' + $to_js(this.tree)+')]'} var node=$get_node(this),leave_frame=true,in_try=false while(node && leave_frame){if(node.is_try){in_try=true pnode=node.parent,flag=false for(var i=0;i0){var elt=pctx.tree[0] if(elt.type=='for' || (elt.type=='condition' && elt.token=='while')){elt.has_break=true this.loop_num=elt.loop_num}}} this.toString=function(){return this.token} this.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}} function $StarArgCtx(C){ this.type='star_arg' this.parent=C this.tree=[] C.tree[C.tree.length]=this this.toString=function(){return '(star arg) '+this.tree} this.to_js=function(){this.js_processed=true return '{$nat:"ptuple",arg:'+$to_js(this.tree)+'}'}} function $StringCtx(C,value){ this.type='str' this.parent=C this.tree=[value] this.raw=false C.tree[C.tree.length]=this this.toString=function(){return 'string '+(this.tree||'')} this.to_js=function(){this.js_processed=true var res='',type=null for(var i=0;i0 && ctx.tree[0].alias!==null && ctx.tree[0].alias!==undefined){ var new_node=new $Node() var alias=ctx.tree[0].alias var js='$locals["'+alias+'"]' js +='=$B.exception($err'+$loop_num+')' new $NodeJSCtx(new_node,js) node.parent.children[pos].insert(0,new_node)} 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 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 $err'+$loop_num))} if(has_else){var else_node=new $Node() else_node.module=scope.module new $NodeJSCtx(else_node,'if(!$B.$failed'+$loop_num+')') for(var i=0;i1){ 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] for(var i=0;i1){var nw=new $Node() var ctx=new $NodeCtx(nw) nw.parent=node nw.module=node.module nw.indent=node.indent+4 var wc=new $WithCtx(ctx) wc.tree=this.tree.slice(1) for(var i=0;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() try_node.is_try=true new $NodeJSCtx(try_node,'try') node.add(try_node) if(this.tree[0].alias){var alias=this.tree[0].alias var js='$locals'+'["'+alias+'"] = $value'+num var value_node=new $Node() new $NodeJSCtx(value_node,js) try_node.add(value_node)} for(var i=0;i0){var firstchild=node.children[0] if(firstchild.C.tree && firstchild.C.tree[0].type=='expr'){if(firstchild.C.tree[0].tree[0].type=='str') doc_string=firstchild.C.tree[0].tree[0].to_js()}} return doc_string} function $get_scope(C){ var ctx_node=C.parent while(ctx_node.type!=='node'){ctx_node=ctx_node.parent} var tree_node=ctx_node.node var 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.elt=scope.C.tree[0] scope.is_function=ntype!='class' return scope} tree_node=tree_node.parent} var scope=tree_node.parent ||tree_node scope.ntype="module" scope.elt=scope.module return scope} function $get_module(C){ var ctx_node=C.parent while(ctx_node.type!=='node'){ctx_node=ctx_node.parent} var tree_node=ctx_node.node var scope=null while(tree_node.parent.type!=='module'){tree_node=tree_node.parent} var scope=tree_node.parent scope.ntype="module" return scope} function $get_node(C){var ctx=C while(ctx.parent){ctx=ctx.parent} return ctx.node} function $get_blocks(name,scope){var res=[] while(true){if($B.bound[scope.id][name]!==undefined){res.push(scope.id)} if(scope.parent_block){if(scope.parent_block.id=='__builtins__'){if(scope.blurred){return false}}}else{break} scope=scope.parent_block} return res} function $set_type(scope,expr,value){ if(expr.type=='expr'){expr=expr.tree[0]} while(value.type=='expr' && value.tree.length==1){value=value.tree[0]} if(value.type=='list_or_tuple' && value.real=='tuple' && value.tree.length==1){return $set_type(scope.id,expr,value.tree[0])} if($B.type[scope.id]===undefined){return} if(expr.type=="id"){switch(value.type){case 'int': case 'str': $B.type[scope.id][expr.value]=value.type return case 'list_or_tuple': case 'dict_or_set': $B.type[scope.id][expr.value]=value.real return case 'id': $B.type[scope.id][expr.value]=$B.type[scope.id][value.value] return case 'call': var func_name=value.func.value if($B.bound.__builtins__[func_name]!==undefined){var blocks=$get_blocks(func_name,scope) if(blocks.length==1 && blocks[0]=='__builtins__'){switch(func_name){case 'int': case 'list': case 'str': $B.type[scope.id][expr.value]=func_name return}}} break default: break}} $B.type[scope.id][expr.value]=false} function $ws(n){return ' '.repeat(n)} function $to_js_map(tree_element){if(tree_element.to_js !==undefined)return tree_element.to_js() throw Error('no to_js() for '+tree_element)} function $to_js(tree,sep){if(sep===undefined){sep=','} return tree.map($to_js_map).join(sep)} var $expr_starters=['id','imaginary','int','float','str','bytes','[','(','{','not','lambda'] function $arbo(ctx){while(ctx.parent!=undefined){ctx=ctx.parent} return ctx} function $transition(C,token){ switch(C.type){case 'abstract_expr': 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} switch(token){case 'id': return new $IdCtx(new $ExprCtx(C,'id',commas),arguments[2]) case 'str': return new $StringCtx(new $ExprCtx(C,'str',commas),arguments[2]) case 'bytes': return new $StringCtx(new $ExprCtx(C,'bytes',commas),arguments[2]) case 'int': return new $IntCtx(new $ExprCtx(C,'int',commas),arguments[2]) case 'float': return new $FloatCtx(new $ExprCtx(C,'float',commas),arguments[2]) case 'imaginary': return new $ImaginaryCtx(new $ExprCtx(C,'imaginary',commas),arguments[2]) 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=arguments[2] 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)} $_SyntaxError(C,'token '+token+' after '+C) case '=': $_SyntaxError(C,token) case 'yield': return new $AbstractExprCtx(new $YieldCtx(C),true) case ':': return $transition(C.parent,token,arguments[2]) case ')': case ',': switch(C.parent.type){case 'list_or_tuple': case 'call_arg': case 'op': case 'yield': break default: $_SyntaxError(C,token)}} return $transition(C.parent,token,arguments[2]) case 'annotation': return $transition(C.parent,token) case 'assert': if(token==='eol')return $transition(C.parent,token) $_SyntaxError(C,token) case 'assign': 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) case 'attribute': if(token==='id'){var name=arguments[2] if(noassign[name]===true){$_SyntaxError(C,["cannot assign to "+name])} C.name=name return C.parent} $_SyntaxError(C,token) case 'augm_assign': 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) case 'break': if(token==='eol')return $transition(C.parent,'eol') $_SyntaxError(C,token) case 'call': switch(token){case ',': if(C.expect=='id'){$_SyntaxError(C,token)} return C case 'id': case 'imaginary': case 'int': case 'float': case 'str': case 'bytes': case '[': case '(': case '{': case '.': case 'not': case 'lambda': if(C.has_dstar)$_SyntaxError(C,token) C.expect=',' return $transition(new $CallArgCtx(C),token,arguments[2]) case ')': C.end=$pos return C.parent case 'op': C.expect=',' switch(arguments[2]){case '-': case '~': case '+': C.expect=',' return $transition(new $CallArgCtx(C),token,arguments[2]) case '*': C.has_star=true; return new $StarArgCtx(C) case '**': C.has_dstar=true return new $DoubleStarArgCtx(C)} throw Error('SyntaxError')} return $transition(C.parent,token,arguments[2]) case 'call_arg': switch(token){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,arguments[2])} break case '=': if(C.expect===','){return new $ExprCtx(new $KwArgCtx(C),'kw_value',false)} break case 'for': 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=arguments[2] 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 arg after keyword arg'])} 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){console.log('err2') $_SyntaxError(C,['non-keyword arg after keyword arg'])} return $transition(C.parent,token,arguments[2])} console.log('C '+C+'token '+token+' expect '+C.expect)} $_SyntaxError(C,'token '+token+' after '+C) case 'class': switch(token){case 'id': if(C.expect==='id'){C.set_name(arguments[2]) C.expect='(:' return C} break case '(': return new $CallCtx(C) case ':': return $BodyCtx(C)} $_SyntaxError(C,'token '+token+' after '+C) case 'comp_if': return $transition(C.parent,token,arguments[2]) case 'comp_for': 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,arguments[2])} $_SyntaxError(C,'token '+token+' after '+C) case 'comp_iterable': return $transition(C.parent,token,arguments[2]) case 'comprehension': switch(token){case 'if': return new $AbstractExprCtx(new $CompIfCtx(C),false) case 'for': return new $TargetListCtx(new $CompForCtx(C))} return $transition(C.parent,token,arguments[2]) case 'condition': if(token===':')return $BodyCtx(C) $_SyntaxError(C,'token '+token+' after '+C) case 'continue': if(token=='eol')return C.parent $_SyntaxError(C,'token '+token+' after '+C) case 'ctx_manager_alias': switch(token){case ',': case ':': return $transition(C.parent,token,arguments[2])} $_SyntaxError(C,'token '+token+' after '+C) case 'decorator': if(token==='id' && C.tree.length===0){return $transition(new $AbstractExprCtx(C,false),token,arguments[2])} if(token==='eol'){return $transition(C.parent,token)} $_SyntaxError(C,'token '+token+' after '+C) case 'def': switch(token){case 'id': if(C.name){$_SyntaxError(C,'token '+token+' after '+C)} C.set_name(arguments[2]) return C case '(': if(C.name===null){$_SyntaxError(C,'token '+token+' after '+C)} 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)} $_SyntaxError(C,'token '+token+' after '+C) case 'del': if(token==='eol')return $transition(C.parent,token) $_SyntaxError(C,'token '+token+' after '+C) case 'dict_or_set': if(C.closed){switch(token){case '[': return new $SubCtx(C.parent) case '(': return new $CallArgCtx(new $CallCtx(C)) case 'op': return new $AbstractExprCtx(new $OpCtx(C,arguments[2]),false)} return $transition(C.parent,token,arguments[2])}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.tree.length%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.tree.length%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 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,arguments[2]) case 'op': switch(arguments[2]){case '+': return C case '-': case '~': C.expect=',' var left=new $UnaryCtx(C,arguments[2]) if(arguments[2]=='-'){var op_expr=new $OpCtx(left,'unary_neg')} else if(arguments[2]=='+'){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,arguments[2])} break case 'double_star_arg': 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,arguments[2]) case ',': return C.parent 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) case 'ellipsis': if(token=='.'){C.nbdots++;return C} else{if(C.nbdots!=3){$pos--;$_SyntaxError(C,'token '+token+' after '+C)}else{return $transition(C.parent,token,arguments[2])}} case 'except': switch(token){case 'id': case 'imaginary': case 'int': case 'float': case 'str': case 'bytes': case '[': case '(': case '{': case 'not': case 'lamdba': if(C.expect==='id'){C.expect='as' return $transition(new $AbstractExprCtx(C,false),token,arguments[2])} 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(arguments[2]) 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) case 'expr': switch(token){case 'id': case 'imaginary': case 'int': case 'float': case 'str': case 'bytes': case '[': case '(': case '{': case '.': case 'not': case 'lamdba': if(C.expect==='expr'){C.expect=',' return $transition(new $AbstractExprCtx(C,false),token,arguments[2])}} 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){ 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=arguments[2] 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{break}} if(repl===null){if(op==='and' ||op==='or'){while(C.parent.type==='not'|| (C.parent.type==='expr'&&C.parent.parent.type==='not')){ C=C.parent op_parent=C.parent}}else{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)} 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] var c2_clone=new Object() for(var attr in c2){c2_clone[attr]=c2[attr]} 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') 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': if(C.expect===','){return new $AbstractExprCtx(new $AugmentedAssignCtx(C,arguments[2]),true)} break case '=': if(C.expect===','){if(C.parent.type==="call_arg"){return new $AbstractExprCtx(new $KwArgCtx(C),true)}else if(C.parent.type=="annotation"){return $transition(C.parent.parent,token,arguments[2])} while(C.parent!==undefined)C=C.parent C=C.tree[0] return new $AbstractExprCtx(new $AssignCtx(C),true)} break case 'if': if(C.parent.type!=='comp_iterable'){ var ctx=C while(ctx.parent && ctx.parent.type=='op'){ctx=ctx.parent if(ctx.type=='expr' && ctx.parent && ctx.parent.type=='op'){ctx=ctx.parent}} return new $AbstractExprCtx(new $TernaryCtx(ctx),false)}} return $transition(C.parent,token) case 'expr_not': if(token=='in'){ C.parent.tree.pop() return new $AbstractExprCtx(new $OpCtx(C.parent,'not_in'),false)} $_SyntaxError(C,'token '+token+' after '+C) case 'for': switch(token){case 'in': return new $AbstractExprCtx(new $ExprCtx(C,'target list',true),false) case ':': return $BodyCtx(C)} $_SyntaxError(C,'token '+token+' after '+C) case 'from': switch(token){case 'id': if(C.expect=='id'){C.add_name(arguments[2]) C.expect=',' return C} if(C.expect==='alias'){C.aliases[C.names[C.names.length-1]]=arguments[2] C.expect=',' return C} case '.': if(C.expect=='module'){if(token=='id'){C.module +=arguments[2]} else{C.module +='.'} return C} case 'import': case 'IMPRT': C.blocking=token=='import' if(C.expect=='module'){C.expect='id' return C} case 'op': if(arguments[2]=='*' && 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 '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) case 'func_arg_id': switch(token){case '=': if(C.expect==='='){C.parent.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){console.log('parent '+C.parent,C.parent) $pos -=C.name.length $_SyntaxError(C,['non-default argument follows default argument'])}else{return $transition(C.parent,token)} case ':': return new $AbstractExprCtx(new $AnnotationCtx(C),false)} $_SyntaxError(C,'token '+token+' after '+C) case 'func_args': switch(token){case 'id': if(C.expect==='id'){C.expect=',' if(C.names.indexOf(arguments[2])>-1){$_SyntaxError(C,['duplicate argument '+arguments[2]+' in function definition'])}} return new $FuncArgIdCtx(C,arguments[2]) case ',': if(C.has_kw_arg)$_SyntaxError(C,'duplicate kw arg') if(C.expect===','){C.expect='id' return C} $_SyntaxError(C,'token '+token+' after '+C) case ')': return C.parent case 'op': var op=arguments[2] C.expect=',' if(op=='*'){if(C.has_star_arg){$_SyntaxError(C,'duplicate star arg')} return new $FuncStarArgCtx(C,'*')} if(op=='**')return new $FuncStarArgCtx(C,'**') $_SyntaxError(C,'token '+op+' after '+C)} $_SyntaxError(C,'token '+token+' after '+C) case 'func_star_arg': switch(token){case 'id': if(C.name===undefined){if(C.parent.names.indexOf(arguments[2])>-1){$_SyntaxError(C,['duplicate argument '+arguments[2]+' in function definition'])}} C.set_name(arguments[2]) C.parent.names.push(arguments[2]) return C case ',': case ')': if(C.name===undefined){ C.set_name('$dummy') C.parent.names.push('$dummy')} return $transition(C.parent,token) case ':': if(C.name===undefined){$_SyntaxError(C,'annotation on an unnamed parameter')} return new $AbstractExprCtx(new $AnnotationCtx(C),false)} $_SyntaxError(C,'token '+token+' after '+C) case 'global': switch(token){case 'id': if(C.expect==='id'){new $IdCtx(C,arguments[2]) C.add(arguments[2]) 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) case 'id': 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,arguments[2]) case 'op': return $transition(C.parent,token,arguments[2]) case 'id': case 'str': case 'int': case 'float': case 'imaginary': $_SyntaxError(C,'token '+token+' after '+C)} return $transition(C.parent,token,arguments[2]) case 'import': switch(token){case 'id': if(C.expect==='id'){new $ImportedModuleCtx(C,arguments[2]) C.expect=',' return C} if(C.expect==='qual'){C.expect=',' C.tree[C.tree.length-1].name +='.'+arguments[2] C.tree[C.tree.length-1].alias +='.'+arguments[2] return C} if(C.expect==='alias'){C.expect=',' C.tree[C.tree.length-1].alias=arguments[2] 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) case 'imaginary': case 'int': case 'float': switch(token){case 'id': case 'imaginary': case 'int': case 'float': case 'str': case 'bytes': case '[': case '(': case '{': case 'not': case 'lamdba': $_SyntaxError(C,'token '+token+' after '+C)} return $transition(C.parent,token,arguments[2]) case 'kwarg': if(token===',')return new $CallArgCtx(C.parent.parent) return $transition(C.parent,token) case 'lambda': 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){return $transition(new $CallCtx(C),token,arguments[2])} $_SyntaxError(C,'token '+token+' after '+C) case 'list_or_tuple': if(C.closed){if(token==='[')return new $SubCtx(C.parent) if(token==='(')return new $CallCtx(C) return $transition(C.parent,token,arguments[2])}else{if(C.expect===','){switch(C.real){case 'tuple': case 'gen_expr': if(token===')'){C.closed=true if(C.real==='gen_expr'){C.intervals.push($pos)} return C.parent} break case 'list': case 'list_comp': if(token===']'){C.closed=true if(C.real==='list_comp'){C.intervals.push($pos)} return C} break case 'dict_or_set_comp': if(token==='}'){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'){C.real='list_comp'} else{C.real='gen_expr'} C.intervals=[C.start+1] C.expression=C.tree C.tree=[] var comp=new $ComprehensionCtx(C) return new $TargetListCtx(new $CompForCtx(comp))} return $transition(C.parent,token,arguments[2])}else if(C.expect==='id'){switch(C.real){case 'tuple': if(token===')'){C.closed=true return C.parent} if(token=='eol' && C.implicit===true){C.closed=true return $transition(C.parent,token)} break case 'gen_expr': if(token===')'){C.closed=true return $transition(C.parent,token)} break case 'list': if(token===']'){C.closed=true return C} break} switch(token){case '=': if(C.real=='tuple' && C.implicit===true){C.closed=true 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,arguments[2])}else{break} case ',': $_SyntaxError(C,'unexpected comma inside list') default: C.expect=',' var expr=new $AbstractExprCtx(C,false) return $transition(expr,token,arguments[2])}}else{return $transition(C.parent,token,arguments[2])}} case 'list_comp': switch(token){case ']': return C.parent case 'in': return new $ExprCtx(C,'iterable',true) case 'if': return new $ExprCtx(C,'condition',true)} $_SyntaxError(C,'token '+token+' after '+C) case 'node': switch(token){case 'id': case 'imaginary': case 'int': case 'float': case 'str': case 'bytes': case '[': case '(': case '{': case 'not': case 'lamdba': case '.': var expr=new $AbstractExprCtx(C,true) return $transition(expr,token,arguments[2]) case 'op': switch(arguments[2]){case '*': case '+': case '-': case '~': var expr=new $AbstractExprCtx(C,true) return $transition(expr,token,arguments[2])} break 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 'IMPRT': return new $IMPRTCtx(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 $RaiseCtx(C) 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 'eol': if(C.tree.length===0){ C.node.parent.children.pop() return C.node.parent.C} return C} $_SyntaxError(C,'token '+token+' after '+C) case 'not': 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 'lamdba': var expr=new $AbstractExprCtx(C,false) return $transition(expr,token,arguments[2]) case 'op': var a=arguments[2] if('+'==a ||'-'==a ||'~'==a){var expr=new $AbstractExprCtx(C,false) return $transition(expr,token,arguments[2])}} return $transition(C.parent,token) case 'op': if(C.op===undefined){$_SyntaxError(C,['C op undefined '+C])} if(C.op.substr(0,5)=='unary'){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 'lamdba': return $transition(new $AbstractExprCtx(C,false),token,arguments[2]) case 'op': switch(arguments[2]){case '+': case '-': case '~': return new $UnaryCtx(C,arguments[2])} default: if(C.tree[C.tree.length-1].type=='abstract_expr'){$_SyntaxError(C,'token '+token+' after '+C)}} var t0=C.tree[0],t1=C.tree[1] if(t0.tree && t1.tree){t0=t0.tree[0] t1=t1.tree[0]} return $transition(C.parent,token) case 'packed': if(token==='id'){new $IdCtx(C,arguments[2]) C.parent.expect=',' return C.parent} $_SyntaxError(C,'token '+token+' after '+C) case 'pass': if(token==='eol')return C.parent $_SyntaxError(C,'token '+token+' after '+C) case 'raise': switch(token){case 'id': if(C.tree.length===0){return new $IdCtx(new $ExprCtx(C,'exc',false),arguments[2])} 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) case 'return': var no_args=C.tree[0].type=='abstract_expr' if(!no_args){var scope=$get_scope(C) if(scope.ntype=='generator'){$_SyntaxError(C,["'return' with argument inside generator"])} scope.has_return_with_arguments=true} return $transition(C.parent,token) case 'single_kw': if(token===':')return $BodyCtx(C) $_SyntaxError(C,'token '+token+' after '+C) case 'star_arg': switch(token){case 'id': if(C.parent.type=="target_list"){C.tree.push(arguments[2]) C.parent.expect=',' console.log('return parent',C.parent) return C.parent} return $transition(new $AbstractExprCtx(C,false),token,arguments[2]) case 'imaginary': case 'int': case 'float': case 'str': case 'bytes': case '[': case '(': case '{': case 'not': case 'lamdba': return $transition(new $AbstractExprCtx(C,false),token,arguments[2]) case ',': return $transition(C.parent,token) 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) case 'str': 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(arguments[2]) return C} return $transition(C.parent,token,arguments[2]) case 'sub': switch(token){case 'id': case 'imaginary': case 'int': case 'float': case 'str': case 'bytes': case '[': case '(': case '{': case '.': case 'not': case 'lamdba': var expr=new $AbstractExprCtx(C,false) return $transition(expr,token,arguments[2]) case ']': return C.parent case ':': if(C.tree.length==0){new $AbstractExprCtx(C,false)} return new $AbstractExprCtx(C,false)} $_SyntaxError(C,'token '+token+' after '+C) case 'target_list': switch(token){case 'id': if(C.expect==='id'){C.expect=',' return new $IdCtx(new $ExprCtx(C,'target',false),arguments[2])} case 'op': if(C.expect=='id' && arguments[2]=='*'){ return new $PackedCtx(C)} case '(': case '[': if(C.expect==='id'){C.expect=',' return new $TargetListCtx(C)} 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,arguments[2])}else if(token=='in'){ return $transition(C.parent,token,arguments[2])} $_SyntaxError(C,'token '+token+' after '+C) case 'ternary': if(token==='else'){C.in_else=true return new $AbstractExprCtx(C,false)} return $transition(C.parent,token,arguments[2]) case 'try': if(token===':')return $BodyCtx(C) $_SyntaxError(C,'token '+token+' after '+C) case 'unary': switch(token){case 'int': case 'float': case 'imaginary': console.log(token,arguments[2],'after',C) var expr=C.parent C.parent.parent.tree.pop() var value=arguments[2] 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,arguments[2]) if(true){ var repl=new $AttrCtx(expr) if(C.op==='+'){repl.name='__pos__'} else if(C.op==='-'){repl.name='__neg__'} else{repl.name='__invert__'} var call=new $CallCtx(expr) return expr1} return C.parent case 'op': if('+'==arguments[2]||'-'==arguments[2]){var op=arguments[2] if(C.op===op){C.op='+'}else{C.op='-'} return C}} return $transition(C.parent,token,arguments[2]) case 'with': switch(token){case 'id': if(C.expect==='id'){C.expect='as' return $transition(new $AbstractExprCtx(C,false),token,arguments[2])} if(C.expect==='alias'){if(C.parenth!==undefined){C.expect=','} else{C.expect=':'} C.set_alias(arguments[2]) return C} break 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'){console.log('C',C,'token',token) 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) case 'yield': if(token=='from'){ if(C.tree[0].type!='abstract_expr'){ $_SyntaxError(C,"'from' must follow 'yield'")} C.from=true C.tree=[] return new $AbstractExprCtx(C,true)} return $transition(C.parent,token)}} $B.forbidden=['case','catch','constructor','Date','delete','default','enum','extends','Error','history','function','location','Math','new','null','Number','RegExp','super','this','throw','var','toString'] var s_escaped='abfnrtvxuU"'+"'"+'\\',is_escaped={} for(var i=0;i0)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(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 && $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} pos +=end+1;continue} if(car=='"' ||car=="'"){var raw=C.type=='str' && C.raw,bytes=false ,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} 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 var zone=car var found=false while(end-1){$pos=pos-name.length if(unsupported.indexOf(name)>-1){$_SyntaxError(C,"Unsupported Python keyword '"+name+"'")} if(name=='not'){var re=/^\s+in\s+/ var res=re.exec(src.substr(pos)) if(res!==null){pos +=res[0].length C=$transition(C,'op','not_in')}else{C=$transition(C,name)}}else{C=$transition(C,name)}}else if($operators[name]!==undefined && $B.forbidden.indexOf(name)==-1){ $pos=pos-name.length C=$transition(C,'op',name)}else if((src.charAt(pos)=='"'||src.charAt(pos)=="'") &&['r','b','u','rb','br'].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}} switch(car){case ' ': case '\t': pos++ break case '.': if(pos-1){j++} C=$transition(C,'float','0'+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){C=$transition(C,'int',[16,res[1]]) pos +=res[0].length break} var res=octal_pattern.exec(src.substr(pos)) if(res){C=$transition(C,'int',[8,res[1]]) pos +=res[0].length break} var res=binary_pattern.exec(src.substr(pos)) if(res){C=$transition(C,'int',[2,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 C=$transition(C,'int',[10,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){$pos=pos if(res[2]!==undefined){C=$transition(C,'imaginary',res[0].substr(0,res[0].length-1))}else{C=$transition(C,'float',res[0])}}else{res=float_pattern2.exec(src.substr(pos)) if(res){$pos=pos if(res[2]!==undefined){C=$transition(C,'imaginary',res[0].substr(0,res[0].length-1))}else{C=$transition(C,'float',res[0])}}else{res=int_pattern.exec(src.substr(pos)) $pos=pos if(res[1]!==undefined){C=$transition(C,'imaginary',res[0].substr(0,res[0].length-1))}else{C=$transition(C,'int',[10,res[0]])}}} pos +=res[0].length break case '\n': lnum++ if(br_stack.length>0){ pos++;}else{ if(current.C.tree.length>0){$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==""){$_SyntaxError(C,"Unexpected closing bracket")}else if(br_close[car]!=br_stack.charAt(br_stack.length-1)){$_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 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': case '<': case '-': case '+': case '*': case '/': case '^': case '=': case '|': case '~': case '!': if(car=='-' && src.charAt(pos+1)=='>'){C=$transition(C,'annotation') pos +=2 continue} 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 break} case '@': $pos=pos C=$transition(C,car) pos++ break default: $pos=pos;$_SyntaxError(C,'unknown token ['+car+']')}} if(br_stack.length!=0){var br_err=br_pos[0] $pos=br_err[1] $_SyntaxError(br_err[0],["Unbalanced bracket "+br_stack.charAt(br_stack.length-1)])} if(C!==null && $indented.indexOf(C.tree[0].type)>-1){$pos=pos-1 $_SyntaxError(C,'expected an indented block',pos)} return root} $B.py2js=function(src,module,locals_id,parent_block_id,line_info){ var t0=new Date().getTime() src=src.replace(/\r\n/gm,'\n') 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,'_') $B.bound[module]=$B.bound[module]||{} $B.bound[module]['__doc__']=true $B.bound[module]['__name__']=true $B.bound[module]['__file__']=true $B.type[module]=$B.type[module]||{} $B.type[locals_id]=$B.type[locals_id]||{} $B.$py_src[locals_id]=$B.$py_src[locals_id]||src var root=$tokenize(src,module,locals_id,parent_block_id,line_info) root.transform() var js=['var $B = __BRYTHON__;\n'],pos=1 js[pos++]='eval(__BRYTHON__.InjectBuiltins());\n\n' js[pos]='var ' if(locals_is_module){js[pos]+=local_ns+'=$locals_'+module+', '}else if(!internal){js[pos]+=local_ns+'=$B.imported["'+locals_id+'"] || {}, '} js[pos]+='$locals='+local_ns+';' var offset=0 root.insert(0,$NodeJS(js.join(''))) offset++ var ds_node=new $Node() new $NodeJSCtx(ds_node,local_ns+'["__doc__"]='+(root.doc_string||'None')+';') root.insert(offset++,ds_node) var name_node=new $Node() var lib_module=module new $NodeJSCtx(name_node,local_ns+'["__name__"]='+local_ns+'["__name__"] || "'+locals_id+'";') root.insert(offset++,name_node) var file_node=new $Node() new $NodeJSCtx(file_node,local_ns+'["__file__"]="'+$B.$py_module_path[module]+'";None;\n') root.insert(offset++,file_node) var enter_frame_pos=offset root.insert(offset++,$NodeJS('$B.enter_frame(["'+locals_id+'", '+local_ns+','+ '"'+module+'", '+global_ns+']);\n')) var try_node=new $Node(),children=root.children.slice(enter_frame_pos+1,root.children.length),ctx=new $NodeCtx(try_node) root.insert(enter_frame_pos+1,try_node) new $TryCtx(ctx) if(children.length==0){children=[$NodeJS('')]} for(var i=0;i0){$add_line_num(root,null,module)} if($B.debug>=2){var t1=new Date().getTime() console.log('module '+module+' translated in '+(t1 - t0)+' ms')} return root} function load_ext(ext_scripts){var found=[] function callback(ev){req=ev.target if(req.readyState==4){if(req.status==200){run_script({name:req.module_name,url:req.responseURL,src:req.responseText}) if(ext_scripts.length>0){load_ext(ext_scripts)}}else{throw Error("cannot load script "+ req.module_name+' at '+req.responseURL+ ': error '+req.status)}}} if(ext_scripts.length>0){var script=ext_scripts.shift() var req=new XMLHttpRequest() req.onreadystatechange=callback req.module_name=script.name req.open('GET',script.url,true) req.send()}} function run_script(script){ $B.$py_module_path[script.name]=script.url try{ var $root=$B.py2js(script.src,script.name,script.name,'__builtins__') var $js=$root.to_js() if($B.debug>1){console.log($js)} eval($js) $B.imported[script.name]=$locals}catch($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($err+'')} var name=$err.__name__ var $trace=_b_.getattr($err,'info')+'\n'+name+': ' if(name=='SyntaxError' ||name=='IndentationError'){$trace +=$err.args[0]}else{$trace +=$err.args} try{_b_.getattr($B.stderr,'write')($trace)}catch(print_exc_err){console.log($trace)} throw $err}} function brython(options){var _b_=$B.builtins if($B.meta_path===undefined){$B.meta_path=[]} $B.$options={} if(options===undefined)options={'debug':0} if(typeof options==='number')options={'debug':options} if(options.debug===undefined){options.debug=0 } $B.debug=options.debug _b_.__debug__=$B.debug>0 if(options.static_stdlib_import===undefined){options.static_stdlib_import=true} $B.static_stdlib_import=options.static_stdlib_import if(options.open !==undefined)_b_.open=options.open $B.$CORS=false if(options.CORS !==undefined)$B.$CORS=options.CORS $B.$options=options var meta_path=[] var path_hooks=[] if($B.use_VFS){meta_path.push($B.$meta_path[0]) path_hooks.push($B.$path_hooks[0])} if(options.static_stdlib_import!==false){ meta_path.push($B.$meta_path[1]) if($B.path.length>3){$B.path.shift() $B.path.shift()}} meta_path.push($B.$meta_path[2]) $B.meta_path=meta_path path_hooks.push($B.$path_hooks[1]) $B.path_hooks=path_hooks if(options.ipy_id!==undefined){var $elts=[]; for(var $i=0;$i1)console.log($js) if($B.async_enabled){$js=$B.execution_object.source_conversion($js) eval($js)}else{ eval($js)}}catch($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($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{ var defined_ids={} 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 inner_scripts={},ext_scripts=[] 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()}} $B.scripts.push(module_name) var $src=null if($elt.src){ ext_scripts.push({name:module_name,url:$elt.src})}else{ var $src=($elt.innerHTML ||$elt.textContent) inner_scripts[module_name]=$src $B.$py_module_path[module_name]=$href run_script({name: module_name,src: $src,url: $href})}}}} load_ext(ext_scripts)} $B.$operators=$operators $B.$Node=$Node $B.$NodeJSCtx=$NodeJSCtx $B.brython=brython})(__BRYTHON__) var brython=__BRYTHON__.brython __BRYTHON__.$__new__=function(factory){return function(cls){ var res=factory.apply(null,[]) res.__class__=cls.$dict var init_func=null try{init_func=__BRYTHON__.builtins.getattr(res,'__init__')} catch(err){} if(init_func!==null){var args=[],pos=0 for(var i=1,_len_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]} init_func.apply(null,args) res.__initialized__=true} return res}} __BRYTHON__.builtins.object=(function($B){var _b_=$B.builtins var $ObjectDict={ __name__:'object',$native:true} var reverse_func={'__lt__':'__gt__','__gt__':'__lt__','__le__': '__ge__','__ge__': '__le__'} var $ObjectNI=function(name,op){return function(self,other){var klass=$B.get_class(other),other_comp=_b_.getattr(klass,reverse_func[name]) if(other_comp.__func__===$ObjectDict[reverse_func[name]]){throw _b_.TypeError('unorderable types: object() '+op+ ' '+ _b_.str($B.get_class(other).__name__)+'()')}else{return other_comp(other,self)}}} var opnames=['add','sub','mul','truediv','floordiv','mod','pow','lshift','rshift','and','xor','or'] var opsigns=['+','-','*','/','//','%','**','<<','>>','&','^','|'] $ObjectDict.__delattr__=function(self,attr){_b_.getattr(self,attr) delete self[attr]; return _b_.None} $ObjectDict.__dir__=function(self){var objects=[self],pos=1 var mro=$B.get_class(self).__mro__ for(var i=0,_len_i=mro.length;i < _len_i;i++){objects[pos++]=mro[i]} var res=[],pos=0 for(var i=0,_len_i=objects.length;i < _len_i;i++){for(var attr in objects[i]){ if(attr.charAt(0)=='$' && attr.charAt(1)!='$'){ continue} if(!isNaN(parseInt(attr.charAt(0)))){ continue} if(attr=='__mro__'){continue} res[pos++]=attr}} res=_b_.list(_b_.set(res)) _b_.list.$dict.sort(res) return res} $ObjectDict.__eq__=function(self,other){ var _class=$B.get_class(self) if(_class.$native ||_class.__name__=='function'){var _class1=$B.get_class(other) if(!_class1.$native && _class1.__name__ !='function'){return _b_.getattr(other,'__eq__')(self)}} return self===other} $ObjectDict.__format__=function(){var $=$B.args('__format__',2,{self:null,spec:null},['self','spec'],arguments,{},null,null) if($.spec!==''){throw _b_.TypeError("non-empty format string passed to object.__format__")} return _b_.getattr($.self,'__repr__')()} $ObjectDict.__ge__=$ObjectNI('__ge__','>=') $ObjectDict.__getattribute__=function(obj,attr){var klass=$B.get_class(obj) if(attr==='__class__'){return klass.$factory} var res=obj[attr],args=[] if(res===undefined){ var mro=klass.__mro__ for(var i=0,_len_i=mro.length;i < _len_i;i++){if(mro[i].$methods){var method=mro[i].$methods[attr] if(method!==undefined){return method(obj)}} var v=mro[i][attr] if(v!==undefined){res=v break}else if(attr=='__str__' && mro[i]['__repr__']!==undefined){ res=mro[i]['repr'] break}}}else{if(res.__set__===undefined){ return res}} if(res!==undefined){if(res.__class__===_b_.property.$dict){return res.__get__(res,obj,klass)} var __get__=_b_.getattr(res,'__get__',null) if(__get__!==null){try{return __get__.apply(null,[obj,klass])} catch(err){console.log('error in get.apply',err) 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])}}} 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(typeof res1=='function'){ if(res1.__class__===$B.$factory)return res else if(res1.__class__===$B.$MethodDict)return res return $B.make_method(attr,klass,res,res1)(obj)}else{ return res1}} return res}else{ var _ga=obj['__getattr__'] if(_ga===undefined){var mro=klass.__mro__ if(mro===undefined){console.log('in getattr mro undefined for '+obj)} for(var i=0,_len_i=mro.length;i < _len_i;i++){var v=mro[i]['__getattr__'] if(v!==undefined){_ga=v break}}} if(_ga!==undefined){try{return _ga(obj,attr)} catch(err){}} if(attr.substr(0,2)=='__' && attr.substr(attr.length-2)=='__'){var attr1=attr.substr(2,attr.length-4) var rank=opnames.indexOf(attr1) if(rank > -1){var rop='__r'+opnames[rank]+'__' var func=function(){try{ if($B.get_class(arguments[0])===klass){throw Error('')} return _b_.getattr(arguments[0],rop)(obj)}catch(err){var msg="unsupported operand types for "+ opsigns[rank]+": '"+ klass.__name__+"' and '"+ $B.get_class(arguments[0]).__name__+"'" throw _b_.TypeError(msg)}} func.$infos={__name__ : klass.__name__+'.'+attr} return func}}}} $ObjectDict.__gt__=$ObjectNI('__gt__','>') $ObjectDict.__hash__=function(self){$B.$py_next_hash+=1; return $B.$py_next_hash;} $ObjectDict.__init__=function(){return _b_.None} $ObjectDict.__le__=$ObjectNI('__le__','<=') $ObjectDict.__lt__=$ObjectNI('__lt__','<') $ObjectDict.__mro__=[$ObjectDict] $ObjectDict.__new__=function(cls){if(cls===undefined){throw _b_.TypeError('object.__new__(): not enough arguments')} return{__class__ : cls.$dict}} $ObjectDict.__ne__=function(self,other){return !_b_.getattr(self,'__eq__')(other)} $ObjectDict.__or__=function(self,other){if(_b_.bool(self))return self return other} $ObjectDict.__repr__=function(self){if(self===object)return "" if(self.__class__===$B.$factory)return "" if(self.__class__.__module__!==undefined){return "<"+self.__class__.__module__+"."+self.__class__.__name__+" object>"}else{return "<"+self.__class__.__name__+" object>"}} $ObjectDict.__setattr__=function(self,attr,val){if(val===undefined){ throw _b_.TypeError("can't set attributes of built-in/extension type 'object'")}else if(self.__class__===$ObjectDict){ if($ObjectDict[attr]===undefined){throw _b_.AttributeError("'object' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError("'object' object attribute '"+attr+"' is read-only")}} self[attr]=val return _b_.None} $ObjectDict.__setattr__.__str__=function(){return 'method object.setattr'} $ObjectDict.__str__=$ObjectDict.__repr__ $ObjectDict.__subclasshook__=function(){return _b_.NotImplemented} function object(){return{__class__:$ObjectDict}} object.$dict=$ObjectDict $ObjectDict.$factory=object object.__repr__=object.__str__=function(){return ""} $B.make_class=function(class_obj){ function A(){var res={__class__:A.$dict} if(class_obj.init){class_obj.init.apply(null,[res].concat(Array.prototype.slice.call(arguments)))} return res} A.__class__=$B.$factory A.$dict={$factory: A,__class__: $B.type,__name__: class_obj.name} A.$dict.__mro__=[A.$dict,object.$dict] return A} return object})(__BRYTHON__) ;(function($B){var _b_=$B.builtins $B.$class_constructor=function(class_name,class_obj,parents,parents_names,kwargs){var cl_dict=_b_.dict(),bases=null var setitem=_b_.dict.$dict.__setitem__ for(var attr in class_obj){setitem(cl_dict,attr,class_obj[attr])} if(parents!==undefined){for(var i=0;i0)non_empty[pos++]=seqs[i]} if(non_empty.length==0)break for(var i=0;i-1){not_head[pos++]=s}} if(not_head.length>0){candidate=null} else{break}} if(candidate===null){throw _b_.TypeError("inconsistent hierarchy, no C3 MRO is possible")} mro[mpos++]=candidate for(var i=0;i' }}(attr) break; case 'classmethod': args=[klass.$factory] __self__=klass __repr__=__str__=function(){var x='' return x} break; case 'staticmethod': args=[] __repr__=__str__=function(attr){return function(){return ''}}(attr) break;} var method=(function(initial_args){return function(){ var local_args=initial_args.slice() var pos=local_args.length for(var i=0;i < arguments.length;i++){local_args[pos++]=arguments[i]} return res.apply(null,local_args)}})(args) method.__class__=$B.$FunctionDict method.__eq__=function(other){return other.__func__===__func__} for(var attr in res){method[attr]=res[attr]} method.__func__=__func__ method.__repr__=__repr__ method.__self__=__self__ method.__str__=__str__ method.__code__={'__class__': $B.CodeDict} method.__doc__=res.__doc__ ||'' method.im_class=klass return method}}} function $instance_creator(klass){ if(klass.$instanciable!==undefined){console.log('klass',klass.__name__,'not instanciable') return function(){throw _b_.TypeError("Can't instantiate abstract "+ "class interface with abstract methods")}} var new_func=null try{new_func=_b_.getattr(klass,'__new__')} catch(err){} var init_func=null try{init_func=_b_.getattr(klass,'__init__')} catch(err){} var simple=false if(klass.__bases__.length==0){simple=true} else if(klass.__bases__.length==1){switch(klass.__bases__[0]){case _b_.object: case _b_.type: simple=true break default: simple=false break}} if(simple && klass.__new__==undefined && init_func!==null){ return function(){var obj={__class__:klass} init_func.apply(null,[obj].concat(Array.prototype.slice.call(arguments))) return obj}} return function(){var obj var _args=Array.prototype.slice.call(arguments) if(simple && klass.__new__==undefined){obj={__class__:klass}}else{if(new_func!==null){obj=new_func.apply(null,[klass.$factory].concat(_args))}} if(!obj.__initialized__){if(init_func!==null){init_func.apply(null,[obj].concat(_args))}} return obj}} function member_descriptor(klass,attr){return{__class__:member_descriptor.$dict,klass: klass,attr: attr}} member_descriptor.__class__=$B.$factory member_descriptor.$dict={__class__: $B.$type,__name__: 'member_descriptor',$factory: member_descriptor,__str__: function(self){return ""}} member_descriptor.$dict.__mro__=[member_descriptor.$dict ,_b_.object.$dict] function $MethodFactory(){} $MethodFactory.__class__=$B.$factory $B.$MethodDict={__class__:$B.$type,__name__:'method',$factory:$MethodFactory} $B.$MethodDict.__eq__=function(self,other){return self.$infos !==undefined && other.$infos !==undefined && self.$infos.__func__===other.$infos.__func__ && self.$infos.__self__===other.$infos.__self__} $B.$MethodDict.__ne__=function(self,other){return !$B.$MethodDict.__eq__(self,other)} $B.$MethodDict.__getattribute__=function(self,attr){ var infos=self.$infos.__func__.$infos if(infos && infos[attr]){if(attr=='__code__'){var res={__class__:$B.$CodeDict} for(var attr in infos.__code__){res[attr]=infos.__code__[attr]} return res}else{return infos[attr]}}else{return _b_.object.$dict.__getattribute__(self,attr)}} $B.$MethodDict.__mro__=[$B.$MethodDict,_b_.object.$dict] $B.$MethodDict.__repr__=$B.$MethodDict.__str__=function(self){var res=''} $MethodFactory.$dict=$B.$MethodDict $B.$InstanceMethodDict={__class__:$B.$type,__name__:'instancemethod',__mro__:[_b_.object.$dict],$factory:$MethodFactory}})(__BRYTHON__) ;(function($B){var _b_=$B.builtins $B.args=function($fname,argcount,slots,var_names,$args,$dobj,extra_pos_args,extra_kw_args){ var has_kw_args=false,nb_pos=$args.length,$ns if(nb_pos>0 && $args[nb_pos-1].$nat=='kw'){has_kw_args=true nb_pos-- var kw_args=$args[nb_pos].kw} if(extra_pos_args){slots[extra_pos_args]=[]} if(extra_kw_args){slots[extra_kw_args]=_b_.dict()} if(nb_pos>argcount){ if(extra_pos_args===null){ msg=$fname+"() takes "+argcount+' positional argument'+ (argcount> 1 ? '' : 's')+ ' but more were given' throw _b_.TypeError(msg)}else{ slots[extra_pos_args]=_b_.tuple(Array.prototype.slice.call($args,argcount,nb_pos)) nb_pos=argcount}} for(var i=0;i0){if(missing.length==1){throw _b_.TypeError($fname+" missing 1 positional argument: "+missing[0])}else{var msg=$fname+" missing "+missing.length+" positional arguments: " msg +=missing.join(' and ') throw _b_.TypeError(msg)}} return slots} $B.get_class=function(obj){ if(obj===null){return $B.$NoneDict} var klass=obj.__class__ if(klass===undefined){switch(typeof obj){case 'number': if(obj % 1===0){ obj.__class__=_b_.int.$dict return _b_.int.$dict} obj.__class__=_b_.float.$dict return _b_.float.$dict case 'string': obj.__class__=_b_.str.$dict return _b_.str.$dict case 'boolean': obj.__class__=$B.$BoolDict return $B.$BoolDict case 'function': obj.__class__=$B.$FunctionDict return $B.$FunctionDict case 'object': if(obj.constructor===Array){obj.__class__=_b_.list.$dict return _b_.list.$dict} else if(obj.constructor===Number)return _b_.float.$dict break}} return klass} $B.$mkdict=function(glob,loc){var res={} for(var arg in glob)res[arg]=glob[arg] for(var arg in loc)res[arg]=loc[arg] return res} function clear(ns){ delete $B.vars[ns],$B.bound[ns],$B.modules[ns],$B.imported[ns]} $B.$list_comp=function(env){ var $ix=$B.UUID() var $py="x"+$ix+"=[]\n",indent=0 for(var $i=2,_len_$i=arguments.length;$i < _len_$i;$i++){$py +=' '.repeat(indent) $py +=arguments[$i].join('')+':\n' indent +=4} $py +=' '.repeat(indent) $py +='x'+$ix+'.append('+arguments[1].join('\n')+')\n' for(var i=0;i=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=[],len=obj.length if(step>0){for(var i=start;istop;i+=step){res.push(obj[i])}} return res} function index_error(obj){var type=typeof obj=='string' ? 'string' : 'list' throw _b_.IndexError(type+" index out of range")} $B.$getitem=function(obj,item){if(typeof item=='number'){if(Array.isArray(obj)||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((Array.isArray(obj)||typeof obj=='string') && typeof item=='number'){item=item >=0 ? item : obj.length+item if(obj[item]!==undefined){return obj[item]} else{index_error(obj)}} return _b_.getattr(obj,'__getitem__')(item)} $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.$dict.$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('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(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("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 repl=_b_.list(value),j=0,test,nb=0 if(step>0){test=function(i){return istop}} for(var i=start;test(i);i+=step){nb++} if(nb!=repl.length){throw _b_.ValueError('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)&& typeof item=='number' && !_b_.isinstance(obj,_b_.tuple)){if(item<0){item+=obj.length} if(obj[item]===undefined){throw _b_.IndexError("list assignment index out of range")} obj[item]=value return}else if(obj.__class__===_b_.dict.$dict){obj.__class__.__setitem__(obj,item,value) return} _b_.getattr(obj,'__setitem__')(item,value)} $B.augm_item_add=function(obj,item,incr){if(Array.isArray(obj)&& typeof item=="number" && obj[item]!==undefined){obj[item]+=incr return} var ga=_b_.getattr try{var augm_func=ga(ga(obj,'__getitem__')(item),'__iadd__') console.log('has augmfunc')}catch(err){ga(obj,'__setitem__')(item,ga(ga(obj,'__getitem__')(item),'__add__')(incr)) return} augm_func(value)} var augm_item_src=''+$B.augm_item_add var augm_ops=[['-=','sub'],['*=','mul']] for(var i=0,_len_i=augm_ops.length;i < _len_i;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.$raise=function(){ var es=$B.current_exception if(es!==undefined)throw es throw _b_.RuntimeError('No active exception to reraise')} $B.$syntax_err_line=function(exc,module,pos){ var pos2line={} var lnum=1 var src=$B.$py_src[module] if(src===undefined){console.log('no src for',module)} var line_pos={1:0} for(var i=0,_len_i=src.length;i < _len_i;i++){pos2line[i]=lnum if(src.charAt(i)=='\n'){line_pos[++lnum]=i}} var line_num=pos2line[pos] exc.$line_info=line_num+','+module var lines=src.split('\n') var line=lines[line_num-1] var lpos=pos-line_pos[line_num] var len=line.length line=line.replace(/^\s*/,'') lpos-=len-line.length exc.args=_b_.tuple([$B.$getitem(exc.args,0),module,line_num,lpos,line])} $B.$SyntaxError=function(module,msg,pos){var exc=_b_.SyntaxError(msg) $B.$syntax_err_line(exc,module,pos) throw exc} $B.$IndentationError=function(module,msg,pos){var exc=_b_.IndentationError(msg) $B.$syntax_err_line(exc,module,pos) throw exc} $B.extend=function(fname,arg,mapping){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(fname+"() keywords must be strings")} if(arg[key]!==undefined){throw _b_.TypeError( 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(expr)} $B.$test_expr=function(){ return $B.$test_result} $B.$is_member=function(item,_set){ var f,_iter try{f=_b_.getattr(_set,"__contains__")} catch(err){} if(f)return f(item) try{_iter=_b_.iter(_set)} catch(err){} if(_iter){while(1){try{var elt=_b_.next(_iter) if(_b_.getattr(elt,"__eq__")(item))return true}catch(err){if(err.__name__=="StopIteration")return false throw err}}} try{f=_b_.getattr(_set,"__getitem__")} catch(err){throw _b_.TypeError("'"+$B.get_class(_set).__name__+"' object is not iterable")} if(f){var i=-1 while(1){i++ try{var elt=f(i) if(_b_.getattr(elt,"__eq__")(item))return true}catch(err){if(err.__name__=='IndexError')return false throw err}}}} var $io={__class__:$B.$type,__name__:'io'} $io.__mro__=[$io,_b_.object.$dict] $B.stderr={__class__:$io,write:function(data){console.log(data)},flush:function(){}} $B.stderr_buff='' $B.stdout={__class__:$io,write: function(data){console.log(data)},flush:function(){}} $B.stdin={__class__: $io,__original__:true,closed: false,len:1,pos:0,read: function(){return '';},readline: function(){return '';}} $B.jsobject2pyobject=function(obj){switch(obj){case null: return _b_.None case true: return _b_.True case false: return _b_.False} if(_b_.isinstance(obj,_b_.list)){var res=[],pos=0 for(var i=0,_len_i=obj.length;i < _len_i;i++){res[pos++]=$B.jsobject2pyobject(obj[i])} return res} if(obj.__class__!==undefined){if(obj.__class__===_b_.list){for(var i=0,_len_i=obj.length;i < _len_i;i++){obj[i]=$B.jsobject2pyobject(obj[i])} return obj} return obj} if(obj._type_==='iter'){ return _b_.iter(obj.data)} if(typeof obj==='object' && obj.__class__===undefined){ var res=_b_.dict() var si=_b_.dict.$dict.__setitem__ for(var attr in obj){si(res,attr,$B.jsobject2pyobject(obj[attr]))} return res} return $B.JSObject(obj)} $B.pyobject2jsobject=function(obj){ switch(obj){case _b_.None: return null case _b_.True: return true case _b_.False: return false} if(_b_.isinstance(obj,[_b_.int,_b_.float,_b_.str]))return obj if(_b_.isinstance(obj,[_b_.list,_b_.tuple])){var res=[],pos=0 for(var i=0,_len_i=obj.length;i < _len_i;i++){res[pos++]=$B.pyobject2jsobject(obj[i])} return res} if(_b_.isinstance(obj,_b_.dict)){var res={} var items=_b_.list(_b_.dict.$dict.items(obj)) for(var i=0,_len_i=items.length;i < _len_i;i++){res[$B.pyobject2jsobject(items[i][0])]=$B.pyobject2jsobject(items[i][1])} return res} if(_b_.hasattr(obj,'__iter__')){ var _a=[],pos=0 while(1){try{ _a[pos++]=$B.pyobject2jsobject(_b_.next(obj))}catch(err){if(err.__name__ !=="StopIteration")throw err break}} return{'_type_': 'iter',data: _a}} if(_b_.hasattr(obj,'__getstate__')){return _b_.getattr(obj,'__getstate__')()} if(_b_.hasattr(obj,'__dict__')){return $B.pyobject2jsobject(_b_.getattr(obj,'__dict__'))} throw _b_.TypeError(_b_.str(obj)+' is not JSON serializable')} $B.set_line=function(line_num,module_name){$B.line_info=line_num+','+module_name return _b_.None} $B.$iterator=function(items,klass){var res={__class__:klass,__iter__:function(){return res},__len__:function(){return items.length},__next__:function(){res.counter++ if(res.counter"},counter:-1} res.__str__=res.toString=res.__repr__ return res} $B.$iterator_class=function(name){var res={__class__:$B.$type,__name__:name,} res.__mro__=[res,_b_.object.$dict] function as_array(s){var _a=[],pos=0 var _it=_b_.iter(s) while(1){try{ _a[pos++]=_b_.next(_it)}catch(err){if(err.__name__=='StopIteration'){break}}} return _a} function as_list(s){return _b_.list(as_array(s))} function as_set(s){return _b_.set(as_array(s))} res.__eq__=function(self,other){if(_b_.isinstance(other,[_b_.tuple,_b_.set,_b_.list])){return _b_.getattr(as_list(self),'__eq__')(other)} if(_b_.hasattr(other,'__iter__')){return _b_.getattr(as_list(self),'__eq__')(as_list(other))} _b_.NotImplementedError("__eq__ not implemented yet for list and " + _b_.type(other))} var _ops=['eq','ne'] var _f=res.__eq__+'' for(var i=0;i < _ops.length;i++){var _op='__'+_ops[i]+'__' eval('res.'+_op+'='+_f.replace(new RegExp('__eq__','g'),_op))} res.__or__=function(self,other){if(_b_.isinstance(other,[_b_.tuple,_b_.set,_b_.list])){return _b_.getattr(as_set(self),'__or__')(other)} if(_b_.hasattr(other,'__iter__')){return _b_.getattr(as_set(self),'__or__')(as_set(other))} _b_.NotImplementedError("__or__ not implemented yet for set and " + _b_.type(other))} var _ops=['sub','and','xor','gt','ge','lt','le'] var _f=res.__or__+'' for(var i=0;i < _ops.length;i++){var _op='__'+_ops[i]+'__' eval('res.'+_op+'='+_f.replace(new RegExp('__or__','g'),_op))} res.$factory={__class__:$B.$factory,$dict:res} return res} $B.$CodeDict={__class__:$B.$type,__name__:'code'} $B.$CodeDict.__mro__=[$B.$CodeDict,_b_.object.$dict] function _code(){} _code.__class__=$B.$factory _code.$dict=$B.$CodeDict $B.$CodeDict.$factory=_code function $err(op,klass,other){var msg="unsupported operand type(s) for "+op msg +=": '"+klass.__name__+"' and '"+$B.get_class(other).__name__+"'" throw _b_.TypeError(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.set_func_names=function(klass){var name=klass.__name__ for(var attr in klass){if(typeof klass[attr]=='function'){klass[attr].$infos={__name__ : name+'.'+attr}}}} $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()} 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("'"+$B.get_class(value).__name__+ "' object cannot be interpreted as an integer")} $B.PyNumber_Index=function(item){switch(typeof item){case "boolean": return item ? 1 : 0 case "number": return item case "object": if(item.__class__===$B.LongInt.$dict){return item} var method=_b_.getattr(item,'__index__',null) if(method!==null){return $B.int_or_bool(_b_.getattr(method,'__call__')())} default: throw _b_.TypeError("'"+$B.get_class(item).__name__+ "' 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.LongInt.$dict){return v} else{throw _b_.TypeError("'"+$B.get_class(v).__name__+ "' object cannot be interpreted as an integer")} default: throw _b_.TypeError("'"+$B.get_class(v).__name__+ "' object cannot be interpreted as an integer")}} $B.int_value=function(v){ try{return $B.int_or_bool(v)} catch(err){if(_b_.isinstance(v,_b_.complex)&& v.imag==0){return $B.int_or_bool(v.real)}else if(isinstance(v,_b_.float)&& v==Math.floor(v)){return Math.floor(v)}else{throw _b_.TypeError("'"+$B.get_class(v).__name__+ "' object cannot be interpreted as an integer")}}} $B.enter_frame=function(frame){ if($B.frames_stack===undefined){alert('frames stack udef')} $B.frames_stack[$B.frames_stack.length]=frame} $B.leave_frame=function(arg){ if($B.frames_stack.length==0){console.log('empty stack');return} var last=$B.last($B.frames_stack) if(last[0]!=arg){ console.log('leave error','leaving',arg,'last on stack',last[0])} $B.frames_stack.pop()} var min_int=Math.pow(-2,53),max_int=Math.pow(2,53)-1 $B.is_safe_int=function(){for(var i=0;imax_int){return false}} return true} $B.add=function(x,y){var z=x+y if(x>min_int && xmin_int && ymin_int && zmin_int && xmin_int && ymin_int && zmin_int && xmin_int && ymin_int && xmin_int && ymin_int && zmin_int && xmin_int && ymin_int && zmin_int && xmin_int && ymin_int && z=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.LongInt.$dict.__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.LongInt.$dict.__gt__(x,y)}} window.is_none=function(o){return o===undefined ||o==_b_.None;} window.is_none=function(o){return o===undefined ||o==_b_.None;}})(__BRYTHON__) if(!Array.indexOf){Array.prototype.indexOf=function(obj){for(var i=0,_len_i=this.length;i < _len_i;i++)if(this[i]==obj)return i return -1}} if(!String.prototype.repeat){String.prototype.repeat=function(count){if(count < 1)return ''; var result='',pattern=this.valueOf() while(count > 1){if(count & 1)result +=pattern count >>=1,pattern +=pattern} return result + pattern;}} ;(function($B){eval($B.InjectBuiltins()) _b_.__debug__=false var $ObjectDict=_b_.object.$dict $B.$comps={'>':'gt','>=':'ge','<':'lt','<=':'le'} function abs(obj){if(isinstance(obj,_b_.int))return _b_.int(Math.abs(obj)); if(isinstance(obj,_b_.float))return _b_.float(Math.abs(obj)); if(hasattr(obj,'__abs__')){return getattr(obj,'__abs__')()}; throw _b_.TypeError("Bad operand type for abs(): '"+$B.get_class(obj)+"'")} function all(obj){var iterable=iter(obj) while(1){try{var elt=next(iterable) if(!bool(elt))return false}catch(err){return true}}} function any(obj){var iterable=iter(obj) while(1){try{var elt=next(iterable) if(bool(elt))return true}catch(err){return false}}} function ascii(obj){var res=repr(obj),res1='',cp for(var i=0;i=0)return prefix + value.toString(base); return '-' + prefix +(-value).toString(base);} function bin(obj){if(isinstance(obj,_b_.int)){return $builtin_base_convert_helper(obj,2)} return getattr(obj,'__index__')()} function bool(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: try{return getattr(obj,'__bool__')()} catch(err){try{return getattr(obj,'__len__')()>0} catch(err){return true}}}} function callable(obj){return hasattr(obj,'__call__')} function chr(i){if(i < 0 ||i > 1114111)_b_.ValueError('Outside valid range') return String.fromCharCode(i)} function classmethod(func){func.$type='classmethod' return func} classmethod.__class__=$B.$factory classmethod.$dict={__class__:$B.$type,__name__:'classmethod',$factory: classmethod} classmethod.$dict.__mro__=[classmethod.$dict,$ObjectDict] $B.$CodeObjectDict={__class__:$B.$type,__name__:'code',__repr__:function(self){return ''},} $B.$CodeObjectDict.__str__=$B.$CodeObjectDict.__repr__ $B.$CodeObjectDict.__mro__=[$B.$CodeObjectDict,$ObjectDict] function compile(source,filename,mode){var $=$B.args('compile',6,{source:null,filename:null,mode:null,flags:null,dont_inherit:null,optimize:null},['source','filename','mode','flags','dont_inherit','optimize'],arguments,{flags:0,dont_inherit:false,optimize:-1},null,null) var module_name='exec_' + $B.UUID() var local_name=module_name; var root=$B.py2js(source,module_name,[module_name],local_name) $.__class__=$B.$CodeObjectDict return $} compile.__class__=$B.factory $B.$CodeObjectDict.$factory=compile compile.$dict=$B.$CodeObjectDict var __debug__=$B.debug>0 function delattr(obj,attr){ var klass=$B.get_class(obj) var res=obj[attr] if(res===undefined){var mro=klass.__mro__ for(var i=0;i"},__str__:function(){return ""},counter:_start-1} for(var attr in res){if(typeof res[attr]==='function' && attr!=="__class__"){res[attr].__str__=(function(x){return function(){return ""}})(attr)}} return res} enumerate.__class__=$B.$factory enumerate.$dict=$EnumerateDict $EnumerateDict.$factory=enumerate function $eval(src,_globals,_locals){var current_frame=$B.frames_stack[$B.frames_stack.length-1] if(current_frame!==undefined){var current_locals_id=current_frame[0].replace(/\./,'_'),current_globals_id=current_frame[2].replace(/\./,'_')} var is_exec=arguments[3]=='exec',leave=false if(src.__class__===$B.$CodeObjectDict){src=src.source} var globals_id='$exec_'+$B.UUID(),locals_id,parent_block_id if(_locals===_globals ||_locals===undefined){locals_id=globals_id}else{locals_id='$exec_'+$B.UUID()} eval('var $locals_'+globals_id+' = {}') eval('var $locals_'+locals_id+' = {}') if(_globals===undefined){for(var attr in current_frame[3]){eval('$locals_'+globals_id+'["'+attr+ '"] = current_frame[3]["'+attr+'"]')} parent_block_id=current_globals_id eval('var $locals_'+current_globals_id+'=current_frame[3]')}else{var items=_b_.dict.$dict.items(_globals),item while(1){try{var item=next(items) eval('$locals_'+globals_id+'["'+item[0]+'"] = item[1]')}catch(err){break}} parent_block_id='__builtins__'} if(_locals===undefined){if(_globals!==undefined){eval('var $locals_'+locals_id+' = $locals_'+globals_id)}else{for(var attr in current_frame[1]){eval('$locals_'+locals_id+'["'+attr+ '"] = current_frame[1]["'+attr+'"]')}}}else{var items=_b_.dict.$dict.items(_locals),item while(1){try{var item=next(items) eval('$locals_'+locals_id+'["'+item[0]+'"] = item[1]')}catch(err){break}}} var root=$B.py2js(src,globals_id,locals_id,parent_block_id),leave_frame=true try{ if(!is_exec){var try_node=root.children[root.children.length-2],instr=$B.last(try_node.children) var type=instr.C.tree[0].type if(!('expr'==type ||'list_or_tuple'==type ||'op'==type)){leave_frame=false throw _b_.SyntaxError("eval() argument must be an expression",'',1,1,src)}else{ var children=try_node.children root.children.splice(root.children.length-2,2) for(var i=0;i"},$FilterDict.__mro__=[$FilterDict,$ObjectDict] function filter(){if(arguments.length!=2){throw _b_.TypeError( "filter expected 2 arguments, got "+arguments.length)} var func=arguments[0],iterable=iter(arguments[1]) if(func===_b_.None)func=bool var __next__=function(){while(true){var _item=next(iterable) if(func(_item)){return _item}}} return{ __class__: $FilterDict,__next__: __next__}} function format(value,format_spec){if(hasattr(value,'__format__'))return getattr(value,'__format__')(format_spec) throw _b_.NotImplementedError("__format__ is not implemented for object '" + _b_.str(value)+ "'")} function attr_error(attr,cname){var msg="bad operand type for unary #: '"+cname+"'" switch(attr){case '__neg__': throw _b_.TypeError(msg.replace('#','-')) case '__pos__': throw _b_.TypeError(msg.replace('#','+')) case '__invert__': throw _b_.TypeError(msg.replace('#','~')) case '__call__': throw _b_.TypeError("'"+cname+"'"+' object is not callable') default: throw _b_.AttributeError("'"+cname+"' object has no attribute '"+attr+"'")}} function getattr(obj,attr,_default){var klass=$B.get_class(obj) if(klass===undefined){ if(obj[attr]!==undefined)return $B.$JS2Py(obj[attr]) if(_default!==undefined)return _default throw _b_.AttributeError('object has no attribute '+attr)} switch(attr){case '__call__': if(typeof obj=='function'){if(obj.$blocking){console.log('calling blocking function '+obj.__name__)} return obj}else if(klass===$B.JSObject.$dict && typeof obj.js=='function'){return function(){return $B.JSObject(obj.js.apply(null,arguments))}} break case '__class__': return klass.$factory case '__dict__': return $B.obj_dict(obj) case '__doc__': for(var i=0;i'} return method} return klass[attr]} var is_class=klass.is_class,mro,attr_func if(is_class){attr_func=$B.$type.__getattribute__ if(obj.$dict===undefined){console.log('obj '+obj+' $dict undefined')} obj=obj.$dict}else{var mro=klass.__mro__ if(mro===undefined){console.log('in getattr '+attr+' mro undefined for '+obj+' dir '+dir(obj)+' class '+obj.__class__) for(var _attr in obj){console.log('obj attr '+_attr+' : '+obj[_attr])} console.log('obj class '+dir(klass)+' str '+klass)} for(var i=0;i-1){return true}} var hook=getattr(classinfo,'__subclasscheck__',null) if(hook!==null){return hook(klass)} return false} var iterator_class=$B.make_class({name:'iterator',init:function(self,getitem,len){self.getitem=getitem self.len=len self.counter=-1}}) iterator_class.$dict.__next__=function(self){self.counter++ if(self.len!==null && self.counter==self.len){throw _b_.StopIteration('')} try{return self.getitem(self.counter)} catch(err){throw _b_.StopIteration('')}} function iter(obj){try{var _iter=getattr(obj,'__iter__')} catch(err){var gi=getattr(obj,'__getitem__',null),ln=getattr(obj,'__len__',null) if(gi!==null){if(ln!==null){var len=getattr(ln,'__call__')() return iterator_class(gi,len)}else{return iterator_class(gi,null)}} throw _b_.TypeError("'"+$B.get_class(obj).__name__+"' object is not iterable")} var res=_iter() try{getattr(res,'__next__')} catch(err){if(isinstance(err,_b_.AttributeError)){throw _b_.TypeError( "iter() returned non-iterator of type '"+ $B.get_class(res).__name__+"'")}} return res} function len(obj){try{return getattr(obj,'__len__')()} catch(err){throw _b_.TypeError("object of type '"+$B.get_class(obj).__name__+ "' has no len()")}} function locals(){ var locals_obj=$B.last($B.frames_stack)[1] return $B.obj_dict(locals_obj)} var $MapDict={__class__:$B.$type,__name__:'map'} $MapDict.__mro__=[$MapDict,$ObjectDict] $MapDict.__iter__=function(self){return self} function map(){var func=getattr(arguments[0],'__call__') var iter_args=[],pos=0 for(var i=1;i"},__str__:function(){return ""},__next__: __next__} return obj} function $extreme(args,op){ var $op_name='min' if(op==='__gt__')$op_name="max" if(args.length==0){throw _b_.TypeError($op_name+" expected 1 arguments, got 0")} var last_arg=args[args.length-1] var nb_args=args.length var has_kw_args=false var has_default=false var func=false if(last_arg.$nat=='kw'){nb_args-- last_arg=last_arg.kw for(var attr in last_arg){switch(attr){case 'key': var func=last_arg[attr] has_key=true break case '$$default': var default_value=last_arg[attr] has_default=true break default: throw _b_.TypeError("'"+attr+"' is an invalid keyword argument for this function") break}}} if(!func){func=function(x){return x}} if(nb_args==0){throw _b_.TypeError($op_name+" expected 1 arguments, got 0")}else if(nb_args==1){ var $iter=iter(args[0]),res=null while(true){try{var x=next($iter) if(res===null ||bool(getattr(func(x),op)(func(res)))){res=x}}catch(err){if(err.__name__=="StopIteration"){if(res===null){if(has_default){return default_value} else{throw _b_.ValueError($op_name+"() arg is an empty sequence")}}else{return res}} throw err}}}else{if(has_default){throw _b_.TypeError("Cannot specify a default for "+$op_name+"() with multiple positional arguments")} var res=null for(var i=0;i'}} p.__get__=function(self,obj,objtype){if(obj===undefined)return self if(self.fget===undefined)throw _b_.AttributeError("unreadable attribute") return getattr(self.fget,'__call__')(obj)} if(fset!==undefined){p.__set__=function(self,obj,value){if(self.fset===undefined)throw _b_.AttributeError("can't set attribute") getattr(self.fset,'__call__')(obj,value)}} p.__delete__=fdel; p.getter=function(fget){return property(fget,p.fset,p.fdel,p.__doc__)} p.setter=function(fset){return property(p.fget,fset,p.fdel,p.__doc__)} p.deleter=function(fdel){return property(p.fget,p.fset,fdel,p.__doc__)} return p} property.__class__=$B.$factory property.$dict=$PropertyDict $PropertyDict.$factory=property function repr(obj){if(obj.__class__===$B.$factory){ var func=$B.$type.__getattribute__(obj.$dict.__class__,'__repr__') return func(obj)} var func=getattr(obj,'__repr__') if(func!==undefined){return func()} throw _b_.AttributeError("object has no attribute __repr__")} var $ReversedDict={__class__:$B.$type,__name__:'reversed'} $ReversedDict.__mro__=[$ReversedDict,$ObjectDict] $ReversedDict.__iter__=function(self){return self} $ReversedDict.__next__=function(self){self.$counter-- if(self.$counter<0)throw _b_.StopIteration('') return self.getter(self.$counter)} function reversed(seq){ try{return getattr(seq,'__reversed__')()} catch(err){if(err.__name__!='AttributeError'){throw err}} try{var res={__class__:$ReversedDict,$counter : getattr(seq,'__len__')(),getter:getattr(seq,'__getitem__')} return res}catch(err){throw _b_.TypeError("argument to reversed() must be a sequence")}} reversed.__class__=$B.$factory reversed.$dict=$ReversedDict $ReversedDict.$factory=reversed function round(arg,n){if(!isinstance(arg,[_b_.int,_b_.float])){throw _b_.TypeError("type "+arg.__class__+" doesn't define __round__ method")} if(isinstance(arg,_b_.float)&&(arg.value===Infinity ||arg.value===-Infinity)){throw _b_.OverflowError("cannot convert float infinity to integer")} if(n===undefined)return _b_.int(Math.round(arg)) if(!isinstance(n,_b_.int)){throw _b_.TypeError( "'"+n.__class__+"' object cannot be interpreted as an integer")} var mult=Math.pow(10,n) return _b_.int.$dict.__truediv__(Number(Math.round(arg.valueOf()*mult)),mult)} function setattr(obj,attr,value){if(!isinstance(attr,_b_.str)){throw _b_.TypeError("setattr(): attribute name must be string")} switch(attr){case 'alert': case 'case': case 'catch': case 'constructor': case 'Date': case 'delete': case 'default': case 'document': case 'Error': case 'history': case 'function': case 'location': case 'Math': case 'new': case 'Number': case 'RegExp': case 'this': case 'throw': case 'var': case 'super': case 'window': attr='$$'+attr break case '__class__': obj.__class__=value.$dict;return None break} if(obj.__class__===$B.$factory){ if(obj.$dict.$methods && typeof value=='function' && value.__class__!==$B.$factory){ obj.$dict.$methods[attr]=$B.make_method(attr,obj.$dict,value,value) return None}else{obj.$dict[attr]=value;return None}} var res=obj[attr],klass=$B.get_class(obj) if(res===undefined && klass){var mro=klass.__mro__,_len=mro.length for(var i=0;i<_len;i++){res=mro[i][attr] if(res!==undefined)break}} if(res!==undefined){ if(res.__set__!==undefined){res.__set__(res,obj,value);return None} var __set__=getattr(res,'__set__',null) if(__set__ &&(typeof __set__=='function')){__set__.apply(res,[obj,value]);return None}} if(klass && klass.$slots && klass.$slots[attr]===undefined){throw _b_.AttributeError("'"+klass.__name__+"' object has no attribute'"+ attr+"'")} var setattr=false if(klass!==undefined){for(var i=0,_len=klass.__mro__.length;i<_len;i++){setattr=klass.__mro__[i].__setattr__ if(setattr){break}}} if(!setattr){obj[attr]=value}else{setattr(obj,attr,value)} return None} function sorted(){var $=$B.args('sorted',1,{iterable:null},['iterable'],arguments,{},null,'kw') var _list=_b_.list(iter($.iterable)),args=[_list] for(var i=1;i'} return res+'>'} function $$super(_type1,_type2){return{__class__:$SuperDict,__thisclass__:_type1,__self_class__:(_type2 ||None)}} $$super.$dict=$SuperDict $$super.__class__=$B.$factory $SuperDict.$factory=$$super $$super.$is_func=true var $Reader={__class__:$B.$type,__name__:'reader'} $Reader.__enter__=function(self){return self} $Reader.__exit__=function(self){return false} $Reader.__iter__=function(self){return iter(self.$lines)} $Reader.__len__=function(self){return self.lines.length} $Reader.__mro__=[$Reader,$ObjectDict] $Reader.close=function(self){self.closed=true} $Reader.read=function(self,nb){if(self.closed===true)throw _b_.ValueError('I/O operation on closed file') if(nb===undefined)return self.$content self.$counter+=nb if(self.$bin){var res=self.$content.source.slice(self.$counter-nb,self.$counter) return _b_.bytes(res)} return self.$content.substr(self.$counter-nb,nb)} $Reader.readable=function(self){return true} $Reader.readline=function(self,limit){ self.$lc=self.$lc===undefined ? -1 : self.$lc if(self.closed===true)throw _b_.ValueError('I/O operation on closed file') if(self.$lc==self.$lines.length-1){return self.$bin ? _b_.bytes(): ''} self.$lc++ var res=self.$lines[self.$lc] self.$counter +=(self.$bin ? res.source.length : res.length) return res} $Reader.readlines=function(self,hint){if(self.closed===true)throw _b_.ValueError('I/O operation on closed file') self.$lc=self.$lc===undefined ? -1 : self.$lc return self.$lines.slice(self.$lc+1)} $Reader.seek=function(self,offset,whence){if(self.closed===True)throw _b_.ValueError('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} var $BufferedReader={__class__:$B.$type,__name__:'_io.BufferedReader'} $BufferedReader.__mro__=[$BufferedReader,$Reader,$ObjectDict] var $TextIOWrapper={__class__:$B.$type,__name__:'_io.TextIOWrapper'} $TextIOWrapper.__mro__=[$TextIOWrapper,$Reader,$ObjectDict] 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') 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] var is_binary=mode.search('b')>-1 if(isinstance(file,$B.JSObject))return new $OpenFile(file.js,mode,encoding) if(isinstance(file,_b_.str)){ if(window.XMLHttpRequest){ var req=new XMLHttpRequest();}else{ var req=new ActiveXObject("Microsoft.XMLHTTP");} req.onreadystatechange=function(){var status=req.status if(status===404){$res=_b_.IOError('File '+file+' not found')}else if(status!==200){$res=_b_.IOError('Could not open file '+file+' : status '+status)}else{$res=req.responseText if(is_binary){$res=_b_.str.$dict.encode($res,'utf-8')}}} var fake_qs='?foo='+$B.UUID() req.open('GET',file+fake_qs,false) if(is_binary){req.overrideMimeType('text/plain; charset=utf-8');} req.send() if($res.constructor===Error)throw $res if(is_binary){var lf=_b_.bytes('\n','ascii'),lines=_b_.bytes.$dict.split($res,lf) for(var i=0;i"}})($func)}} var $NoneDict={__class__:$B.$type,__name__:'NoneType'} $NoneDict.__mro__=[$NoneDict,$ObjectDict] $NoneDict.__setattr__=function(self,attr){return no_set_attr($NoneDict,attr)} var None={__bool__ : function(){return False},__class__ : $NoneDict,__hash__ : function(){return 0},__repr__ : function(){return 'None'},__str__ : function(){return 'None'},toString : function(){return 'None'}} $NoneDict.$factory=function(){return None} $NoneDict.$factory.__class__=$B.$factory $NoneDict.$factory.$dict=$NoneDict for(var $op in $B.$comps){ var key=$B.$comps[$op] switch(key){case 'ge': case 'gt': case 'le': case 'lt': $NoneDict['__'+key+'__']=(function(op){return function(other){throw _b_.TypeError("unorderable types: NoneType() "+op+" "+ $B.get_class(other).__name__+"()")}})($op)}} for(var $func in None){if(typeof None[$func]==='function'){None[$func].__str__=(function(f){return function(){return ""}})($func)}} var $FunctionCodeDict={__class__:$B.$type,__name__:'function code'} $FunctionCodeDict.__mro__=[$FunctionCodeDict,$ObjectDict] $FunctionCodeDict.$factory={__class__:$B.$factory,$dict:$FunctionCodeDict} var $FunctionGlobalsDict={__class:$B.$type,__name__:'function globals'} $FunctionGlobalsDict.__mro__=[$FunctionGlobalsDict,$ObjectDict] $FunctionGlobalsDict.$factory={__class__:$B.$factory,$dict:$FunctionGlobalsDict} var $FunctionDict=$B.$FunctionDict={__class__:$B.$type,__code__:{__class__:$FunctionCodeDict,__name__:'function code'},__globals__:{__class__:$FunctionGlobalsDict,__name__:'function globals'},__name__:'function'} $FunctionDict.__getattribute__=function(self,attr){ if(self.$infos && self.$infos[attr]!==undefined){if(attr=='__code__'){var res={__class__:$B.$CodeDict} for(var attr in self.$infos.__code__){res[attr]=self.$infos.__code__[attr]} return res}else if(attr=='__annotations__'){ return $B.obj_dict(self.$infos[attr])}else{return self.$infos[attr]}}else{return _b_.object.$dict.__getattribute__(self,attr)}} $FunctionDict.__repr__=$FunctionDict.__str__=function(self){return ''} $FunctionDict.__mro__=[$FunctionDict,$ObjectDict] var $Function=function(){} $Function.__class__=$B.$factory $FunctionDict.$factory=$Function $Function.$dict=$FunctionDict _b_.__BRYTHON__=__BRYTHON__ var builtin_funcs=['abs','all','any','ascii','bin','bool','bytearray','bytes','callable','chr','classmethod','compile','complex','delattr','dict','dir','divmod','enumerate','eval','exec','exit','filter','float','format','frozenset','getattr','globals','hasattr','hash','help','hex','id','input','int','isinstance','issubclass','iter','len','list','locals','map','max','memoryview','min','next','object','oct','open','ord','pow','print','property','quit','range','repr','reversed','round','set','setattr','slice','sorted','staticmethod','str','sum','$$super','tuple','type','vars','zip'] for(var i=0;i'}})(orig_name)} _b_[name].__module__='builtins' _b_[name].__name__=name _b_[name].__defaults__=_b_[name].__defaults__ ||[] _b_[name].__kwdefaults__=_b_[name].__kwdefaults__ ||{} _b_[name].__annotations__=_b_[name].__annotations__ ||{}} _b_[name].__doc__=_b_[name].__doc__ ||''} catch(err){}} _b_['$eval']=$eval _b_['open']=$url_open _b_['print']=$print _b_['$$super']=$$super})(__BRYTHON__) ;(function($B){eval($B.InjectBuiltins()) var $TracebackDict={__class__:$B.$type,__name__:'traceback'} $TracebackDict.__getattribute__=function(self,attr){if(self.stack.length==0){alert('no stack',attr)} var last_frame=$B.last(self.stack) if(last_frame==undefined){alert('last frame undef ');console.log(self.stack,Object.keys(self.stack))} var line_info=last_frame[1].$line_info switch(attr){case 'tb_frame': return frame(self.stack) case 'tb_lineno': if(line_info===undefined){return -1} else{return parseInt(line_info.split(',')[0])} case 'tb_lasti': if(line_info===undefined){return ''} else{var info=line_info.split(',') var src=$B.$py_src[info[1]] if(src!==undefined){return src.split('\n')[parseInt(info[0]-1)].trim()}else{return ''}} case 'tb_next': if(self.stack.length==1){return None} else{return traceback(self.stack.slice(0,self.stack.length-1))} default: return $TracebackDict[attr]}} $TracebackDict.__mro__=[$TracebackDict,_b_.object.$dict] $TracebackDict.__str__=function(self){return ''} function traceback(stack){return{__class__ : $TracebackDict,stack : stack}} traceback.__class__=$B.$factory traceback.$dict=$TracebackDict $TracebackDict.$factory=traceback var $FrameDict={__class__:$B.$type,__name__:'frame'} $FrameDict.__getattr__=function(self,attr){ if(attr=='f_back'){if(self.$pos>0){return frame(self.$stack,self.$pos-1)}}} $FrameDict.__mro__=[$FrameDict,_b_.object.$dict] function to_dict(obj){var res=_b_.dict() var setitem=_b_.dict.$dict.__setitem__ for(var attr in obj){if(attr.charAt(0)=='$'){continue} setitem(res,attr,obj[attr])} return res} function frame(stack,pos){var mod_name=stack[2] var fs=stack var res={__class__:$FrameDict,f_builtins :{}, $stack: stack,} if(pos===undefined){pos=fs.length-1} res.$pos=pos if(fs.length){var _frame=fs[pos] var locals_id=_frame[0] 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($B.debug>0){if(_frame[1].$line_info===undefined){res.f_lineno=-1} else{res.f_lineno=parseInt(_frame[1].$line_info.split(',')[0])}}else{res.f_lineno=-1} res.f_code={__class__:$B.$CodeDict,co_code:None, co_name: locals_id, co_filename: _frame[3].__name__ } if(res.f_code.co_filename===undefined){console.log(_frame[0],_frame[1],_frame[2],_frame[3]);alert('no cofilename')}} return res} frame.__class__=$B.$factory frame.$dict=$FrameDict $FrameDict.$factory=frame $B._frame=frame var $BaseExceptionDict={__class__:$B.$type,__bases__ :[_b_.object],__module__:'builtins',__name__:'BaseException'} $BaseExceptionDict.__init__=function(self){self.args=_b_.tuple([arguments[1]])} $BaseExceptionDict.__repr__=function(self){return self.__class__.__name__+repr(self.args)} $BaseExceptionDict.__str__=function(self){return _b_.str(self.args[0])} $BaseExceptionDict.__mro__=[$BaseExceptionDict,_b_.object.$dict] $BaseExceptionDict.__new__=function(cls){var err=_b_.BaseException() err.__name__=cls.$dict.__name__ err.__class__=cls.$dict return err} $BaseExceptionDict.__getattr__=function(self,attr){if(attr=='info'){var name=self.__class__.__name__ if(name=='SyntaxError' ||name=='IndentationError'){return 'File "'+self.args[1]+'", line '+self.args[2]+'\n '+ self.args[4]} var info='Traceback (most recent call last):' if(self.$js_exc!==undefined){for(var attr in self.$js_exc){if(attr==='message')continue try{info +='\n '+attr+' : '+self.$js_exc[attr]} catch(_err){}} info+='\n'} for(var i=0;i0 && js_exc.info===undefined){var _frame=$B.last($B.frames_stack) if(_frame && _frame[1].$line_info!==undefined){var line_info=_frame[1].$line_info.split(',') var mod_name=line_info[1] var module=$B.modules[mod_name] if(module){if(module.caller!==undefined){ var mod_name=line_info[1]} var lib_module=mod_name var line_num=parseInt(line_info[0]) if($B.$py_src[mod_name]===undefined){console.log('pas de py_src pour '+mod_name)} var lines=$B.$py_src[mod_name].split('\n') js_exc.message +="\n module '"+lib_module+"' line "+line_num js_exc.message +='\n'+lines[line_num-1] js_exc.info_in_msg=true}}else{console.log('error ',js_exc)}} var exc=Error() exc.__name__='Internal Javascript error: '+(js_exc.__name__ ||js_exc.name) exc.__class__=_b_.Exception.$dict exc.$js_exc=js_exc if(js_exc.name=='ReferenceError'){exc.__name__='NameError' exc.__class__=_b_.NameError.$dict js_exc.message=js_exc.message.replace('$$','')}else if(js_exc.name=="InternalError"){exc.__name__='RuntimeError' exc.__class__=_b_.RuntimeError.$dict} exc.$message=js_exc.message ||'<'+js_exc+'>' exc.args=_b_.tuple([exc.$message]) exc.info='' exc.$py_error=true exc.$stack=$B.frames_stack.slice()}else{var exc=js_exc} $B.current_exception=exc return exc} $B.is_exc=function(exc,exc_list){ if(exc.__class__===undefined)exc=$B.exception(exc) var exc_class=exc.__class__.$factory for(var i=0;ilen){return r.stop} return $B.add(r.start,$B.mul(r.step,i))} $RangeDict.__getitem__=function(self,rank){if(_b_.isinstance(rank,_b_.slice)){var norm=_b_.slice.$dict.$conv_for_seq(rank,$RangeDict.__len__(self)),substep=$B.mul(self.step,norm.step),substart=compute_item(self,norm.start),substop=compute_item(self,norm.stop) return range(substart,substop,substep)} if(typeof rank !="number"){rank=$B.$GetInt(rank)} if($B.gt(0,rank)){rank=$B.add(rank,$RangeDict.__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('range object index out of range')} return res } $RangeDict.__hash__=function(self){var len=$RangeDict.__len__(self) if(len==0){return _b_.hash(_b_.tuple([0,None,None]))} if(len==1){return _b_.hash(_b_.tuple([1,self.start,None]))} return _b_.hash(_b_.tuple([len,self.start,self.step]))} $RangeIterator=function(obj){return{__class__:$RangeIterator.$dict,obj: obj}} $RangeIterator.__class__=$B.$factory $RangeIterator.$dict={__class__: $B.$type,__name__: 'range_iterator',$factory: $RangeIterator,__iter__: function(self){return self},__next__: function(self){return _b_.next(self.obj)}} $RangeIterator.$dict.__mro__=[$RangeIterator.$dict,_b_.object.$dict] $RangeDict.__iter__=function(self){var res={__class__ : $RangeDict,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(res)} $RangeDict.__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.LongInt.$dict.__pow__($B.LongInt(2),63) $B.maxsize=$B.LongInt.$dict.__sub__($B.maxsize,1)} return len} $RangeDict.__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('')}}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('')}} return self.$counter} $RangeDict.__mro__=[$RangeDict,_b_.object.$dict] $RangeDict.__reversed__=function(self){var n=$B.sub($RangeDict.__len__(self),1) return range($B.add(self.start,$B.mul(n,self.step)),$B.sub(self.start,self.step),$B.mul(-1,self.step))} $RangeDict.__repr__=$RangeDict.__str__=function(self){var res='range('+_b_.str(self.start)+', '+_b_.str(self.stop) if(self.step!=1)res +=', '+_b_.str(self.step) return res+')'} $RangeDict.__setattr__=function(self,attr,value){throw _b_.AttributeError('readonly attribute')} $RangeDict.start=function(self){return self.start} $RangeDict.step=function(self){return self.step},$RangeDict.stop=function(self){return self.stop} $RangeDict.count=function(self,ob){if(_b_.isinstance(ob,[_b_.int,_b_.float,_b_.bool])){return _b_.int($RangeDict.__contains__(self,ob))}else{var comp=_b_.getattr(ob,'__eq__'),it=$RangeDict.__iter__(self) _next=$RangeIterator.$dict.__next__,nb=0 while(true){try{if(comp(_next(it))){nb++}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){return nb} throw err}}}} $RangeDict.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=_b_.getattr(other,'__eq__'),it=$RangeDict.__iter__(self),_next=$RangeIterator.$dict.__next__,nb=0 while(true){try{if(comp(_next(it))){return nb} nb++}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){throw _b_.ValueError(_b_.str(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(_b_.str(other)+' not in range')}}else{throw _b_.ValueError(_b_.str(other)+' not in range')}} function range(){var $=$B.args('range',3,{start:null,stop:null,step:null},['start','stop','step'],arguments,{stop:null,step:null},null,null),start=$.start,stop=$.stop,step=$.step,safe if(stop===null && step===null){stop=$B.PyNumber_Index(start) safe=typeof stop==="number" return{__class__:$RangeDict,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("range() arg 3 must not be zero")} safe=(typeof start=='number' && typeof stop=='number' && typeof step=='number') return{__class__: $RangeDict,start: start,stop: stop,step: step,$is_range: true,$safe: safe}} range.__class__=$B.$factory range.$dict=$RangeDict $RangeDict.$factory=range range.$is_func=true var $SliceDict={__class__:$B.$type, __name__:'slice', $native:true, descriptors:{start:true,step:true,stop:true}} $SliceDict.__mro__=[$SliceDict,_b_.object.$dict] $SliceDict.__repr__=$SliceDict.__str__=function(self){return 'slice('+_b_.str(self.start)+','+ _b_.str(self.stop)+','+_b_.str(self.step)+')'} $SliceDict.__setattr__=function(self,attr,value){throw _b_.AttributeError('readonly attribute')} $SliceDict.$conv=function(self,len){ return{start: self.start===_b_.None ? 0 : self.start,stop: self.stop===_b_.None ? len : self.stop,step: self.step===_b_.None ? 1 : self.step}} $SliceDict.$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 Error('ValueError : slice step cannot be zero');} var start,end; 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=step<0 ? -1 : 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 +=len if($B.gt(0,stop))stop=step<0 ? -1 : 0 if($B.ge(stop,len))stop=step_is_neg ? len_1 : len;} return{start: start,stop: stop,step: step}} $SliceDict.start=function(self){return self.start} $SliceDict.step=function(self){return self.step} $SliceDict.stop=function(self){return self.stop} $SliceDict.indices=function(self,length){var len=$B.$GetInt(length) if(len < 0)_b_.ValueError('length should not be negative') if(self.step > 0){var _len=_b_.min(len,self.stop) return _b_.tuple([self.start,_len,self.step])}else if(self.step==_b_.None){var _len=_b_.min(len,self.stop) var _start=self.start if(_start==_b_.None)_start=0 return _b_.tuple([_start,_len,1])} _b_.NotImplementedError("Error! negative step indices not implemented yet")} function slice(){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__ : $SliceDict,start:start,stop:stop,step:step} return res} slice.__class__=$B.$factory slice.$dict=$SliceDict $SliceDict.$factory=slice slice.$is_func=true _b_.range=range _b_.slice=slice})(__BRYTHON__) ;(function($B){var _b_=$B.builtins var $ObjectDict=_b_.object.$dict var isinstance=_b_.isinstance,getattr=_b_.getattr,None=_b_.None var from_unicode={},to_unicode={} var $BytearrayDict={__class__:$B.$type,__name__:'bytearray'} var mutable_methods=['__delitem__','clear','copy','count','index','pop','remove','reverse','sort'] for(var i=0,_len_i=mutable_methods.length;i < _len_i;i++){var method=mutable_methods[i] $BytearrayDict[method]=(function(m){return function(self){var args=[self.source],pos=1 for(var i=1,_len_i=arguments.length;i < _len_i;i++)args[pos++]=arguments[i] return _b_.list.$dict[m].apply(null,args)}})(method)} var $bytearray_iterator=$B.$iterator_class('bytearray_iterator') $BytearrayDict.__iter__=function(self){return $B.$iterator(self.source,$bytearray_iterator)} $BytearrayDict.__mro__=[$BytearrayDict,$ObjectDict] $BytearrayDict.__repr__=$BytearrayDict.__str__=function(self){return 'bytearray('+$BytesDict.__repr__(self)+")"} $BytearrayDict.__setitem__=function(self,arg,value){if(isinstance(arg,_b_.int)){if(!isinstance(value,_b_.int)){throw _b_.TypeError('an integer is required')}else if(value>255){throw _b_.ValueError("byte must be in range(0, 256)")} var pos=arg if(arg<0)pos=self.source.length+pos if(pos>=0 && pos=0;i--){if(!isinstance($temp[i],_b_.int)){throw _b_.TypeError('an integer is required')}else if($temp[i]>255){throw ValueError("byte must be in range(0, 256)")} self.source.splice(start,0,$temp[i])}}else{throw _b_.TypeError("can only assign an iterable")}}else{ throw _b_.TypeError('list indices must be integer, not '+$B.get_class(arg).__name__)}} $BytearrayDict.append=function(self,b){if(arguments.length!=2){throw _b_.TypeError( "append takes exactly one argument ("+(arguments.length-1)+" given)")} if(!isinstance(b,_b_.int))throw _b_.TypeError("an integer is required") if(b>255)throw ValueError("byte must be in range(0, 256)") self.source[self.source.length]=b} $BytearrayDict.insert=function(self,pos,b){if(arguments.length!=3){throw _b_.TypeError( "insert takes exactly 2 arguments ("+(arguments.length-1)+" given)")} if(!isinstance(b,_b_.int))throw _b_.TypeError("an integer is required") if(b>255)throw ValueError("byte must be in range(0, 256)") _b_.list.$dict.insert(self.source,pos,b)} function bytearray(source,encoding,errors){var _bytes=bytes(source,encoding,errors) var obj={__class__:$BytearrayDict} $BytearrayDict.__init__(obj,source,encoding,errors) return obj} bytearray.__class__=$B.$factory bytearray.$dict=$BytearrayDict $BytearrayDict.$factory=bytearray bytearray.__code__={} bytearray.__code__.co_argcount=1 bytearray.__code__.co_consts=[] bytearray.__code__.co_varnames=['i'] var $BytesDict={__class__ : $B.$type,__name__ : 'bytes'} $BytesDict.__add__=function(self,other){if(!isinstance(other,bytes)){throw _b_.TypeError("can't concat bytes to " + _b_.str(other))} self.source=self.source.concat(other.source) return self} var $bytes_iterator=$B.$iterator_class('bytes_iterator') $BytesDict.__iter__=function(self){return $B.$iterator(self.source,$bytes_iterator)} $BytesDict.__eq__=function(self,other){return getattr(self.source,'__eq__')(other.source)} $BytesDict.__ge__=function(self,other){return _b_.list.$dict.__ge__(self.source,other.source)} $BytesDict.__getitem__=function(self,arg){var i if(isinstance(arg,_b_.int)){var pos=arg if(arg<0)pos=self.source.length+pos if(pos>=0 && pos0){var start=arg.start===None ? 0 : arg.start var stop=arg.stop===None ? getattr(self.source,'__len__')(): arg.stop}else{var start=arg.start===None ? getattr(self.source,'__len__')()-1 : arg.start var stop=arg.stop===None ? 0 : arg.stop} if(start<0)start=self.source.length+start if(stop<0)stop=self.source.length+stop var res=[],i=null,pos=0 if(step>0){if(stop<=start)return '' for(i=start;i=start)return '' for(i=start;i>=stop;i+=step)res[pos++]=self.source[i]} return bytes(res)}else if(isinstance(arg,bool)){return self.source.__getitem__(_b_.int(arg))}} $BytesDict.__gt__=function(self,other){return _b_.list.$dict.__gt__(self.source,other.source)} $BytesDict.__hash__=function(self){if(self===undefined){return $BytesDict.__hashvalue__ ||$B.$py_next_hash-- } var hash=1; for(var i=0,_len_i=self.length;i < _len_i;i++){hash=(101*hash + self.source[i])& 0xFFFFFFFF} return hash} $BytesDict.__init__=function(self,source,encoding,errors){var int_list=[],pos=0 if(source===undefined){}else if(isinstance(source,_b_.int)){var i=source while(i--)int_list[pos++]=0}else{if(isinstance(source,_b_.str)){if(encoding===undefined) throw _b_.TypeError("string argument without an encoding") int_list=encode(source,encoding)}else{ int_list=_b_.list(source)}} self.source=int_list self.encoding=encoding self.errors=errors} $BytesDict.__le__=function(self,other){return _b_.list.$dict.__le__(self.source,other.source)} $BytesDict.__len__=function(self){return self.source.length} $BytesDict.__lt__=function(self,other){return _b_.list.$dict.__lt__(self.source,other.source)} $BytesDict.__mro__=[$BytesDict,$ObjectDict] $BytesDict.__mul__=function(){var $=$B.args('__mul__',2,{self:null,other:null},['self','other'],arguments,{},null,null),other=$B.PyNumber_Index($.other),res=bytes() for(var i=0;i=128){var hx=s.toString(16) hx=(hx.length==1 ? '0' : '')+ hx res +='\\x'+hx}else{res +=String.fromCharCode(s)}} return res+"'"} $BytesDict.__reduce_ex__=function(self){return $BytesDict.__repr__(self)} $BytesDict.decode=function(self,encoding,errors){if(encoding===undefined)encoding='utf-8' if(errors===undefined)errors='strict' switch(errors){case 'strict': case 'ignore': case 'replace': case 'surrogateescape': case 'xmlcharrefreplace': case 'backslashreplace': return decode(self.source,encoding,errors) default:}} $BytesDict.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=bytes(),empty=true while(true){try{var item=next_func() if(empty){empty=false} else{res=$BytesDict.__add__(res,self)} res=$BytesDict.__add__(res,item)}catch(err){if(isinstance(err,_b_.StopIteration)){break} throw err}} return res} $BytesDict.maketrans=function(from,to){var _t=[] for(var i=0;i < 256;i++)_t[i]=i for(var i=0,_len_i=from.source.length;i < _len_i;i++){var _ndx=from.source[i] _t[_ndx]=to.source[i]} return bytes(_t)} $BytesDict.split=function(){var $=$B.args('split',2,{self:null,sep:null},['self','sep'],arguments,{},null,null),res=[],start=0,stop=0 var seps=$.sep.source,len=seps.length,src=$.self.source,blen=src.length while(stopstart)){res.push(bytes(src.slice(start,stop)))} return res} function _strip(self,cars,lr){if(cars===undefined){cars=[],pos=0 var ws='\r\n \t' for(var i=0,_len_i=ws.length;i < _len_i;i++)cars[pos++]=ws.charCodeAt(i)}else if(isinstance(cars,bytes)){cars=cars.source}else{throw _b_.TypeError("Type str doesn't support the buffer API")} if(lr=='l'){for(var i=0,_len_i=self.source.length;i < _len_i;i++){if(cars.indexOf(self.source[i])==-1)break} return bytes(self.source.slice(i))} for(var i=self.source.length-1;i>=0;i--){if(cars.indexOf(self.source[i])==-1)break} return bytes(self.source.slice(0,i+1))} $BytesDict.lstrip=function(self,cars){return _strip(self,cars,'l')} $BytesDict.rstrip=function(self,cars){return _strip(self,cars,'r')} $BytesDict.startswith=function(){var $=$B.args('startswith',2,{self: null,start: null},['self','start'],arguments,{},null,null) if(_b_.isinstance($.start,bytes)){var res=true for(var i=0;i<$.start.source.length && res;i++){res=$.self.source[i]==$.start.source[i]} return res}else if(_b_.isinstance($.start,_b_.tuple)){var items=[] for(var i=0;i<$.start.length;i++){if(_b_.isinstance($.start[i],bytes)){items=items.concat($.start[i].source)}else{throw _b_.TypeError("startswith first arg must be bytes or "+ "a tuple of bytes, not "+$B.get_class($.start).__name__)}} var start=bytes(items) return $BytesDict.startswith($.self,start)}else{throw _b_.TypeError("startswith first arg must be bytes or a tuple of bytes, not "+ $B.get_class($.start).__name__)}} $BytesDict.strip=function(self,cars){var res=$BytesDict.lstrip(self,cars) return $BytesDict.rstrip(res,cars)} $BytesDict.translate=function(self,table,_delete){if(_delete===undefined){_delete=[]} else if(isinstance(_delete,bytes)){_delete=_delete.source} else{throw _b_.TypeError("Type "+$B.get_class(_delete).__name+" doesn't support the buffer API")} var res=[],pos=0 if(isinstance(table,bytes)&& table.source.length==256){for(var i=0,_len_i=self.source.length;i < _len_i;i++){if(_delete.indexOf(self.source[i])>-1)continue res[pos++]=table.source[self.source[i]]}} return bytes(res)} $BytesDict.upper=function(self){var _res=[],pos=0 for(var i=0,_len_i=self.source.length;i < _len_i;i++)_res[pos++]=self.source[i].toUpperCase() return bytes(_res)} function $UnicodeEncodeError(encoding,code_point,position){throw _b_.UnicodeEncodeError("'"+encoding+ "' codec can't encode character "+_b_.hex(code_point)+ " in position "+position)} function $UnicodeDecodeError(encoding,position){throw _b_.UnicodeDecodeError("'"+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)} enc=enc.replace('-','') enc=enc.replace('-','_') return enc} function load_decoder(enc){ if(to_unicode[enc]===undefined){load_encoder(enc) to_unicode[enc]={} for(var attr in from_unicode[enc]){to_unicode[enc][from_unicode[enc][attr]]=attr}}} function load_encoder(enc){ if(from_unicode[enc]===undefined){var mod=_b_.__import__('encodings.'+enc),table=mod[enc].decoding_table from_unicode[enc]={} for(var i=0;i-1){ return pyobj.elt}else if([_b_.list.$dict,_b_.tuple.$dict].indexOf(klass)>-1){ var res=[] for(var i=0,_len_i=pyobj.length;i < _len_i;i++){res.push(pyobj2jsobj(pyobj[i]))} return res}else if(klass===_b_.dict.$dict){ var jsobj={} var items=_b_.list(_b_.dict.$dict.items(pyobj)) for(var j=0,_len_j=items.length;j < _len_j;j++){jsobj[items[j][0]]=pyobj2jsobj(items[j][1])} return jsobj}else if(klass===$B.builtins.float.$dict){ return pyobj.valueOf()}else if(klass===$B.$FunctionDict){ return function(){try{var args=[] for(var i=0;i'} res.__str__=function(){return ''} return{__class__:$JSObjectDict,js:res,js_func:js_attr}}else{if(Array.isArray(self.js[attr])){return self.js[attr]} return $B.$JS2Py(self.js[attr])}}else if(self.js===window && attr==='$$location'){ return $Location()} var res var mro=self.__class__.__mro__ for(var i=0,_len_i=mro.length;i < _len_i;i++){var v=mro[i][attr] if(v!==undefined){res=v break}} if(res!==undefined){if(typeof res==='function'){ return function(){var args=[self],arg for(var i=0,_len_i=arguments.length;i < _len_i;i++){arg=arguments[i] if(arg &&(arg.__class__===$JSObjectDict ||arg.__class__===$JSConstructorDict)){args.push(arg.js)}else{args.push(arg)}} return res.apply(self,args)}} return $B.$JS2Py(res)}else{ throw _b_.AttributeError("no attribute "+attr+' for '+self.js)}} $JSObjectDict.__getitem__=function(self,rank){if(typeof self.js.length=='number' && typeof self.js.item=='function'){var rank_to_int=_b_.int(rank) if(rank_to_int<0){rank_to_int+=self.js.length} var res=self.js.item(rank_to_int) if(res===undefined){throw _b_.KeyError(rank)} return res} try{return getattr(self.js,'__getitem__')(rank)} catch(err){if(self.js[rank]!==undefined){return JSObject(self.js[rank])} throw _b_.KeyError(rank)}} var $JSObject_iterator=$B.$iterator_class('JS object iterator') $JSObjectDict.__iter__=function(self){var items=[] if(window.Symbol && self.js[Symbol.iterator]!==undefined){ if(self.js.length!==undefined && self.js.item!==undefined){for(var i=0;i"} $JSObjectDict.__setattr__=function(self,attr,value){if(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'} $B.$ModuleDict.__mro__=[$B.$ModuleDict,_b_.object.$dict] function module(name,doc,package){return{__class__:$B.$ModuleDict,__name__:name,__doc__:doc||_b_.None,__package__:package||_b_.None}} module.__class__=$B.$factory module.$dict=$B.$ModuleDict $B.$ModuleDict.$factory=module var loader=function(){} var Loader={__class__:$B.$type,__name__ : 'Loader'} Loader.__mro__=[Loader,_b_.object.$dict] Loader.$factory=loader loader.$dict=Loader loader.__class__=$B.$factory function parent_package(mod_name){var parts=mod_name.split('.'); parts.pop(); return parts.join('.');} function $importer(){ var $xmlhttp=new XMLHttpRequest(); if($B.$CORS && "withCredentials" in $xmlhttp){}else if($B.$CORS && typeof window.XDomainRequest !="undefined"){ $xmlhttp=new window.XDomainRequest();}else if(window.XMLHttpRequest){}else{ $xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} var fake_qs; switch($B.$options.cache){case 'version': fake_qs="?v="+$B.version_info[2] break; case 'browser': fake_qs='' break; default: fake_qs="?v="+$B.UUID()} var timer=setTimeout(function(){$xmlhttp.abort() throw _b_.ImportError("No module named '"+module+"'")},5000) return[$xmlhttp,fake_qs,timer]} function $download_module(module,url,package,blocking){var imp=$importer(),$xmlhttp=imp[0],fake_qs=imp[1],timer=imp[2],res=null,mod_name=module.__name__,no_block=Array.isArray(blocking)||blocking===false if(no_block){console.log('download non blocking',mod_name) $xmlhttp.open('GET',url+fake_qs,true)}else{$xmlhttp.open('GET',url+fake_qs,false)} if($B.$CORS){$xmlhttp.onload=function(){if($xmlhttp.status==200 ||$xmlhttp.status==0){res=$xmlhttp.responseText}else{ res=_b_.FileNotFoundError("No module named '"+mod_name+"'")}} $xmlhttp.onerror=function(){res=_b_.FileNotFoundError("No module named '"+mod_name+"'")}}else{ $xmlhttp.onreadystatechange=function(){if($xmlhttp.readyState==4){window.clearTimeout(timer) if($xmlhttp.status==200 ||$xmlhttp.status==0){res=$xmlhttp.responseText module.$last_modified=$xmlhttp.getResponseHeader('Last-Modified') if(no_block){var ext=url.substr(url.length-2) if(ext=='py'){try{import_py1(module,mod_name,url,package,res)} catch(err){console.log(err);throw err}}else if(ext=='js'){try{run_js(res,url,module)} catch(err){console.log(err);throw err}} console.log('non blocking ok',mod_name) blocking[1]() return}}else{ console.log('Error '+$xmlhttp.status+ ' means that Python module '+mod_name+ ' was not found at url '+url) res=_b_.FileNotFoundError("No module named '"+mod_name+"'")}}}} if('overrideMimeType' in $xmlhttp){$xmlhttp.overrideMimeType("text/plain")} $xmlhttp.send() if(!no_block){ if(res==null)throw _b_.FileNotFoundError("No module named '"+mod_name+"' (res is null)") if(res.constructor===Error){throw res} return res}} $B.$download_module=$download_module function import_js(module,path,blocking){try{var module_contents=$download_module(module,path,undefined,blocking) if(Array.isArray(blocking)){return}}catch(err){return null} run_js(module_contents,path,module) return true} function run_js(module_contents,path,module){ try{eval(module_contents);}catch(err){console.log(err) throw err} try{$module} catch(err){console.log('no $module') throw _b_.ImportError("name '$module' is not defined in module")} if(module !==undefined){ for(var attr in $module){module[attr]=$module[attr];} $module=module;} else{ $module.__class__=$B.$ModuleDict $module.__name__=module.name $module.__repr__=$module.__str__=function(){if($B.builtin_module_names.indexOf(module.name)> -1){return ""} return ""} $module.toString=function(){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_i=kk.length;i < _len_i;i++){console.log(kk[i]) if(kk[i].charAt(0)=='$'){console.log(eval(kk[i]))}} console.log('---')} function import_py1(module,mod_name,path,package,module_contents){console.log('importpy1',mod_name) $B.imported[mod_name].$is_package=module.$is_package $B.imported[mod_name].$last_modified=module.$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=module.$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,module)} function import_py(module,path,package,blocking){ var mod_name=module.__name__,module_contents=$download_module(module,path,package,blocking) if(Array.isArray(blocking)){return} $B.imported[mod_name].$is_package=module.$is_package $B.imported[mod_name].$last_modified=module.$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=module.$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,module)} $B.run_py=run_py=function(module_contents,path,module,compiled){if(!compiled){var $Node=$B.$Node,$NodeJSCtx=$B.$NodeJSCtx $B.$py_module_path[module.__name__]=path var root=$B.py2js(module_contents,module.__name__,module.__name__,'__builtins__') var body=root.children root.children=[] var mod_node=new $Node('expression') new $NodeJSCtx(mod_node,'var $module=(function()') root.insert(0,mod_node) for(var i=0,_len_i=body.length;i < _len_i;i++){mod_node.add(body[i])} var ret_node=new $Node('expression') new $NodeJSCtx(ret_node,'return $locals_'+module.__name__.replace(/\./g,'_')) mod_node.add(ret_node) var ex_node=new $Node('expression') new $NodeJSCtx(ex_node,')(__BRYTHON__)') root.add(ex_node)} try{var js=(compiled)? module_contents : root.to_js() if($B.$options.debug==10){console.log('code for module '+module.__name__) console.log(js)} eval(js)}catch(err){ throw err} try{ var mod=eval('$module') for(var attr in mod){module[attr]=mod[attr];} module.__initializing__=false $B.imported[module.__name__]=module return true}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}} function new_spec(fields){ fields.__class__=$B.$ModuleDict return fields;} function finder_VFS(){return{__class__:finder_VFS.$dict}} finder_VFS.__class__=$B.$factory finder_VFS.$dict={$factory: finder_VFS,__class__: $B.$type,__name__: 'VFSFinder',create_module : function(cls,spec){ return _b_.None;},exec_module : function(cls,module){var stored=module.__spec__.loader_state.stored; delete module.__spec__['loader_state']; var ext=stored[0],module_contents=stored[1]; module.$is_package=stored[2]; var path=$B.brython_path+'Lib/'+module.__name__ if(module.$is_package){path +='/__init__.py'} module.__file__=path if(ext=='.js'){run_js(module_contents,module.__path__,module)} else{run_py(module_contents,module.__path__,module,ext=='.pyc.js')} if($B.debug>1){console.log('import '+module.__name__+' from VFS')}},find_module: function(cls,name,path){return{__class__:Loader,load_module:function(name,path){var spec=cls.$dict.find_spec(cls,name,path) var mod=module(name) $B.imported[name]=mod mod.__spec__=spec cls.$dict.exec_module(cls,mod)}}},find_spec : function(cls,fullname,path,prev_module){if(!$B.use_VFS){return _b_.None;} var stored=$B.VFS[fullname]; if(stored===undefined){return _b_.None;} var is_package=stored[2],is_builtin=$B.builtin_module_names.indexOf(fullname)> -1; return new_spec({name : fullname,loader: cls, origin : is_builtin? 'built-in' : 'py_VFS', submodule_search_locations: is_package?[]: _b_.None,loader_state:{stored: stored}, cached: _b_.None,parent: is_package? fullname : parent_package(fullname),has_location: _b_.False});}} finder_VFS.$dict.__mro__=[finder_VFS.$dict,_b_.object.$dict] finder_VFS.$dict.create_module.$type='classmethod' finder_VFS.$dict.exec_module.$type='classmethod' finder_VFS.$dict.find_module.$type='classmethod' finder_VFS.$dict.find_spec.$type='classmethod' function finder_stdlib_static(){return{__class__:finder_stdlib_static.$dict}} finder_stdlib_static.__class__=$B.$factory finder_stdlib_static.$dict={$factory : finder_stdlib_static,__class__ : $B.$type,__name__ : 'StdlibStatic',create_module : function(cls,spec){ return _b_.None;},exec_module : function(cls,module,blocking){var metadata=module.__spec__.loader_state; module.$is_package=metadata.is_package; if(metadata.ext=='py'){import_py(module,metadata.path,module.__package__,blocking);} else{ import_js(module,metadata.path,blocking);} delete module.__spec__['loader_state'];},find_module: function(cls,name,path){var spec=cls.$dict.find_spec(cls,name,path) if(spec===_b_.None){return _b_.None} return{__class__:Loader,load_module:function(name,path){var mod=module(name) $B.imported[name]=mod mod.__spec__=spec mod.__package__=spec.parent cls.$dict.exec_module(cls,mod,spec.blocking)}}},find_spec: function(cls,fullname,path,prev_module){if($B.stdlib){var address=$B.stdlib[fullname]; if(address===undefined){var elts=fullname.split('.') if(elts.length>1){var mod_name=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;}} finder_stdlib_static.$dict.__mro__=[finder_stdlib_static.$dict,_b_.object.$dict] finder_stdlib_static.$dict.create_module.$type='classmethod' finder_stdlib_static.$dict.exec_module.$type='classmethod' finder_stdlib_static.$dict.find_module.$type='classmethod' finder_stdlib_static.$dict.find_spec.$type='classmethod' function finder_path(){return{__class__:finder_path.$dict}} finder_path.__class__=$B.$factory finder_path.$dict={$factory: finder_path,__class__: $B.$type,__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.$dict.find_spec(cls,name,path)},find_spec : function(cls,fullname,path,prev_module){if(is_none(path)){ path=$B.path} for(var i=0,li=path.length;i'},self.path)} catch(e){self.vfs=undefined; throw new _b_.ImportError(e.$message ||e.message);} eval(code); try{ self.vfs=$vfs;} catch(e){throw new _b_.ImportError('Expecting $vfs var in VFS file');} $B.path_importer_cache[self.path + '/']=self;},find_spec: function(self,fullname,module){if(self.vfs===undefined){try{vfs_hook.$dict.load_vfs(self)} catch(e){console.log("Could not load VFS while importing '" + fullname + "'"); return _b_.None;}} var stored=self.vfs[fullname]; if(stored===undefined){return _b_.None;} var is_package=stored[2]; return new_spec({name : fullname,loader: finder_VFS, origin : self.path + '#' + fullname, submodule_search_locations: is_package?[self.path]: _b_.None,loader_state:{stored: stored}, cached: _b_.None,parent: is_package? fullname : parent_package(fullname),has_location: _b_.True});},invalidate_caches: function(self){self.vfs=undefined;}} vfs_hook.$dict.__mro__=[vfs_hook.$dict,_b_.object.$dict] function url_hook(path_entry,hint){return{__class__: url_hook.$dict,path_entry:path_entry,hint:hint }} url_hook.__class__=$B.$factory url_hook.$dict={$factory: url_hook,__class__: $B.$type,__name__ : 'UrlPathFinder',__repr__: function(self){return ''},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=='js'){ modpaths=[[base_path + '.js','js',false]];} if(tryall ||hint=='pyc.js'){ modpaths=modpaths.concat([[base_path + '.pyc.js','pyc.js',false],[base_path + '/__init__.pyc.js','pyc.js',true]]);} 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]; loader_data.code=$download_module({__name__:fullname},file_info[0]); 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(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.$dict.__mro__=[url_hook.$dict,_b_.object.$dict] $B.$path_hooks=[vfs_hook,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(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(_path,_type);} delete _path; delete _type; delete _sys_paths; $B.is_none=function(o){return o===undefined ||o==_b_.None;} $B.$__import__=function(mod_name,globals,locals,fromlist,level,blocking){ var modobj=$B.imported[mod_name],parsed_name=mod_name.split('.'); if(modobj==_b_.None){ throw _b_.ImportError(mod_name)} if(modobj===undefined){ if(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){ throw _b_.ImportError(_mod_name)} else if(modobj===undefined){try{$B.import_hooks(_mod_name,__path__,undefined,blocking)} catch(err){delete $B.imported[_mod_name] throw err} if(is_none($B.imported[_mod_name])){throw _b_.ImportError(_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__===$B.$ModuleDict){return $B.imported[_mod_name][parsed_name[len]]} throw _b_.ImportError(_mod_name)}}}} else if(Array.isArray(blocking)){var frames=$B.frames_stack for(var i=0;i"} $B.imported['_importlib']=$B.modules['_importlib']=_importlib_module})(__BRYTHON__) ;(function($B){eval($B.InjectBuiltins()) var $ObjectDict=_b_.object.$dict function $err(op,other){var msg="unsupported operand type(s) for "+op msg +=": 'float' and '"+$.get_class(other).__name__+"'" throw _b_.TypeError(msg)} var $FloatDict={__class__:$B.$type,__dir__:$ObjectDict.__dir__,__name__:'float',$native:true} $FloatDict.as_integer_ratio=function(self){if(self.valueOf()==Number.POSITIVE_INFINITY || self.valueOf()==Number.NEGATIVE_INFINITY){throw _b_.OverflowError("Cannot pass infinity to float.as_integer_ratio.")} if(!Number.isFinite(self.valueOf())){throw _b_.ValueError("Cannot pass NaN to float.as_integer_ratio.")} var tmp=_b_.$frexp(self.valueOf()) var fp=tmp[0] var exponent=tmp[1] for(var i=0;i < 300;i++){if(fp==Math.floor(fp)){break}else{ fp *=2 exponent--}} numerator=float(fp) py_exponent=abs(exponent) denominator=1 console.log(exponent,py_exponent,numerator,denominator) py_exponent=_b_.getattr(int(denominator),"__lshift__")(py_exponent) if(exponent > 0){numerator=numerator * py_exponent}else{ denominator=py_exponent} console.log(exponent,py_exponent,numerator,denominator) return _b_.tuple([_b_.int(numerator),_b_.int(denominator)])} $FloatDict.__bool__=function(self){return _b_.bool(self.valueOf())} $FloatDict.__class__=$B.$type $FloatDict.__eq__=function(self,other){if(isNaN(self)&& isNaN(other)){return true} 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} if(_b_.hasattr(other,'__eq__')){return _b_.getattr(other,'__eq__')(self.value)} return self.value===other} $FloatDict.__floordiv__=function(self,other){if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0)throw ZeroDivisionError('division by zero') return float(Math.floor(self/other))} if(hasattr(other,'__rfloordiv__')){return getattr(other,'__rfloordiv__')(self)} $err('//',other)} $FloatDict.fromhex=function(arg){ if(!isinstance(arg,_b_.str)){throw _b_.ValueError('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('count 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('invalid hexadecimal floating-point string') var _sign=_m[1] var _int=parseInt(_m[3]||'0',16) var _fraction=_m[4]||'.0' var _exponent=_m[5]||'p0' if(_sign=='-'){_sign=-1}else{_sign=1} var _sum=_int for(var i=1,_len_i=_fraction.length;i < _len_i;i++){_sum+=parseInt(_fraction.charAt(i),16)/Math.pow(16,i)} return new Number(_sign * _sum * Math.pow(2,parseInt(_exponent.substring(1))))} $FloatDict.__getformat__=function(arg){if(arg=='double' ||arg=='float')return 'IEEE, little-endian' throw _b_.ValueError("__getformat__() argument 1 must be 'double' or 'float'")} function preformat(self,fmt){if(fmt.empty){return _b_.str(self)} if(fmt.type && 'eEfFgGn%'.indexOf(fmt.type)==-1){throw _b_.ValueError("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 && 'fF%'.indexOf(fmt.type)>-1){var pos_pt=Math.abs(self).toString().search(/\./) if(pos_pt>-1){prec+=pos_pt}else{prec=Math.abs(self).toString().length}} var res=self.toPrecision(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{missing=fmt.precision-res.length+pt_pos+1 if(missing>0)res +='0'.repeat(missing)}}else{var res1=self.toExponential(fmt.precision-1),exp=parseInt(res1.substr(res1.search('e')+1)) if(exp<-4 ||exp>=fmt.precision-1){res=res1 if(Math.abs(exp)<10){res=res.substr(0,res.length-1)+'0'+ res.charAt(res.length-1)}}}}else{var res=_b_.str(self)} if(fmt.type===undefined||'gGn'.indexOf(fmt.type)!=-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} $FloatDict.__format__=function(self,format_spec){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;i0?float(x):float(-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('-inf') if(_b_.$isinf(x))return float('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)} $FloatDict.hex=function(self){ var DBL_MANT_DIG=53 var 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())) var _m=_a[0],_e=_a[1] var _shift=1 - Math.max(-1021 - _e,0) _m=_b_.$ldexp(_m,_shift) _e -=_shift var _int2hex='0123456789ABCDEF'.split('') var _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;} $FloatDict.__init__=function(self,value){self=new Number(value)} $FloatDict.__int__=function(self){return parseInt(self)} $FloatDict.is_integer=function(self){return _b_.int(self)==self} $FloatDict.__mod__=function(self,other){ if(other==0){throw ZeroDivisionError('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)} $FloatDict.__mro__=[$FloatDict,$ObjectDict] $FloatDict.__mul__=function(self,other){if(isinstance(other,_b_.int)){if(other.__class__==$B.LongInt.$dict){return new Number(self*parseFloat(other.value))} return new Number(self*other)} if(isinstance(other,float))return new Number(self*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_.complex(float(self*other.real),float(self*other.imag))} if(hasattr(other,'__rmul__'))return getattr(other,'__rmul__')(self) $err('*',other)} $FloatDict.__ne__=function(self,other){return !$FloatDict.__eq__(self,other)} $FloatDict.__neg__=function(self,other){return float(-self)} $FloatDict.__pos__=function(self){return self} $FloatDict.__pow__=function(self,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.LongInt.$dict ||!$B.is_safe_int(other)) && !isNaN(other)){return new Number(1)} else if(self==0 && isFinite(other)&& other<0){throw _b_.ZeroDivisionError("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(other))){ return _b_.complex.$dict.__pow__(_b_.complex(self,0),other)} return float(Math.pow(self,other))} if(hasattr(other,'__rpow__'))return getattr(other,'__rpow__')(self) $err("** or pow()",other)} $FloatDict.__repr__=$FloatDict.__str__=function(self){if(self===float)return "" 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' return _b_.str(res)} $FloatDict.__setattr__=function(self,attr,value){if(self.constructor===Number){if($FloatDict[attr]===undefined){throw _b_.AttributeError("'float' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError("'float' object attribute '"+attr+"' is read-only")}} self[attr]=value return $N} $FloatDict.__truediv__=function(self,other){if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0)throw ZeroDivisionError('division by zero') return float(self/other)} if(isinstance(other,_b_.complex)){var cmod=other.real*other.real+other.imag*other.imag if(cmod==0)throw ZeroDivisionError('division by zero') return _b_.complex(float(self*other.real/cmod),float(-self*other.imag/cmod))} if(hasattr(other,'__rtruediv__'))return getattr(other,'__rtruediv__')(self) $err('/',other)} var $op_func=function(self,other){if(isinstance(other,_b_.int)){if(other.__class__===$B.LongInt.$dict){return float(self-parseInt(other.value))}else{return float(self-other)}} if(isinstance(other,float))return float(self-other) if(isinstance(other,_b_.bool)){var bool_value=0; if(other.valueOf())bool_value=1; return float(self-bool_value)} if(isinstance(other,_b_.complex)){return _b_.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('$FloatDict.__'+$ops[$op]+'__ = '+$opf)} var $comp_func=function(self,other){if(isinstance(other,_b_.int)){if(other.__class__===$B.LongInt.$dict){return self > parseInt(other.value)} return self > other.valueOf()} if(isinstance(other,float))return self > other throw _b_.TypeError( "unorderable types: "+self.__class__.__name__+'() > '+$B.get_class(other).__name__+"()")} $comp_func +='' var $comps={'>':'gt','>=':'ge','<':'lt','<=':'le'} for(var $op in $comps){eval("$FloatDict.__"+$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))} $B.make_rmethods($FloatDict) var $notimplemented=function(self,other){throw _b_.TypeError( "unsupported operand types for OPERATOR: '"+self.__class__.__name__+ "' and '"+$B.get_class(other).__name__+"'")} $notimplemented +='' for(var $op in $B.$operators){ switch($op){case '+=': case '-=': case '*=': case '/=': case '%=': break default: var $opfunc='__'+$B.$operators[$op]+'__' if($FloatDict[$opfunc]===undefined){eval('$FloatDict.'+$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-1){res +=x} else{res +=s[i]}} return res} var float=function(value){switch(value){case undefined: return $FloatClass(0.0) case Number.MAX_VALUE: return $FloatClass(Infinity) case -Number.MAX_VALUE: return $FloatClass(-Infinity)} if(typeof value=="number")return $FloatClass(value) if(isinstance(value,float)){return value} if(isinstance(value,_b_.bytes)){var s=getattr(value,'decode')('latin-1') return float(getattr(value,'decode')('latin-1'))} if(hasattr(value,'__float__')){return $FloatClass(getattr(value,'__float__')())} 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('count not convert string to float') default: value=to_digits(value) if(isFinite(value))return $FloatClass(eval(value)) else{ _b_.str.$dict.encode(value,'latin-1') throw _b_.ValueError("Could not convert to float(): '"+_b_.str(value)+"'")}}} throw _b_.TypeError("float() argument must be a string or a number, not '"+ $B.get_class(value).__name__+"'")} float.__class__=$B.$factory float.$dict=$FloatDict $FloatDict.$factory=float $FloatDict.__new__=$B.$__new__(float) $B.$FloatClass=$FloatClass _b_.float=float})(__BRYTHON__) ;(function($B){eval($B.InjectBuiltins()) var $ObjectDict=_b_.object.$dict,$N=_b_.None function $err(op,other){var msg="unsupported operand type(s) for "+op msg +=": 'int' and '"+$B.get_class(other).__name__+"'" throw _b_.TypeError(msg)} var $IntDict={__class__:$B.$type,__name__:'int',__dir__:$ObjectDict.__dir__,toString:function(){return '$IntDict'},$native:true,descriptors:{'numerator':true,'denominator':true,'imag':true,'real':true}} $IntDict.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 var _bytes,_len if(isinstance(x,[_b_.list,_b_.tuple])){_bytes=x _len=len(x)}else if(isinstance(x,[_b_.bytes,_b_.bytearray])){_bytes=x.source _len=x.source.length}else{ _b_.TypeError("Error! " + _b_.type(x)+ " is not supported in int.from_bytes. fix me!")} 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("byteorder must be either 'little' or 'big'");} $IntDict.to_bytes=function(length,byteorder,star){ throw _b_.NotImplementedError("int.to_bytes is not implemented yet")} $IntDict.__abs__=function(self){return abs(self)} $IntDict.__bool__=function(self){return new Boolean(self.valueOf())} $IntDict.__ceil__=function(self){return Math.ceil(self)} $IntDict.__class__=$B.$type $IntDict.__divmod__=function(self,other){return divmod(self,other)} $IntDict.__eq__=function(self,other){ if(other===undefined)return self===int if(isinstance(other,int))return self.valueOf()==other.valueOf() if(isinstance(other,_b_.float))return self.valueOf()==other.valueOf() if(isinstance(other,_b_.complex)){if(other.imag !=0)return False return self.valueOf()==other.real} if(hasattr(other,'__eq__'))return getattr(other,'__eq__')(self) return self.valueOf()===other} function preformat(self,fmt){if(fmt.empty){return _b_.str(self)} if(fmt.type && 'bcdoxXn'.indexOf(fmt.type)==-1){throw _b_.ValueError("Unknown format code '"+fmt.type+ "' for object of type 'int'")} switch(fmt.type){case undefined: case 'd': return self.toString() case 'b': return(fmt.alternate ? '0b' : '')+ self.toString(2) case 'c': return _b_.chr(self) case 'o': return(fmt.alternate ? '0o' : '')+ self.toString(8) case 'x': return(fmt.alternate ? '0x' : '')+ self.toString(16) case 'X': return(fmt.alternate ? '0X' : '')+ self.toString(16).toUpperCase() case 'n': return self } return res} $IntDict.__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.$dict.__format__(self,format_spec)} fmt.align=fmt.align ||'>' var res=preformat(self,fmt) if(fmt.comma){var len=res.length,nb=Math.ceil(res.length/3),chunks=[] for(var i=0;i$B.min_int && res<$B.max_int){return res} else{return int($B.LongInt.$dict.__mul__($B.LongInt(self),$B.LongInt(other)))}} if(isinstance(other,_b_.float)){return new Number(self*other)} if(isinstance(other,_b_.bool)){if(other.valueOf())return self return int(0)} if(isinstance(other,_b_.complex)){return _b_.complex($IntDict.__mul__(self,other.real),$IntDict.__mul__(self,other.imag))} if(isinstance(other,[_b_.list,_b_.tuple])){var res=[] var $temp=other.slice(0,other.length) for(var i=0;i$B.min_int && res<$B.max_int){return res} else{return int($B.LongInt.$dict.__pow__($B.LongInt(self),$B.LongInt(other)))}} if(isinstance(other,_b_.float)){if(self>=0){return new Number(Math.pow(self,other.valueOf()))} else{ return _b_.complex.$dict.__pow__(_b_.complex(self,0),other)}} if(hasattr(other,'__rpow__'))return getattr(other,'__rpow__')(self) $err("**",other)} $IntDict.__repr__=function(self){if(self===int)return "" return self.toString()} $IntDict.__rshift__=function(self,other){if(isinstance(other,int)){return int($B.LongInt.$dict.__rshift__($B.LongInt(self),$B.LongInt(other)))} var rrshift=getattr(other,'__rrshift__',null) if(rrshift!==null){return rrshift(self)} $err('>>',other)} $IntDict.__setattr__=function(self,attr,value){if(typeof self=="number"){if($IntDict[attr]===undefined){throw _b_.AttributeError("'int' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError("'int' object attribute '"+attr+"' is read-only")}} self[attr]=value return $N} $IntDict.__str__=$IntDict.__repr__ $IntDict.__truediv__=function(self,other){if(isinstance(other,int)){if(other==0)throw ZeroDivisionError('division by zero') if(other.__class__==$B.LongInt.$dict){return new Number(self/parseInt(other.value))} return new Number(self/other)} if(isinstance(other,_b_.float)){if(!other.valueOf())throw ZeroDivisionError('division by zero') return new Number(self/other)} if(isinstance(other,_b_.complex)){var cmod=other.real*other.real+other.imag*other.imag if(cmod==0)throw ZeroDivisionError('division by zero') return _b_.complex(self*other.real/cmod,-self*other.imag/cmod)} if(hasattr(other,'__rtruediv__'))return getattr(other,'__rtruediv__')(self) $err("/",other)} $IntDict.bit_length=function(self){s=bin(self) s=getattr(s,'lstrip')('-0b') return s.length } $IntDict.numerator=function(self){return self} $IntDict.denominator=function(self){return int(1)} $IntDict.imag=function(self){return int(0)} $IntDict.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(isinstance(other,int)){if(other.__class__===$B.LongInt.$dict){return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))} if(self > $B.max_int32 ||self < $B.min_int32 || other > $B.max_int32 ||other < $B.min_int32){return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))} return self-other} if(isinstance(other,_b_.bool))return self-other if(hasattr(other,'__rsub__'))return getattr(other,'__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('$IntDict.__'+$ops[$op]+'__ = '+opf)} var $op_func=function(self,other){if(isinstance(other,int)){if(typeof other=='number'){var res=self.valueOf()-other.valueOf() if(res>=$B.min_int && res<=$B.max_int){return res} else{return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))}}else{return $B.LongInt.$dict.__sub__($B.LongInt(self),$B.LongInt(other))}} if(isinstance(other,_b_.float)){return new Number(self-other)} if(isinstance(other,_b_.complex)){return _b_.complex(self-other.real,-other.imag)} if(isinstance(other,_b_.bool)){var bool_value=0; if(other.valueOf())bool_value=1; return self-bool_value} if(isinstance(other,_b_.complex)){return _b_.complex(self.valueOf()- other.real,other.imag)} if(hasattr(other,'__rsub__'))return getattr(other,'__rsub__')(self) 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('$IntDict.__'+$ops[$op]+'__ = '+opf)} var $comp_func=function(self,other){if(other.__class__===$B.LongInt.$dict)return $B.LongInt.$dict.__gt__($B.LongInt(self),other) if(isinstance(other,int))return self.valueOf()> other.valueOf() if(isinstance(other,_b_.float))return self.valueOf()> other.valueOf() if(isinstance(other,_b_.bool)){return self.valueOf()> _b_.bool.$dict.__hash__(other)} if(hasattr(other,'__int__')||hasattr(other,'__index__')){return $IntDict.__gt__(self,$B.$GetInt(other))} throw _b_.TypeError( "unorderable types: int() > "+$B.get_class(other).__name__+"()")} $comp_func +='' for(var $op in $B.$comps){eval("$IntDict.__"+$B.$comps[$op]+'__ = '+ $comp_func.replace(/>/gm,$op).replace(/__gt__/gm,'__'+$B.$comps[$op]+'__'))} $B.make_rmethods($IntDict) 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} var int=function(value,base){ if(value===undefined){return 0} if(typeof value=='number' && (base===undefined ||base==10)){return parseInt(value)} if(base!==undefined){if(!isinstance(value,[_b_.str,_b_.bytes,_b_.bytearray])){throw TypeError("int() can't convert non-string with explicit base")}} if(isinstance(value,_b_.complex)){throw TypeError("can't convert complex to int")} var $ns=$B.args('int',2,{x:null,base:null},['x','base'],arguments,{'base':10},'null','null') var value=$ns['x'] var base=$ns['base'] if(isinstance(value,_b_.float)&& base===10){if(value<$B.min_int ||value>$B.max_int){return $B.LongInt.$dict.$from_float(value)} else{return value>0 ? Math.floor(value): Math.ceil(value)}} if(!(base >=2 && base <=36)){ if(base !=0)throw _b_.ValueError("invalid base")} if(typeof value=='number'){if(base==10){if(value < $B.min_int ||value > $B.max_int)return $B.LongInt(value) return value}else if(value.toString().search('e')>-1){ throw _b_.OverflowError("can't convert to base "+base)}else{var res=parseInt(value,base) if(res < $B.min_int ||res > $B.max_int)return $B.LongInt(value,base) return res}} if(value===true)return Number(1) if(value===false)return Number(0) if(value.__class__===$B.LongInt.$dict){var z=parseInt(value.value) if(z>$B.min_int && z<$B.max_int){return z} else{return value}} base=$B.$GetInt(base) if(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('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} if(_pre=='0B' ||_pre=='0O' ||_pre=='0X'){_value=_value.substr(2)}} var _digits=$valid_digits(base) var _re=new RegExp('^[+-]?['+_digits+']+$','i') if(!_re.test(_value)){throw _b_.ValueError( "invalid literal for int() with base "+base +": '"+_b_.str(value)+"'")} if(base <=10 && !isFinite(value)){throw _b_.ValueError( "invalid literal for int() with base "+base +": '"+_b_.str(value)+"'")} var res=parseInt(_value,base) if(res < $B.min_int ||res > $B.max_int)return $B.LongInt(_value,base) return res} if(isinstance(value,[_b_.bytes,_b_.bytearray])){var _digits=$valid_digits(base) for(var i=0;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__:$LongIntDict,value:res,pos:true}} function check_shift(shift){ if(!isinstance(shift,LongInt)){throw TypeError("shift must be int, not '"+ $B.get_class(shift).__name__+"'")} if(!shift.pos){throw ValueError("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.lengthv2){return 1} else if(v1=0;i--){i1-- sv=parseInt(v1.charAt(i1)) x=(sv-carry-parseInt(v2.charAt(i))) if(x<0){res=(10+x)+res;carry=1} else{res=x+res;carry=0}} 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)} return{__class__:$LongIntDict,value:res,pos:true}} $LongIntDict.$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__:$LongIntDict,value: v,pos: value >=0}} $LongIntDict.__abs__=function(self){return{__class__:$LongIntDict,value: self.value,pos:true}} $LongIntDict.__add__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float(parseInt(self.value)+other.value)} if(typeof other=='number')other=LongInt(_b_.str(other)) 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__:$LongIntDict,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__:$LongIntDict,value:0,pos:true} break case -1: res=sub_pos(other.value,self.value) break} return intOrLong(res)}} $LongIntDict.__and__=function(self,other){if(typeof other=='number')other=LongInt(_b_.str(other)) var v1=$LongIntDict.__index__(self) var v2=$LongIntDict.__index__(other) if(v1.lengthother.value.length){return self.pos} else if(self.value.length=other.value : self.value <=other.value}} $LongIntDict.__gt__=function(self,other){return !$LongIntDict.__le__(self,other)} $LongIntDict.__index__=function(self){ var res='',pos=self.value.length,temp=self.value,d while(true){d=divmod_pos(temp,'2') res=d[1].value + res temp=d[0].value if(temp=='0'){break}} return intOrLong(res)} $LongIntDict.__invert__=function(self){return $LongIntDict.__sub__(LongInt('-1'),self)} $LongIntDict.__le__=function(self,other){if(typeof other=='number')other=LongInt(_b_.str(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}} $LongIntDict.__lt__=function(self,other){return !$LongIntDict.__ge__(self,other)} $LongIntDict.__lshift__=function(self,shift){var is_long=shift.__class__==$LongIntDict if(is_long){var shift_value=parseInt(shift.value) if(shift_value<0){throw _b_.ValueError('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=LongInt(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__:$LongIntDict,value:res,pos:self.pos})} $LongIntDict.__mod__=function(self,other){return intOrLong($LongIntDict.__divmod__(self,other)[1])} $LongIntDict.__mro__=[$LongIntDict,_b_.int.$dict,_b_.object.$dict] $LongIntDict.__mul__=function(self,other){switch(self){case Number.NEGATIVE_INFINITY: case Number.POSITIVE_INFINITY: var eq=_b_.getattr(other,'__eq__') if(eq(0)){return NaN} else if(_b_.getattr(other,'__gt__')(0)){return self} else{return -self}} if(isinstance(other,_b_.float)){return _b_.float(parseInt(self.value)*other)} if(typeof other=='number')other=LongInt(_b_.str(other)) var res=mul_pos(self.value,other.value) if(self.pos==other.pos){return intOrLong(res)} res.pos=false return intOrLong(res)} $LongIntDict.__neg__=function(obj){return{__class__:$LongIntDict,value:obj.value,pos:!obj.pos}} $LongIntDict.__or__=function(self,other){other=LongInt(other) var v1=$LongIntDict.__index__(self) var v2=$LongIntDict.__index__(other) if(v1.length0){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;i10){ for(var i=0;iMIN_SAFE_INTEGER && v2){throw _b_.TypeError("LongInt takes at most 2 arguments ("+ arguments.length+" given)")} if(base===undefined){base=10} else if(!isinstance(base,int)){throw TypeError("'"+$B.get_class(base).__name__+"' object cannot be interpreted as an integer")} if(base<0 ||base==1 ||base>36){throw ValueError("LongInt() base must be >= 2 and <= 36")} 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(1) return int(0)} if(typeof value=='number'){if(isSafeInteger(value)){value=value.toString()} else if(value.constructor==Number){console.log('big number',value);value=value.toString()} else{console.log('wrong value',value);throw ValueError("argument of long_int is not a safe integer")}}else if(value.__class__===$LongIntDict){return value} else if(isinstance(value,_b_.bool)){value=_b_.bool.$dict.__int__(value)+''} else if(typeof value!='string'){throw ValueError("argument of long_int must be a string, not "+ $B.get_class(value).__name__)} 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('LongInt argument is not a valid number: "'+value+'"')}else{value=value.substr(1)}} while(start=0)return '('+self.real+'+'+self.imag+'j)' return '('+self.real+'-'+(-self.imag)+'j)'} $ComplexDict.__sqrt__=function(self){if(self.imag==0)return complex(Math.sqrt(self.real)) var r=self.real,i=self.imag var _sqrt=Math.sqrt(r*r+i*i) var _a=Math.sqrt((r + sqrt)/2) var _b=Number.sign(i)* Math.sqrt((-r + sqrt)/2) return complex(_a,_b)} $ComplexDict.__truediv__=function(self,other){if(isinstance(other,complex)){if(other.real==0 && other.imag==0){throw ZeroDivisionError('division by zero')} var _num=self.real*other.real + self.imag*other.imag var _div=other.real*other.real + other.imag*other.imag var _num2=self.imag*other.real - self.real*other.imag return complex(_num/_div,_num2/_div)} if(isinstance(other,_b_.int)){if(!other.valueOf())throw ZeroDivisionError('division by zero') return $ComplexDict.__truediv__(self,complex(other.valueOf()))} if(isinstance(other,_b_.float)){if(!other.value)throw ZeroDivisionError('division by zero') return $ComplexDict.__truediv__(self,complex(other.value))} $UnsupportedOpType("//","complex",other.__class__)} var $op_func=function(self,other){throw _b_.TypeError("TypeError: unsupported operand type(s) for -: 'complex' and '" + $B.get_class(other).__name__+"'")} $op_func +='' var $ops={'&':'and','|':'ior','<<':'lshift','>>':'rshift','^':'xor'} for(var $op in $ops){eval('$ComplexDict.__'+$ops[$op]+'__ = '+$op_func.replace(/-/gm,$op))} $ComplexDict.__ior__=$ComplexDict.__or__ var $op_func=function(self,other){if(isinstance(other,complex))return complex(self.real-other.real,self.imag-other.imag) if(isinstance(other,_b_.int))return complex($B.sub(self.real,other.valueOf()),self.imag) if(isinstance(other,_b_.float))return complex(self.real - other.value,self.imag) if(isinstance(other,_b_.bool)){var bool_value=0; if(other.valueOf())bool_value=1; return complex(self.real - bool_value,self.imag)} throw _b_.TypeError("unsupported operand type(s) for -: "+self.__repr__()+ " and '"+$B.get_class(other).__name__+"'")} $ComplexDict.__sub__=$op_func $op_func +='' $op_func=$op_func.replace(/-/gm,'+').replace(/sub/gm,'add') eval('$ComplexDict.__add__ = '+$op_func) var $comp_func=function(self,other){throw _b_.TypeError("TypeError: unorderable types: complex() > " + $B.get_class(other).__name__ + "()")} $comp_func +='' for(var $op in $B.$comps){eval("$ComplexDict.__"+$B.$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))} $B.make_rmethods($ComplexDict) $ComplexDict.real=function(self){return new Number(self.real)} $ComplexDict.imag=function(self){return new Number(self.imag)} var complex_re=/^(\d*\.?\d*)([\+\-]?)(\d*\.?\d*)(j?)$/ var complex=function(real,imag){if(typeof real=='string'){if(imag!==undefined){throw _b_.TypeError("complex() can't take second arg if first is a string")} var parts=complex_re.exec(real) if(parts===null){throw _b_.ValueError("complex() arg is a malformed string")}else if(parts[1]=='.' ||parts[3]=='.'){throw _b_.ValueError("complex() arg is a malformed string")}else if(parts[4]=='j'){if(parts[2]==''){real=0;imag=parseFloat(parts[1])}else{real=parseFloat(parts[1]) imag=parts[3]=='' ? 1 : parseFloat(parts[3]) imag=parts[2]=='-' ? -imag : imag}}else{real=parseFloat(parts[1]) imag=0}} var res={__class__:$ComplexDict,real:real ||0,imag:imag ||0} res.__repr__=res.__str__=function(){if(real==0)return imag + 'j' return '('+real+'+'+imag+'j)'} return res} complex.$dict=$ComplexDict complex.__class__=$B.$factory $ComplexDict.$factory=complex $B.set_func_names($ComplexDict) _b_.complex=complex})(__BRYTHON__) ;(function($B){eval($B.InjectBuiltins()) var $ObjectDict=_b_.object.$dict,$N=_b_.None function $list(){ var args=[],pos=0 for(var i=0,_len_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]} return new $ListDict(args)} var $ListDict={__class__:$B.$type,__name__:'list',$native:true,__dir__:$ObjectDict.__dir__} $ListDict.__add__=function(self,other){var res=self.valueOf().concat(other.valueOf()) if(isinstance(self,tuple))res=tuple(res) return res} $ListDict.__contains__=function(self,item){var $=$B.args('__contains__',2,{self:null,item:null},['self','item'],arguments,{},null,null),self=$.self,item=$.item var _eq=getattr(item,'__eq__') var i=self.length while(i--){if(_eq(self[i]))return true} return false} $ListDict.__delitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg if(arg<0)pos=self.length+pos if(pos>=0 && pos0 ? 0 : self.length} var stop=arg.stop if(stop===None){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;istop;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(hasattr(arg,'__int__')||hasattr(arg,'__index__')){$ListDict.__delitem__(self,_b_.int(arg)) return $N} throw _b_.TypeError('list indices must be integer, not '+_b_.str(arg.__class__))} $ListDict.__eq__=function(self,other){if(isinstance(other,$B.get_class(self).$factory)){if(other.length==self.length){var i=self.length while(i--){if(!getattr(self[i],'__eq__')(other[i]))return false} return true}} return false} $ListDict.__getitem__=function(self,arg){var $=$B.args('__getitem__',2,{self:null,key:null},['self','key'],arguments,{},null,null),self=$.self,key=$.key if(isinstance(key,_b_.int)){var items=self.valueOf() var pos=key if(key<0)pos=items.length+pos if(pos>=0 && pos 0){if(stop <=start)return res; for(var i=start;i start)return res; for(var i=start;i>stop;i+=step){res[pos++]=items[i]} return res;}} if(hasattr(key,'__int__')||hasattr(key,'__index__')){return $ListDict.__getitem__(self,_b_.int(key))} throw _b_.TypeError('list indices must be integer, not '+ $B.get_class(key).__name__)} $ListDict.__ge__=function(self,other){if(!isinstance(other,[list,_b_.tuple])){throw _b_.TypeError("unorderable types: list() >= "+ $B.get_class(other).__name__+'()')} var i=0 while(i=other.length)return true if(getattr(self[i],'__eq__')(other[i])){i++} else return(getattr(self[i],"__ge__")(other[i]))} return other.length==self.length} $ListDict.__gt__=function(self,other){if(!isinstance(other,[list,_b_.tuple])){throw _b_.TypeError("unorderable types: list() > "+ $B.get_class(other).__name__+'()')} var i=0 while(i=other.length)return true if(getattr(self[i],'__eq__')(other[i])){i++} else return(getattr(self[i],'__gt__')(other[i]))} return false} $ListDict.__iadd__=function(){var $=$B.args('__iadd__',2,{self:null,x:null},['self','x'],arguments,{},null,null) var x=list(iter($.x)) for(var i=0;i < x.length;i++){$.self.push(x[i])} return $.self} $ListDict.__imul__=function(){var $=$B.args('__imul__',2,{self:null,x:null},['self','x'],arguments,{},null,null) var x=$B.$GetInt($.x),len=$.self.length,pos=len if(x==0){$ListDict.clear($.self);return $.self} for(var i=1;i < x;i++){for(j=0;j" var _r=[] for(var i=0;i=0 && posbegin){var pivot=begin+Math.floor(Math.random()*(end-begin)),len=array.length 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} $ListDict.sort=function(self){var $=$B.args('sort',1,{self:null},['self'],arguments,{},null,'kw') var func=null var reverse=false var kw_args=$.kw,keys=_b_.list(_b_.dict.$dict.keys(kw_args)) for(var i=0;i0){var args=[arguments[0].valueOf()] var pos=1 for(var i=1,_len_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]}} return $ListDict[attr].apply(null,args)}})($attr)}} $ListSubclassDict.__init__=function(self){var res=[],args=[res],pos=1 for(var i=1;i' requires string as left operand, not "+item.__class__)} var nbcar=item.length if(nbcar==0)return true if(self.length==0)return nbcar==0 for(var i=0,_len_i=self.length;i < _len_i;i++){if(self.substr(i,nbcar)==item)return true} return false} $StringDict.__delitem__=function(){throw _b_.TypeError("'str' object doesn't support item deletion")} $StringDict.__dir__=$ObjectDict.__dir__ $StringDict.__eq__=function(self,other){if(other===undefined){ return self===str} if(_b_.isinstance(other,_b_.str)){return other.valueOf()==self.valueOf()} return other===self.valueOf()} function preformat(self,fmt){if(fmt.empty){return _b_.str(self)} if(fmt.type && fmt.type!='s'){throw _b_.ValueError("Unknown format code '"+fmt.type+ "' for object of type 'str'")} return self} $StringDict.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec) fmt.align=fmt.align ||'<' return $B.format_width(preformat(self,fmt),fmt)} $StringDict.__getitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg if(arg<0)pos+=self.length if(pos>=0 && pos0){if(stop<=start)return '' for(var i=start;i=start)return '' for(var i=start;i>stop;i+=step)res +=self.charAt(i)} return res} if(isinstance(arg,bool))return self.__getitem__(_b_.int(arg)) throw _b_.TypeError('string indices must be integers')} $StringDict.__hash__=function(self){if(self===undefined){return $StringDict.__hashvalue__ ||$B.$py_next_hash-- } var hash=1; for(var i=0,_len_i=self.length;i < _len_i;i++){hash=(101*hash + self.charCodeAt(i))& 0xFFFFFFFF} return hash} $StringDict.__init__=function(self,arg){self.valueOf=function(){return arg} self.toString=function(){return arg} return _b_.None} var $str_iterator=$B.$iterator_class('str_iterator') $StringDict.__iter__=function(self){var items=self.split('') return $B.$iterator(items,$str_iterator)} $StringDict.__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.LongInt.$dict){s=$B.LongInt.$dict.to_base(val,10)}else{ s=val.toString()} var sign=s[0] 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)){val=modifier(val,precision,flags,upper) return val} 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(val),flags)} var num_format=function(val,flags){number_check(val) if(val.__class__===$B.LongInt.$dict){val=$B.LongInt.$dict.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].*)/ var leading_zeros=/\.(0*)/ var 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) var v=val.toString() var v_len=v.length var dot_idx=v.indexOf('.') if(dot_idx < 0){dot_idx=v_len} if(val < 1 && val > -1){var zeros=leading_zeros.exec(v) var 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 +=numzeros return format_padding(format_sign(val,flags)+ format_float_precision(val,upper,flags,function(val,precision){val=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.LongInt.$dict){ret=$B.LongInt.$dict.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.LongInt.$dict){ret=$B.LongInt.$dict.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)} var single_char_format=function(val,flags){if(isinstance(val,str)&& val.length==1)return val try{ val=_b_.int(val)}catch(err){throw _b_.TypeError('%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={'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"} $StringDict.__mod__=function(self,args){var length=self.length var pos=0 |0 var argpos=null if(args && _b_.isinstance(args,_b_.tuple)){argpos=0 |0} var ret='' var $get_kwarg_string=function(s){ ++pos var rslt=kwarg_key.exec(s.substring(newpos)) if(!rslt){throw _b_.ValueError("incomplete format key")} var key=rslt[1] newpos +=rslt[0].length try{ var self=_b_.getattr(args.__class__,'__getitem__')(args,key)}catch(err){if(err.name==="KeyError"){throw err} throw _b_.TypeError("format requires a mapping")} return get_string_value(s,self)} var $get_arg_string=function(s){ var self if(argpos===null){ self=args}else{ try{ self=args[argpos++]} catch(err){if(err.name==="IndexError"){throw _b_.TypeError("not enough arguments for format string")}else{ throw err}}} 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("incomplete format")} throw _b_.ValueError("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] var cls=self.__class__ if(!cls){if(typeof(self)==='string'){cls='str'}else{ cls=typeof(self)}}else{ cls=cls.__name__} throw _b_.TypeError("%" + try_char + " format: a number is required, not " + cls)}else{ throw err}}}while(true)} 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{ var tmp if(self[newpos]==='('){++newpos ret +=$get_kwarg_string(self)}else{ ret +=$get_arg_string(self)}}}else{ throw _b_.ValueError("incomplete format")} pos=newpos + 1}while(pos < length) return ret} $StringDict.__mro__=[$StringDict,$ObjectDict] $StringDict.__mul__=function(self,other){var $=$B.args('__mul__',2,{self:null,other:null},['self','other'],arguments,{},null,null) if(!isinstance(other,_b_.int)){throw _b_.TypeError( "Can't multiply sequence by non-int of type '"+ $B.get_class(other).__name__+"'")} $res='' for(var i=0;i" return self.toString()} $StringDict.toString=function(){return 'string!'} var $comp_func=function(self,other){if(typeof other !=="string"){throw _b_.TypeError( "unorderable types: 'str' > "+$B.get_class(other).__name__+"()")} return self > other} $comp_func +='' var $comps={'>':'gt','>=':'ge','<':'lt','<=':'le'} for(var $op in $comps){eval("$StringDict.__"+$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))} $B.make_rmethods($StringDict) var $notimplemented=function(self,other){throw NotImplementedError("OPERATOR not implemented for class str")} $StringDict.capitalize=function(self){if(self.length==0)return '' return self.charAt(0).toUpperCase()+self.substr(1).toLowerCase()} $StringDict.casefold=function(self){throw _b_.NotImplementedError("function casefold not implemented yet");} $StringDict.center=function(self,width,fillchar){var $=$B.args("center",3,{self:null,width:null,fillchar:null},['self','width','fillchar'],arguments,{fillchar:' '},null,null) if($.width<=self.length)return self var pad=parseInt(($.width-self.length)/2) var res=$.fillchar.repeat(pad) res +=self + res if(res.length<$.width){res +=$.fillchar} return res} $StringDict.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( "Can't convert '"+$B.get_class($.sub).__name__+"' object to str implicitly")} var substr=$.self if($.start!==null){var _slice if($.stop!==null){_slice=_b_.slice($.start,$.stop)} else{_slice=_b_.slice($.start,$.self.length)} substr=$StringDict.__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=0){n++;pos+=$.sub.length}else break;} return n} $StringDict.encode=function(self,encoding){if(encoding===undefined)encoding='utf-8' 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' 0){res +=' ';col++} break case '\r': case '\n': res +=car col=0 break default: res +=car col++ break} pos++} return res} $StringDict.find=function(){ var $=$B.args("$StringDict.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( "slice indices must be integers or None or have an __index__ method")} var s=$.self.substring($.start,$.end) 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} function parse_format(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(conv.length!==1 ||'ras'.search(conv)==-1){throw _b_.ValueError('wrong conversion flag '+conv)}} 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||''}} $StringDict.format=function(self){var $=$B.args('format',1,{self:null},['self'],arguments,{},'args','kw') var pos=0,_len=self.length,car,text='',parts=[],rank=0,defaults={} 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=parse_format(fmt_string) if(!fmt_obj.name){fmt_obj.name=rank+'' rank++} if(fmt_obj.spec!==undefined){ function replace_nested(name,key){if(/\d+/.exec(key)){ return _b_.tuple.$dict.__getitem__($.args,parseInt(key))}else{ return _b_.dict.$dict.__getitem__($.kw,key)}} fmt_obj.spec=fmt_obj.spec.replace(/\{(.+?)\}/g,replace_nested)} parts.push(fmt_obj) text='' break}}else{end++}} if(nb>0){throw ValueError("wrong format "+self)} pos=end}else{text +=car;pos++}} if(text){parts.push(text)} var res='',fmt for(var i=0;i-1){ var pos=parseInt(fmt.name),value=_b_.tuple.$dict.__getitem__($.args,pos)}else{ var value=_b_.dict.$dict.__getitem__($.kw,fmt.name)} for(var j=0;j-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(value)} res +=_b_.getattr(value,'__format__')(fmt.spec)} return res} $StringDict.format_map=function(self){throw NotImplementedError("function format_map not implemented yet");} $StringDict.index=function(self){ var res=$StringDict.find.apply(null,arguments) if(res===-1)throw _b_.ValueError("substring not found") return res} $StringDict.isalnum=function(){var $=$B.args('isalnum',1,{self:null},['self'],arguments,{},null,null) return /^[a-z0-9]+$/i.test($.self)} $StringDict.isalpha=function(self){var $=$B.args('isalpha',1,{self:null},['self'],arguments,{},null,null) return /^[a-z]+$/i.test($.self)} $StringDict.isdecimal=function(){var $=$B.args('isdecimal',1,{self:null},['self'],arguments,{},null,null) return /^[0-9]+$/.test($.self)} $StringDict.isdigit=function(){var $=$B.args('isdigit',1,{self:null},['self'],arguments,{},null,null) return /^[0-9]+$/.test($.self)} $StringDict.isidentifier=function(){var $=$B.args('isidentifier',1,{self:null},['self'],arguments,{},null,null) if($.self.search(/\$/)>-1){return false} var last=$.self.charAt($.self.length-1) if(' \n;'.search(last)>-1){return false} var dummy={} try{eval("dummy."+$.self);return true} catch(err){return false}} $StringDict.islower=function(){var $=$B.args('islower',1,{self:null},['self'],arguments,{},null,null) return $.self==$.self.toLowerCase()&& $.self.search(/^\s*$/)==-1} $StringDict.isnumeric=function(){var $=$B.args('isnumeric',1,{self:null},['self'],arguments,{},null,null) return /^[0-9]+$/.test($.self)} $StringDict.isprintable=function(){var $=$B.args('isprintable',1,{self:null},['self'],arguments,{},null,null) return !/[^ -~]/.test($.self)} $StringDict.isspace=function(){var $=$B.args('isspace',1,{self:null},['self'],arguments,{},null,null) return /^\s+$/i.test($.self)} $StringDict.istitle=function(){var $=$B.args('istitle',1,{self:null},['self'],arguments,{},null,null) if($.self.search(/^\s*$/)>-1){return false} function get_case(char){if(char.toLowerCase()==char.toUpperCase()){return false} else if(char==char.toLowerCase()){return 'lower'} else{return 'upper'}} var pos=0,char,previous=false while(pos<$.self.length){char=$.self.charAt(pos) if(previous===undefined){previous=get_case(char)} else{_case=get_case(char) if(_case=='upper' && previous){return false} else if(_case=='lower' && !previous){return false} previous=_case} pos++} return true} $StringDict.isupper=function(){var $=$B.args('isupper',1,{self:null},['self'],arguments,{},null,null) return $.self==$.self.toUpperCase()&& $.self.search(/^\s*$/)==-1} $StringDict.join=function(){var $=$B.args('join',2,{self:null,iterable:null},['self','iterable'],arguments,{},null,null) var iterable=_b_.iter($.iterable) var res=[],count=0 while(1){try{var obj2=_b_.next(iterable) if(!isinstance(obj2,str)){throw _b_.TypeError( "sequence item "+count+": expected str instance, "+$B.get_class(obj2).__name__+" found")} res.push(obj2)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} else{throw err}}} return res.join($.self)} $StringDict.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)} $StringDict.lower=function(){var $=$B.args('lower',1,{self:null},['self'],arguments,{},null,null) return $.self.toLowerCase()} $StringDict.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.replace(/^\s+/,'')} return $.self.replace(new RegExp("^["+$.chars+"]*"),"")} $StringDict.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_.dict() for(var i=0;i < 256;i++)_t.$numeric_dict[i]=i if($.y===null && $.z===null){ if(!_b_.isinstance($.x,_b_.dict)){throw _b_.TypeError('maketrans only argument must be a dict')} var items=_b_.list(_b_.dict.$dict.items($.x)) for(var i=0,len=items.length;i-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=$StringDict.split(self,old,count)} var res=self,pos=-1 if(old.length==0){var res=_new for(var i=0;i 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;} $StringDict.rfind=function(self){ 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} $StringDict.rindex=function(){ var res=$StringDict.rfind.apply(null,arguments) if(res==-1){throw _b_.ValueError("substring not found")} return res} $StringDict.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} $StringDict.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=$StringDict.partition(self,sep).reverse() for(var i=0;i-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='',pos=0,seplen=sep.length if(maxsplit==0){return[self]} while(pos-1 && res.length>=maxsplit){res.push(self.substr(pos)) return res} s=''}else{s +=self.charAt(pos) pos++}} res.push(s) return res}} $StringDict.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($.keepends) if(keepends){var res=[],start=pos,pos=0,x,self=$.self while(pos1){console.log(err)} console.log('Warning - no method __str__ or __repr__, default to toString',arg) return arg.toString()}}} str.__class__=$B.$factory str.$dict=$StringDict $StringDict.$factory=str $StringDict.__new__=function(cls){if(cls===undefined){throw _b_.TypeError('str.__new__(): not enough arguments')} return{__class__:cls.$dict}} $B.set_func_names($StringDict) var $StringSubclassDict={__class__:$B.$type,__name__:'str'} for(var $attr in $StringDict){if(typeof $StringDict[$attr]=='function'){$StringSubclassDict[$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_i=arguments.length;i < _len_i;i++){args[pos++]=arguments[i]}} return $StringDict[attr].apply(null,args)}})($attr)}} $StringSubclassDict.__mro__=[$StringSubclassDict,$ObjectDict] $B.$StringSubclassFactory={__class__:$B.$factory,$dict:$StringSubclassDict} _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' 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(car==','){this.comma=true;pos++;car=spec.charAt(pos)} if(car=='.'){if(digits.indexOf(spec.charAt(pos+1))==-1){throw _b_.ValueError("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("Invalid format specifier")}} this.toString=function(){return(this.fill===undefined ? '' : _b_.str(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': 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 '^': left=parseInt(missing/2) return fill.repeat(left)+s+fill.repeat(missing-left)}} return s}})(__BRYTHON__) ;(function($B){eval($B.InjectBuiltins()) var $ObjectDict=_b_.object.$dict,str_hash=_b_.str.$dict.__hash__,$N=_b_.None function $DictClass($keys,$values){this.iter=null this.__class__=$DictDict $DictDict.clear(this) var setitem=$DictDict.__setitem__ var i=$keys.length while(i--)setitem($keys[i],$values[i])} var $DictDict={__class__:$B.$type,__name__ : 'dict',$native:true,__dir__:$ObjectDict.__dir__} var $key_iterator=function(d){this.d=d this.current=0 this.iter=new $item_generator(d)} $key_iterator.prototype.length=function(){return this.iter.length } $key_iterator.prototype.next=function(){return this.iter.next()[0]} var $value_iterator=function(d){this.d=d this.current=0 this.iter=new $item_generator(d)} $value_iterator.prototype.length=function(){return this.iter.length } $value_iterator.prototype.next=function(){return this.iter.next()[1]} var $item_generator=function(d){this.i=0 if(d.$jsobj){this.items=[] for(var attr in d.$jsobj){if(attr.charAt(0)!='$'){this.items.push([attr,d.$jsobj[attr]])}} this.length=this.items.length; return} var items=[] var pos=0 for(var k in d.$numeric_dict){items[pos++]=[parseFloat(k),d.$numeric_dict[k]]} for(var k in d.$string_dict){items[pos++]=[k,d.$string_dict[k]]} for(var k in d.$object_dict){items[pos++]=d.$object_dict[k]} this.items=items this.length=items.length} $item_generator.prototype.next=function(){if(this.i < this.items.length){return this.items[this.i++]} throw _b_.StopIteration("StopIteration")} $item_generator.prototype.as_list=function(){return this.items} var $item_iterator=function(d){this.d=d this.current=0 this.iter=new $item_generator(d)} $item_iterator.prototype.length=function(){return this.iter.items.length } $item_iterator.prototype.next=function(){return _b_.tuple(this.iter.next())} var $copy_dict=function(left,right){var _l=new $item_generator(right).as_list() var si=$DictDict.__setitem__ var i=_l.length while(i--)si(left,_l[i][0],_l[i][1])} $iterator_wrapper=function(items,klass){var res={__class__:klass,__iter__:function(){items.iter.i=0;return res},__len__:function(){return items.length()},__next__:function(){return items.next()},__repr__:function(){return klass.__name__+'('+ new $item_generator(items).as_list().join(',')+ ')'},} res.__str__=res.toString=res.__repr__ return res} $DictDict.__bool__=function(self){var $=$B.args('__bool__',1,{self:null},['self'],arguments,{},null,null) return $DictDict.__len__(self)> 0} $DictDict.__contains__=function(){var $=$B.args('__contains__',2,{self:null,item:null},['self','item'],arguments,{},null,null),self=$.self,item=$.item if(self.$jsobj)return self.$jsobj[item]!==undefined switch(typeof item){case 'string': return self.$string_dict[item]!==undefined case 'number': return self.$numeric_dict[item]!==undefined} var _key=hash(item) if(self.$str_hash[_key]!==undefined && _b_.getattr(item,'__eq__')(self.$str_hash[_key])){return true} if(self.$numeric_dict[_key]!==undefined && _b_.getattr(item,'__eq__')(_key)){return true} if(self.$object_dict[_key]!==undefined){ var _eq=getattr(item,'__eq__') if(_eq(self.$object_dict[_key][0])){return true}} return false} $DictDict.__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 KeyError(arg)} delete self.$jsobj[arg] return $N} switch(typeof arg){case 'string': if(self.$string_dict[arg]===undefined)throw KeyError(_b_.str(arg)) delete self.$string_dict[arg] delete self.$str_hash[str_hash(arg)] return $N case 'number': if(self.$numeric_dict[arg]===undefined)throw KeyError(_b_.str(arg)) delete self.$numeric_dict[arg] return $N} var _key=hash(arg) if(self.$object_dict[_key]!==undefined){delete self.$object_dict[_key]} if(self.$jsobj)delete self.$jsobj[arg] return $N} $DictDict.__eq__=function(){var $=$B.args('__eq__',2,{self:null,other:null},['self','other'],arguments,{},null,null),self=$.self,other=$.other if(!isinstance(other,dict))return false if($DictDict.__len__(self)!=$DictDict.__len__(other)){return false} if((self.$numeric_dict.length!=other.$numeric_dict.length)|| (self.$string_dict.length!=other.$string_dict.length)|| (self.$object_dict.length!=other.$object_dict.length)){return false} for(var k in self.$numeric_dict){if(!_b_.getattr(other.$numeric_dict[k],'__eq__')(self.$numeric_dict[k])){return false}} for(var k in self.$string_dict){if(!_b_.getattr(other.$string_dict[k],'__eq__')(self.$string_dict[k])){return false}} for(var k in self.$object_dict){if(!_b_.getattr(other.$object_dict[k][1],'__eq__')(self.$object_dict[k][1])){return false}} return true} $DictDict.__getitem__=function(){var $=$B.args('__getitem__',2,{self:null,arg:null},['self','arg'],arguments,{},null,null),self=$.self,arg=$.arg if(self.$jsobj){if(self.$jsobj[arg]===undefined){return None} return self.$jsobj[arg]} switch(typeof arg){case 'string': if(self.$string_dict[arg]!==undefined)return self.$string_dict[arg] break case 'number': if(self.$numeric_dict[arg]!==undefined)return self.$numeric_dict[arg]} var _key=hash(arg) var sk=self.$str_hash[_key] if(sk!==undefined && _b_.getattr(arg,'__eq__')(sk)){return self.$string_dict[sk]} if(self.$numeric_dict[_key]!==undefined && _b_.getattr(arg,'__eq__')(_key)){return self.$numeric_dict[_key]} if(self.$object_dict[_key]!==undefined){return self.$object_dict[_key][1]} if(hasattr(self,'__missing__'))return getattr(self,'__missing__')(arg) throw KeyError(_b_.str(arg))} $DictDict.__hash__=function(self){if(self===undefined){return $DictDict.__hashvalue__ ||$B.$py_next_hash-- } throw _b_.TypeError("unhashable type: 'dict'");} $DictDict.__init__=function(self){var args=[],pos=0 for(var i=1;i0)si(self,obj[i-1][0],obj[i-1][1]) return $N}else if(isinstance(obj,dict)){$copy_dict(self,obj) return $N} if(obj.__class__===$B.JSObject.$dict){ var si=$DictDict.__setitem__ for(var attr in obj.js)si(self,attr,obj.js[attr]) self.$jsobj=obj.js return $N}} var $ns=$B.args('dict',0,{},[],args,{},'args','kw') var args=$ns['args'] var kw=$ns['kw'] if(args.length>0){if(isinstance(args[0],dict)){$B.$copy_dict(self,args[0]) return $N} if(Array.isArray(args[0])){var src=args[0] var i=src.length -1 var si=$DictDict.__setitem__ while(i-->0)si(self,src[i-1][0],src[i-1][1])}else{var iterable=iter(args[0]) while(1){try{var elt=next(iterable) var key=getattr(elt,'__getitem__')(0) var value=getattr(elt,'__getitem__')(1) $DictDict.__setitem__(self,key,value)}catch(err){if(err.__name__==='StopIteration'){break} throw err}}}} if($DictDict.__len__(kw)> 0)$copy_dict(self,kw) return $N} var $dict_iterator=$B.$iterator_class('dict iterator') $DictDict.__iter__=function(self){return $DictDict.keys(self)} $DictDict.__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 k in self.$object_dict)_count+=self.$object_dict[k].length return _count} $DictDict.__mro__=[$DictDict,$ObjectDict] $DictDict.__ne__=function(self,other){return !$DictDict.__eq__(self,other)} $DictDict.__next__=function(self){if(self.$iter==null){self.$iter=new $item_generator(self)} try{ return self.$iter.next()}catch(err){if(err.__name__ !=="StopIteration"){throw err }}} $DictDict.__repr__=function(self){if(self===undefined)return "" if(self.$jsobj){ var res=[] for(var attr in self.$jsobj){if(attr.charAt(0)=='$' ||attr=='__class__'){continue} else{try{res.push("'"+attr+"': "+_b_.repr(self.$jsobj[attr]))}catch(err){}}} return '{'+res.join(', ')+'}'} var _objs=[self] var res=[],pos=0 var items=new $item_generator(self).as_list() for(var i=0;i < items.length;i++){var itm=items[i] if(itm[1]===self){res[pos++]=repr(itm[0])+': {...}'} else{res[pos++]=repr(itm[0])+': '+repr(itm[1])}} return '{'+ res.join(', ')+'}'} $DictDict.__setitem__=function(self,key,value){var $=$B.args('__setitem__',3,{self:null,key:null,value:null},['self','key','value'],arguments,{},null,null),self=$.self,key=$.key,value=$.value if(self.$jsobj){self.$jsobj[key]=value;return} switch(typeof key){case 'string': self.$string_dict[key]=value self.$str_hash[str_hash(key)]=key return $N case 'number': self.$numeric_dict[key]=value return $N} var _key=hash(key) var _eq=getattr(key,'__eq__') if(self.$numeric_dict[_key]!==undefined && _eq(_key)){self.$numeric_dict[_key]=value return $N} var sk=self.$str_hash[_key] if(sk!==undefined && _eq(sk)){self.$string_dict[sk]=value return $N} self.$object_dict[_key]=[key,value] return $N} $DictDict.__str__=$DictDict.__repr__ $B.make_rmethods($DictDict) $DictDict.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)self.$jsobj={} return $N} $DictDict.copy=function(self){ var $=$B.args('copy',1,{self:null},['self'],arguments,{},null,null),self=$.self,res=_b_.dict() $copy_dict(res,self) return res} $DictDict.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 res=dict() var keys_iter=_b_.iter(keys) while(1){try{var key=_b_.next(keys_iter) $DictDict.__setitem__(res,key,value)}catch(err){if($B.is_exc(err,[_b_.StopIteration])){return res} throw err}}} $DictDict.fromkeys.$type='classmethod' $DictDict.get=function(){var $=$B.args('get',3,{self:null,key:null,_default:null},['self','key','_default'],arguments,{_default:$N},null,null) try{return $DictDict.__getitem__($.self,$.key)} catch(err){if(_b_.isinstance(err,_b_.KeyError)){return $._default} else{throw err}}} var $dict_itemsDict=$B.$iterator_class('dict_items') $DictDict.items=function(self){if(arguments.length > 1){var _len=arguments.length - 1 var _msg="items() takes no arguments ("+_len+" given)" throw _b_.TypeError(_msg)} return $iterator_wrapper(new $item_iterator(self),$dict_itemsDict)} var $dict_keysDict=$B.$iterator_class('dict_keys') $DictDict.keys=function(self){if(arguments.length > 1){var _len=arguments.length - 1 var _msg="keys() takes no arguments ("+_len+" given)" throw _b_.TypeError(_msg)} return $iterator_wrapper(new $key_iterator(self),$dict_keysDict)} $DictDict.pop=function(){var $=$B.args('pop',3,{self:null,key: null,_default:null},['self','key','_default'],arguments,{_default:$N},null,null),self=$.self,key=$.key,_default=$._default try{var res=$DictDict.__getitem__(self,key) $DictDict.__delitem__(self,key) return res}catch(err){if(err.__name__==='KeyError'){if(_default!==undefined)return _default throw err} throw err}} $DictDict.popitem=function(self){try{var itm=new $item_iterator(self).next() $DictDict.__delitem__(self,itm[0]) return _b_.tuple(itm)}catch(err){if(err.__name__=="StopIteration"){throw KeyError("'popitem(): dictionary is empty'")}}} $DictDict.setdefault=function(){var $=$B.args('setdefault',3,{self:null,key: null,_default:null},['self','key','_default'],arguments,{},null,null),self=$.self,key=$.key,_default=$._default try{return $DictDict.__getitem__(self,key)} catch(err){if(_default===undefined)_default=None $DictDict.__setitem__(self,key,_default) return _default}} $DictDict.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(isinstance(o,dict)){$copy_dict(self,o)}else if(hasattr(o,'__getitem__')&& hasattr(o,'keys')){var _keys=_b_.list(getattr(o,'keys')()) var si=$DictDict.__setitem__ var i=_keys.length while(i--){ var _value=getattr(o,'__getitem__')(_keys[i]) si(self,_keys[i],_value)}}} $copy_dict(self,kw) return $N} var $dict_valuesDict=$B.$iterator_class('dict_values') $DictDict.values=function(self){if(arguments.length > 1){var _len=arguments.length - 1 var _msg="values() takes no arguments ("+_len+" given)" throw _b_.TypeError(_msg)} return $iterator_wrapper(new $value_iterator(self),$dict_valuesDict)} function dict(args,second){if(second===undefined && Array.isArray(args)){ var res={__class__:$DictDict,$numeric_dict :{},$object_dict :{},$string_dict :{},$str_hash:{},length: 0} var i=-1,stop=args.length-1 var si=$DictDict.__setitem__ while(i++=0;i--){if(isNaN(self.$items[i])){return true}} return false}else{return self.$items.indexOf(item)>-1}} if(self.$str &&(typeof item=='string')){return self.$items.indexOf(item)>-1} if(! _b_.isinstance(item,set)){_b_.hash(item)} var eq_func=_b_.getattr(item,'__eq__') for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(_.getattr(self.$items[i],'__eq__')(item))return true} return false} $SetDict.__eq__=function(self,other){ if(other===undefined)return self===set if(_.isinstance(other,_.set)){if(other.$items.length==self.$items.length){for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if($SetDict.__contains__(self,other.$items[i])===false)return false} return true} return false} if(_.isinstance(other,[_.list])){if(_.len(other)!=self.$items.length)return false for(var i=0,_len_i=_.len(other);i < _len_i;i++){var _value=getattr(other,'__getitem__')(i) if($SetDict.__contains__(self,_value)===false)return false} return true} if(_.hasattr(other,'__iter__')){ if(_.len(other)!=self.$items.length)return false var _it=_.iter(other) while(1){try{ var e=_.next(_it) if(!$SetDict.__contains__(self,e))return false}catch(err){if(err.__name__=="StopIteration"){break} throw err}} return true} return false} $SetDict.__format__=function(self,format_string){return $SetDict.__str__(self)} $SetDict.__ge__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return !$SetDict.__lt__(self,other)}else{return _b_.object.$dict.__ge__(self,other)}} $SetDict.__gt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return !$SetDict.__le__(self,other)}else{return _b_.object.$dict.__gt__(self,other)}} $SetDict.__init__=function(self){var $=$B.args('__init__',2,{self:null,iterable:null},['self','iterable'],arguments,{iterable:[]},null,null),self=$.self,iterable=$.iterable if(_.isinstance(iterable,[set,frozenset])){self.$items=iterable.$items return $N} var it=_b_.iter(iterable),obj={$items:[],$str:true,$num:true} while(1){try{var item=_.next(it) $SetDict.add(obj,item)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} throw err}} self.$items=obj.$items return $N} var $set_iterator=$B.$iterator_class('set iterator') $SetDict.__iter__=function(self){var it=$B.$iterator(self.$items,$set_iterator),len=self.$items.length,nxt=it.__next__ it.__next__=function(){if(it.__len__()!=len){throw _b_.RuntimeError("size changed during iteration")} return nxt()} return it} $SetDict.__le__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){var cfunc=_.getattr(other,'__contains__') for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(!cfunc(self.$items[i]))return false} return true}else{return _b_.object.$dict.__le__(self,other)}} $SetDict.__len__=function(self){return self.$items.length} $SetDict.__lt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return($SetDict.__le__(self,other)&& $SetDict.__len__(self)<_.getattr(other,'__len__')())}else{return _b_.object.$dict['__lt__'](self,other)}} $SetDict.__mro__=[$SetDict,_.object.$dict] $SetDict.__ne__=function(self,other){return !$SetDict.__eq__(self,other)} $SetDict.__or__=function(self,other,accept_iter){ var res=clone(self) var func=_.getattr(_.iter(other),'__next__') while(1){try{$SetDict.add(res,func())} catch(err){if(_.isinstance(err,_.StopIteration)){break} throw err}} res.__class__=self.__class__ return res} $SetDict.__str__=$SetDict.toString=$SetDict.__repr__=function(self){frozen=self.$real==='frozen' self.$cycle=self.$cycle===undefined ? 0 : self.$cycle+1 if(self.$items.length===0){if(frozen)return 'frozenset()' return 'set()'} var klass_name=$B.get_class(self).__name__,head=klass_name+'({',tail='})' if(head=='set('){head='{';tail='}'} var res=[] if(self.$cycle){self.$cycle-- return klass_name+'(...)'} for(var i=0,_len_i=self.$items.length;i < _len_i;i++){var r=_.repr(self.$items[i]) if(r===self||r===self.$items[i]){res.push('{...}')} else{res.push(r)}} res=res.join(', ') self.$cycle-- return head+res+tail} $SetDict.__sub__=function(self,other,accept_iter){ $test(accept_iter,other,'-') var res=create_type(self) var cfunc=_.getattr(other,'__contains__') for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(!cfunc(self.$items[i])){res.$items.push(self.$items[i])}} return res} $SetDict.__xor__=function(self,other,accept_iter){ $test(accept_iter,other,'^') var res=create_type(self) var cfunc=_.getattr(other,'__contains__') for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(!cfunc(self.$items[i])){$SetDict.add(res,self.$items[i])}} for(var i=0,_len_i=other.$items.length;i < _len_i;i++){if(!$SetDict.__contains__(self,other.$items[i])){$SetDict.add(res,other.$items[i])}} return res} function $test(accept_iter,other,op){if(accept_iter===undefined && !_.isinstance(other,[set,frozenset])){throw _b_.TypeError("unsupported operand type(s) for "+op+ ": 'set' and '"+$B.get_class(other).__name__+"'")}} $B.make_rmethods($SetDict) $SetDict.add=function(){var $=$B.args('add',2,{self:null,item:null},['self','item'],arguments,{},null,null),self=$.self,item=$.item _b_.hash(item) if(self.$str && !(typeof item=='string')){self.$str=false} if(self.$num && !(typeof item=='number')){self.$num=false} if(self.$num||self.$str){if(self.$items.indexOf(item)==-1){self.$items.push(item)} return $N} var cfunc=_.getattr(item,'__eq__') for(var i=0,_len_i=self.$items.length;i < _len_i;i++){if(cfunc(self.$items[i]))return} self.$items.push(item) return $N} $SetDict.clear=function(){var $=$B.args('clear',1,{self:null},['self'],arguments,{},null,null) $.self.$items=[]; return $N} $SetDict.copy=function(){var $=$B.args('copy',1,{self:null},['self'],arguments,{},null,null) if(_b_.isinstance($.self,frozenset)){return $.self} var res=set() for(var i=0,_len_i=$.self.$items.length;i < _len_i;i++){res.$items[i]=$.self.$items[i]} return res} $SetDict.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($.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(getattr(self.$items[j],'__eq__')(item)){self.$items.splice(j,1)}}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} throw err}}} return $N} $SetDict.discard=function(){var $=$B.args('discard',2,{self:null,item:null},['self','item'],arguments,{},null,null) try{$SetDict.remove($.self,$.item)} catch(err){if(!_b_.isinstance(err,[_b_.KeyError,_b_.LookupError])){throw err}} return $N} $SetDict.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($.args[i]) for(var j=0;j -1){remove.push(_index)}else{add.push(item)}}else{ var found=false for(var j=0;!found && j < self.$items.length;j++){if(_b_.getattr(self.$items[j],'__eq__')(item)){remove.push(j) found=true}} if(!found){add.push(item)}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} throw err}} remove.sort().reverse() for(var i=0;i 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 $DOMEventDict={__class__:$B.$type,__name__:'DOMEvent'} $DOMEventDict.__mro__=[$DOMEventDict,$ObjectDict] $DOMEventDict.__getattribute__=function(self,attr){switch(attr){case 'x': return $mouseCoords(self).x case 'y': return $mouseCoords(self).y case 'data': if(self.dataTransfer!==undefined)return $Clipboard(self.dataTransfer) return self['data'] case 'target': if(self.target===undefined)return DOMNode(self.target) return DOMNode(self.target) case 'char': return String.fromCharCode(self.which)} var res=self[attr] if(res!==undefined){if(typeof res=='function'){var func=function(){return res.apply(self,arguments)} func.$infos={__name__:res.toString().substr(9,res.toString().search('{'))} return func} return $B.$JS2Py(res)} throw _b_.AttributeError("object DOMEvent has no attribute '"+attr+"'")} function $DOMEvent(ev){ev.__class__=$DOMEventDict if(ev.preventDefault===undefined){ev.preventDefault=function(){ev.returnValue=false}} if(ev.stopPropagation===undefined){ev.stopPropagation=function(){ev.cancelBubble=true}} ev.__repr__=function(){return ''} ev.toString=ev.__str__=ev.__repr__ return ev} $B.DOMEvent=function(evt_name){ return $DOMEvent(new Event(evt_name))} $B.DOMEvent.__class__=$B.$factory $B.DOMEvent.$dict=$DOMEventDict $DOMEventDict.$factory=$B.DOMEvent var $ClipboardDict={__class__:$B.$type,__name__:'Clipboard'} $ClipboardDict.__getitem__=function(self,name){return self.data.getData(name)} $ClipboardDict.__mro__=[$ClipboardDict,$ObjectDict] $ClipboardDict.__setitem__=function(self,name,value){self.data.setData(name,value)} function $Clipboard(data){ return{ data : data,__class__ : $ClipboardDict,}} 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"} dom.FileReader.__class__=$B.$type dom.FileReader.__str__=function(){return ""} function $Options(parent){return{ __class__:$OptionsDict,parent:parent}} var $OptionsDict={__class__:$B.$type,__name__:'Options'} $OptionsDict.__delitem__=function(self,arg){self.parent.options.remove(arg.elt)} $OptionsDict.__getitem__=function(self,key){return DOMNode(self.parent.options[key])} $OptionsDict.__len__=function(self){return self.parent.options.length} $OptionsDict.__mro__=[$OptionsDict,$ObjectDict] $OptionsDict.__setattr__=function(self,attr,value){self.parent.options[attr]=value} $OptionsDict.__setitem__=function(self,attr,value){self.parent.options[attr]=$B.$JS2Py(value)} $OptionsDict.__str__=function(self){return ""} $OptionsDict.append=function(self,element){self.parent.options.add(element.elt)} $OptionsDict.insert=function(self,index,element){if(index===undefined){self.parent.options.add(element.elt)} else{self.parent.options.add(element.elt,index)}} $OptionsDict.item=function(self,index){return self.parent.options.item(index)} $OptionsDict.namedItem=function(self,name){return self.parent.options.namedItem(name)} $OptionsDict.remove=function(self,arg){self.parent.options.remove(arg.elt)} var $StyleDict={__class__:$B.$type,__name__:'CSSProperty'} $StyleDict.__mro__=[$StyleDict,$ObjectDict] $StyleDict.__getattr__=function(self,attr){return $ObjectDict.__getattribute__(self.js,attr)} $StyleDict.__setattr__=function(self,attr,value){if(attr.toLowerCase()==='float'){self.js.cssFloat=value self.js.styleFloat=value}else{switch(attr){case 'top': case 'left': case 'height': case 'width': case 'borderWidth': if(isinstance(value,_b_.int))value=value+'px'} self.js[attr]=value}} function $Style(style){ return{__class__:$StyleDict,js:style}} $Style.__class__=$B.$factory $Style.$dict=$StyleDict $StyleDict.$factory=$Style var DOMNode=$B.DOMNode=function(elt){ var res={} res.$dict={} res.elt=elt if(elt['$brython_id']===undefined||elt.nodeType===9){ elt.$brython_id='DOM-'+$B.UUID() res.__repr__=res.__str__=res.toString=function(){var res=""}} res.__class__=DOMNodeDict return res} DOMNodeDict={__class__ : $B.$type,__name__ : 'DOMNode'} DOMNode.__class__=$B.$factory DOMNode.$dict=DOMNodeDict DOMNodeDict.$factory=DOMNode DOMNodeDict.__mro__=[DOMNodeDict,_b_.object.$dict] DOMNodeDict.__add__=function(self,other){ var res=$TagSum() res.children=[self],pos=1 if(isinstance(other,$TagSum)){res.children=res.children.concat(other.children)}else if(isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.list,_b_.dict,_b_.set,_b_.tuple])){res.children[pos++]=DOMNode(document.createTextNode(_b_.str(other)))}else if(isinstance(other,DOMNode)){res.children[pos++]=other}else{ try{res.children=res.children.concat(_b_.list(other))} catch(err){throw _b_.TypeError("can't add '"+ $B.get_class(other).__name__+"' object to DOMNode instance")}} return res} DOMNodeDict.__bool__=function(self){return true} DOMNodeDict.__class__=$B.$type DOMNodeDict.__contains__=function(self,key){try{DOMNodeDict.__getitem__(self,key);return True} catch(err){return False}} DOMNodeDict.__del__=function(self){ if(!self.elt.parentNode){throw _b_.ValueError("can't delete "+str(elt))} self.elt.parentNode.removeChild(self.elt)} DOMNodeDict.__delitem__=function(self,key){if(self.elt.nodeType===9){ var res=self.elt.getElementById(key) if(res){res.parentNode.removeChild(res)} else{throw KeyError(key)}}else{ console.log('delitem') self.elt.parentNode.removeChild(self.elt)}} DOMNodeDict.__eq__=function(self,other){return self.elt==other.elt} DOMNodeDict.__getattribute__=function(self,attr){switch(attr){case 'class_name': case 'children': case 'html': case 'id': case 'parent': case 'query': case 'text': case 'value': return DOMNodeDict[attr](self) case 'height': case 'left': case 'top': case 'width': if(self.elt instanceof SVGElement){return self.elt.getAttributeNS(null,attr)} return DOMNodeDict[attr].__get__(self) break case 'clear': case 'remove': return function(){DOMNodeDict[attr](self,arguments[0])} case 'headers': if(self.elt.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_.dict() for(var i=0;i0){var res=$TagSum() var pos=res.children.length for(var i=0;i" var res=""} DOMNodeDict.__setattr__=function(self,attr,value){if(attr.substr(0,2)=='on'){ if(!_b_.bool(value)){ DOMNodeDict.unbind(self,attr.substr(2))}else{ DOMNodeDict.bind(self,attr.substr(2),value)}}else{if(DOMNodeDict['set_'+attr]!==undefined){return DOMNodeDict['set_'+attr](self,value)} var attr1=attr.replace('_','-').toLowerCase() if(self.elt instanceof SVGElement){self.elt.setAttributeNS(null,attr1,value) return} if(self.elt[attr1]!==undefined){self.elt[attr1]=value;return} if(typeof self.elt.getAttribute=='function' && typeof self.elt.setAttribute=='function'){var res=self.elt.getAttribute(attr1) if(res!==undefined&&res!==null){self.elt.setAttribute(attr1,value) return}} self.elt[attr]=value}} DOMNodeDict.__setitem__=function(self,key,value){self.elt.childNodes[key]=value} DOMNodeDict.abs_left={__get__: function(self){return $getPosition(self.elt).left},__set__: function(){throw _b_.AttributeError("'DOMNode' objectattribute 'abs_left' is read-only")}} DOMNodeDict.abs_top={__get__: function(self){return $getPosition(self.elt).top},__set__: function(){throw _b_.AttributeError("'DOMNode' objectattribute 'abs_top' is read-only")}} DOMNodeDict.bind=function(self,event){ var _id if(self.elt.nodeType===9){_id=0} else{_id=self.elt.$brython_id} var _d=_b_.dict.$dict if(!_d.__contains__($B.events,_id)){_d.__setitem__($B.events,_id,dict())} var item=_d.__getitem__($B.events,_id) if(!_d.__contains__(item,event)){_d.__setitem__(item,event,[])} var evlist=_d.__getitem__(item,event) var pos=evlist.length for(var i=2;i=0;i--){elt.removeChild(elt.childNodes[i])}} DOMNodeDict.Class=function(self){if(self.elt.className !==undefined)return self.elt.className return None} DOMNodeDict.class_name=function(self){return DOMNodeDict.Class(self)} DOMNodeDict.clone=function(self){res=DOMNode(self.elt.cloneNode(true)) res.elt.$brython_id='DOM-' + $B.UUID() var _d=_b_.dict.$dict if(_d.__contains__($B.events,self.elt.$brython_id)){var events=_d.__getitem__($B.events,self.elt.$brython_id) var items=_b_.list(_d.items(events)) for(var i=0;i=0;i--)res.splice(to_delete[i],1)} return res} DOMNodeDict.getContext=function(self){ if(!('getContext' in self.elt)){throw _b_.AttributeError("object has no attribute 'getContext'")} var obj=self.elt return function(ctx){return JSObject(obj.getContext(ctx))}} DOMNodeDict.getSelectionRange=function(self){ if(self.elt['getSelectionRange']!==undefined){return self.elt.getSelectionRange.apply(null,arguments)}} DOMNodeDict.height={'__get__': function(self){ if(self.elt.tagName=='CANVAS'){return self.elt.height} var res=parseInt(self.elt.style.height) if(isNaN(res)){throw _b_.AttributeError("node has no attribute 'height'")} return res},'__set__': function(obj,self,value){if(self.elt.tagName=='CANVAS'){self.elt.height=value} else{self.elt.style.height=value+'px'}}} DOMNodeDict.html=function(self){return self.elt.innerHTML} DOMNodeDict.id=function(self){if(self.elt.id !==undefined)return self.elt.id return None} DOMNodeDict.inside=function(self,other){ other=other.elt var elt=self.elt while(true){if(other===elt){return true} elt=elt.parentElement if(!elt){return false}}} DOMNodeDict.options=function(self){ return new $OptionsClass(self.elt)} DOMNodeDict.parent=function(self){if(self.elt.parentElement)return DOMNode(self.elt.parentElement) return None} DOMNodeDict.left={'__get__': function(self){var res=parseInt(self.elt.style.left) if(isNaN(res)){throw _b_.AttributeError("node has no attribute 'left'")} return res},'__set__': function(obj,self,value){self.elt.style.left=value+'px'}} DOMNodeDict.remove=function(self,child){ var elt=self.elt,flag=false,ch_elt=child.elt if(self.elt.nodeType==9){elt=self.elt.body} while(ch_elt.parentElement){if(ch_elt.parentElement===elt){elt.removeChild(ch_elt) flag=true break}else{ch_elt=ch_elt.parentElement}} if(!flag){throw _b_.ValueError('element '+child+' is not inside '+self)}} DOMNodeDict.reset=function(self){ return function(){self.elt.reset()}} DOMNodeDict.style=function(self){ self.elt.style.float=self.elt.style.cssFloat ||self.style.styleFloat return $B.JSObject(self.elt.style)} DOMNodeDict.top={'__get__': function(self){var res=parseInt(self.elt.style.top) if(isNaN(res)){throw _b_.AttributeError("node has no attribute 'top'")} return res},'__set__': function(obj,self,value){self.elt.style.top=value+'px'}} DOMNodeDict.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)}} DOMNodeDict.set_class_name=function(self,arg){self.elt.setAttribute('class',arg)} DOMNodeDict.set_html=function(self,value){self.elt.innerHTML=str(value)} DOMNodeDict.set_style=function(self,style){ if(!_b_.isinstance(style,_b_.dict)){throw TypeError('style must be dict, not '+$B.get_class(style).__name__)} var items=_b_.list(_b_.dict.$dict.items(style)) for(var i=0;i-1} $QueryDict.__getitem__=function(self,key){ var result=self._values[key] if(result===undefined)throw KeyError(key) if(result.length==1)return result[0] return result} var $QueryDict_iterator=$B.$iterator_class('query string iterator') $QueryDict.__iter__=function(self){return $B.$iterator(self._keys,$QueryDict_iterator)} $QueryDict.__mro__=[$QueryDict,$ObjectDict] $QueryDict.getfirst=function(self,key,_default){ var result=self._values[key] if(result===undefined){if(_default===undefined)return None return _default} return result[0]} $QueryDict.getlist=function(self,key){ var result=self._values[key] if(result===undefined)return[] return result} $QueryDict.getvalue=function(self,key,_default){try{return $QueryDict.__getitem__(self,key)} catch(err){if(_default===undefined)return None return _default}} $QueryDict.keys=function(self){return self._keys} DOMNodeDict.query=function(self){var res={__class__:$QueryDict,_keys :[],_values :{}} var qs=location.search.substr(1).split('&') for(var i=0;i-1){res._values[key].push(value)} else{res._keys.push(key) res._values[key]=[value]}} return res} var $TagSumDict={__class__ : $B.$type,__name__:'TagSum'} $TagSumDict.appendChild=function(self,child){self.children.push(child)} $TagSumDict.__add__=function(self,other){if($B.get_class(other)===$TagSumDict){self.children=self.children.concat(other.children)}else if(isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.dict,_b_.set,_b_.list])){self.children=self.children.concat(DOMNode(document.createTextNode(other)))}else{self.children.push(other)} return self} $TagSumDict.__mro__=[$TagSumDict,$ObjectDict] $TagSumDict.__radd__=function(self,other){var res=$TagSum() res.children=self.children.concat(DOMNode(document.createTextNode(other))) return res} $TagSumDict.__repr__=function(self){var res=' ' for(var i=0;i'}} $B.GeneratorBreak={} $B.$GeneratorSendError={} var $GeneratorReturn={} $B.generator_return=function(){return{__class__:$GeneratorReturn}} function in_loop(node){ while(node){if(node.loop_start!==undefined)return node node=node.parent} return false} function in_try(node){ var tries=[],pnode=node.parent,pos=0 while(pnode){if(pnode.is_try){tries[pos++]=pnode} pnode=pnode.parent} return tries} var $BRGeneratorDict={__class__:$B.$type,__name__:'generator'} $BRGeneratorDict.__iter__=function(self){return self} $BRGeneratorDict.__enter__=function(self){console.log("generator.__enter__ called")} $BRGeneratorDict.__exit__=function(self){console.log("generator.__exit__ called")} function clear_ns(iter_id){delete $B.vars[iter_id] delete $B.modules[iter_id] delete $B.bound[iter_id] delete $B.generators[iter_id] delete $B.$generators[iter_id]} $BRGeneratorDict.__next__=function(self){ var scope_id=self.func_root.scope.id if(self._next===undefined){ var src=self.func_root.src()+'\n)()' try{eval(src)} catch(err){console.log("cant eval\n"+src+'\n'+err) clear_ns(self.iter_id) throw err} self._next=$B.$generators[self.iter_id]} if(self.gi_running){throw _b_.ValueError("ValueError: generator already executing")} self.gi_running=true for(var i=0;i'} $BRGeneratorDict.close=function(self,value){self.sent_value=_b_.GeneratorExit() try{var res=$BRGeneratorDict.__next__(self) if(res!==_b_.None){throw _b_.RuntimeError("closed generator returned a value")}}catch(err){if($B.is_exc(err,[_b_.StopIteration,_b_.GeneratorExit])){return _b_.None} throw err}} $BRGeneratorDict.send=function(self,value){self.sent_value=value return $BRGeneratorDict.__next__(self)} $BRGeneratorDict.$$throw=function(self,value){if(_b_.isinstance(value,_b_.type))value=value() self.sent_value={__class__:$B.$GeneratorSendError,err:value} return $BRGeneratorDict.__next__(self)} $B.$BRgenerator=function(env,func_name,def_id){ var def_node=$B.modules[def_id] var def_ctx=def_node.C.tree[0] var counter=0 var func=env[0][1][func_name] $B.generators=$B.generators ||{} $B.$generators=$B.$generators ||{} var module=def_node.module var res=function(){var args=[],pos=0 for(var i=0,_len_i=arguments.length;i<_len_i;i++){args[pos++]=arguments[i]} var iter_id=def_id+'_'+counter++ $B.bound[iter_id]={} for(var attr in $B.bound[def_id]){$B.bound[iter_id][attr]=true} var func_root=new $B.genNode(def_ctx.to_js('$B.$generators["'+iter_id+'"]')) func_root.scope=env[0][1] func_root.module=module func_root.yields=[] func_root.loop_ends={} func_root.def_id=def_id func_root.iter_id=iter_id for(var i=0,_len_i=def_node.children.length;i < _len_i;i++){func_root.addChild($B.make_node(func_root,def_node.children[i]))} var func_node=func_root.children[1].children[0] var obj={__class__ : $BRGeneratorDict,args:args,def_id:def_id,def_ctx:def_ctx,def_node:def_node,env:env,func:func,func_name:func_name,func_root:func_root,module:module,func_node:func_node,next_root:func_root,gi_running:false,iter_id:iter_id,id:iter_id,num:0} $B.modules[iter_id]=obj obj.parent_block=def_node.parent_block return obj} res.__call__=function(){console.log('call generator');return res.apply(null,arguments)} res.__repr__=function(){return ""} return res} $B.$BRgenerator.__repr__=function(){return ""} $B.$BRgenerator.__str__=function(){return ""} $B.$BRgenerator.__class__=$B.$type})(__BRYTHON__) ;(function($B){var modules={} modules['browser']={$package: true,$is_package: true,__package__:'browser',__file__:$B.brython_path.replace(/\/*$/g,'')+ '/Lib/browser/__init__.py',alert:function(message){window.alert($B.builtins.str(message))},confirm: $B.JSObject(window.confirm),console:$B.JSObject(window.console),document:$B.DOMNode(document),doc: $B.DOMNode(document), DOMEvent:$B.DOMEvent,DOMNode:$B.DOMNode,mouseCoords: function(ev){return $B.JSObject($mouseCoords(ev))},prompt: function(message,default_value){return $B.JSObject(window.prompt(message,default_value||''))},reload: function(){ var scripts=document.getElementsByTagName('script'),js_scripts=[] for(var i=0;i"} $B.imported[name]=$B.modules[name]=module_obj} for(var attr in modules){load(attr,modules[attr])} modules['browser'].html=modules['browser.html']})(__BRYTHON__) ;(function($B){var _b_=$B.builtins, $sys=$B.imported['_sys']; function import_hooks(mod_name,_path,module,blocking){ var is_none=$B.is_none if(is_none(module)){module=undefined;} var _meta_path=_b_.getattr($sys,'meta_path'); var spec=undefined; for(var i=0,_len_i=_meta_path.length;i < _len_i && is_none(spec);i++){var _finder=_meta_path[i],find_spec=_b_.getattr(_finder,'find_spec',null) if(find_spec !==null){spec=_b_.getattr(find_spec,'__call__')(mod_name,_path,undefined); spec.blocking=blocking}} if(is_none(spec)){ throw _b_.ImportError('No module named '+mod_name);} var _loader=_b_.getattr(spec,'loader',_b_.None),_sys_modules=$B.imported,_spec_name=_b_.getattr(spec,'name'); if(is_none(module)){ if(!is_none(_loader)){var create_module=_b_.getattr(_loader,'create_module',_b_.None); if(!is_none(create_module)){module=_b_.getattr(create_module,'__call__')(spec);}} if(module===undefined){throw _b_.ImportError(mod_name)} if(is_none(module)){ module=$B.$ModuleDict.$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.toString=module.__repr__=module.__str__= function(){return ""}}} 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=!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(!is_none(cached)){module.__cached__=cached;} if(is_none(_loader)){if(!is_none(locs)){$B.modules[_spec_name]=_sys_modules[_spec_name]=module;} else{ throw _b_.ImportError(mod_name);}} else{ var exec_module=_b_.getattr(_loader,'exec_module',_b_.None); if(is_none(exec_module)){ module=_b_.getattr(_b_.getattr(_loader,'load_module'),'__call__')(_spec_name);} else{ $B.modules[_spec_name]=_sys_modules[_spec_name]=module; try{_b_.getattr(exec_module,'__call__')(module,blocking)} catch(e){delete $B.modules[_spec_name]; delete _sys_modules[_spec_name]; throw e;}}} return _sys_modules[_spec_name];} $B.import_hooks=import_hooks})(__BRYTHON__) ;(function($B){_b_=$B.builtins $B.execution_object={} $B.execution_object.queue=[] $B.execution_object.start_flag=true $B.execution_object.$execute_next_segment=function(){if($B.execution_object.queue.length==0){return} $B.execution_object.start_flag=false var element=$B.execution_object.queue.shift() var code=element[0] var delay=10 if(element.length==2)delay=element[1] setTimeout(function(){ console.log(code) try{eval(code)}catch(e){console.log(e)} $B.execution_object.start_flag=$B.execution_object.queue.length==0;},delay);} $B.execution_object.$append=function(code,delay){$B.execution_object.queue.push([code,delay]); if($B.execution_object.start_flag)$B.execution_object.$execute_next_segment()} $B.execution_object.source_conversion=function(js){js=js.replace("\n","",'g') js=js.replace("'","\\'",'g') js=js.replace('"','\\"','g') js=js.replace("@@","\'",'g') js+="';$B.execution_object.$append($jscode, 10); " js+="$B.execution_object.$execute_next_segment(); " return "var $jscode='" + js} _b_['brython_block']=function(f,sec){if(sec===undefined ||sec==_b_.None)sec=1 return f} $B.builtin_funcs['brython_block']=true $B.bound['__builtins__']['brython_block']=true _b_['brython_async']=function(f){return f} $B.builtin_funcs['brython_async']=true $B.bound['__builtins__']['brython_async']=true})(__BRYTHON__) __BRYTHON__.use_VFS = true; __BRYTHON__.VFS={"encodings.mac_croatian": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-croatian',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc4'\n'\\xc5'\n'\\xc7'\n'\\xc9'\n'\\xd1'\n'\\xd6'\n'\\xdc'\n'\\xe1'\n'\\xe0'\n'\\xe2'\n'\\xe4'\n'\\xe3'\n'\\xe5'\n'\\xe7'\n'\\xe9'\n'\\xe8'\n'\\xea'\n'\\xeb'\n'\\xed'\n'\\xec'\n'\\xee'\n'\\xef'\n'\\xf1'\n'\\xf3'\n'\\xf2'\n'\\xf4'\n'\\xf6'\n'\\xf5'\n'\\xfa'\n'\\xf9'\n'\\xfb'\n'\\xfc'\n'\\u2020'\n'\\xb0'\n'\\xa2'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\xdf'\n'\\xae'\n'\\u0160'\n'\\u2122'\n'\\xb4'\n'\\xa8'\n'\\u2260'\n'\\u017d'\n'\\xd8'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\u2206'\n'\\xb5'\n'\\u2202'\n'\\u2211'\n'\\u220f'\n'\\u0161'\n'\\u222b'\n'\\xaa'\n'\\xba'\n'\\u03a9'\n'\\u017e'\n'\\xf8'\n'\\xbf'\n'\\xa1'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u0106'\n'\\xab'\n'\\u010c'\n'\\u2026'\n'\\xa0'\n'\\xc0'\n'\\xc3'\n'\\xd5'\n'\\u0152'\n'\\u0153'\n'\\u0110'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u25ca'\n'\\uf8ff'\n'\\xa9'\n'\\u2044'\n'\\u20ac'\n'\\u2039'\n'\\u203a'\n'\\xc6'\n'\\xbb'\n'\\u2013'\n'\\xb7'\n'\\u201a'\n'\\u201e'\n'\\u2030'\n'\\xc2'\n'\\u0107'\n'\\xc1'\n'\\u010d'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\xd3'\n'\\xd4'\n'\\u0111'\n'\\xd2'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\u0131'\n'\\u02c6'\n'\\u02dc'\n'\\xaf'\n'\\u03c0'\n'\\xcb'\n'\\u02da'\n'\\xb8'\n'\\xca'\n'\\xe6'\n'\\u02c7'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "subprocess": [".py", "\n\n\n\n\n\n\n\n\nr\"\"\"subprocess - Subprocesses with accessible I/O streams\n\nThis module allows you to spawn processes, connect to their\ninput/output/error pipes, and obtain their return codes. This module\nintends to replace several other, older modules and functions, like:\n\nos.system\nos.spawn*\n\nInformation about how the subprocess module can be used to replace these\nmodules and functions can be found below.\n\n\n\nUsing the subprocess module\n===========================\nThis module defines one class called Popen:\n\nclass Popen(args, bufsize=-1, executable=None,\n stdin=None, stdout=None, stderr=None,\n preexec_fn=None, close_fds=True, shell=False,\n cwd=None, env=None, universal_newlines=False,\n startupinfo=None, creationflags=0,\n restore_signals=True, start_new_session=False, pass_fds=()):\n\n\nArguments are:\n\nargs should be a string, or a sequence of program arguments. The\nprogram to execute is normally the first item in the args sequence or\nstring, but can be explicitly set by using the executable argument.\n\nOn POSIX, with shell=False (default): In this case, the Popen class\nuses os.execvp() to execute the child program. args should normally\nbe a sequence. A string will be treated as a sequence with the string\nas the only item (the program to execute).\n\nOn POSIX, with shell=True: If args is a string, it specifies the\ncommand string to execute through the shell. If args is a sequence,\nthe first item specifies the command string, and any additional items\nwill be treated as additional shell arguments.\n\nOn Windows: the Popen class uses CreateProcess() to execute the child\nprogram, which operates on strings. If args is a sequence, it will be\nconverted to a string using the list2cmdline method. Please note that\nnot all MS Windows applications interpret the command line the same\nway: The list2cmdline is designed for applications using the same\nrules as the MS C runtime.\n\nbufsize will be supplied as the corresponding argument to the io.open()\nfunction when creating the stdin/stdout/stderr pipe file objects:\n0 means unbuffered (read & write are one system call and can return short),\n1 means line buffered, any other positive value means use a buffer of\napproximately that size. A negative bufsize, the default, means the system\ndefault of io.DEFAULT_BUFFER_SIZE will be used.\n\nstdin, stdout and stderr specify the executed programs' standard\ninput, standard output and standard error file handles, respectively.\nValid values are PIPE, an existing file descriptor (a positive\ninteger), an existing file object, and None. PIPE indicates that a\nnew pipe to the child should be created. With None, no redirection\nwill occur; the child's file handles will be inherited from the\nparent. Additionally, stderr can be STDOUT, which indicates that the\nstderr data from the applications should be captured into the same\nfile handle as for stdout.\n\nOn POSIX, if preexec_fn is set to a callable object, this object will be\ncalled in the child process just before the child is executed. The use\nof preexec_fn is not thread safe, using it in the presence of threads\ncould lead to a deadlock in the child process before the new executable\nis executed.\n\nIf close_fds is true, all file descriptors except 0, 1 and 2 will be\nclosed before the child process is executed. The default for close_fds\nvaries by platform: Always true on POSIX. True when stdin/stdout/stderr\nare None on Windows, false otherwise.\n\npass_fds is an optional sequence of file descriptors to keep open between the\nparent and child. Providing any pass_fds implicitly sets close_fds to true.\n\nif shell is true, the specified command will be executed through the\nshell.\n\nIf cwd is not None, the current directory will be changed to cwd\nbefore the child is executed.\n\nOn POSIX, if restore_signals is True all signals that Python sets to\nSIG_IGN are restored to SIG_DFL in the child process before the exec.\nCurrently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This\nparameter does nothing on Windows.\n\nOn POSIX, if start_new_session is True, the setsid() system call will be made\nin the child process prior to executing the command.\n\nIf env is not None, it defines the environment variables for the new\nprocess.\n\nIf universal_newlines is false, the file objects stdin, stdout and stderr\nare opened as binary files, and no line ending conversion is done.\n\nIf universal_newlines is true, the file objects stdout and stderr are\nopened as a text files, but lines may be terminated by any of '\\n',\nthe Unix end-of-line convention, '\\r', the old Macintosh convention or\n'\\r\\n', the Windows convention. All of these external representations\nare seen as '\\n' by the Python program. Also, the newlines attribute\nof the file objects stdout, stdin and stderr are not updated by the\ncommunicate() method.\n\nThe startupinfo and creationflags, if given, will be passed to the\nunderlying CreateProcess() function. They can specify things such as\nappearance of the main window and priority for the new process.\n(Windows only)\n\n\nThis module also defines some shortcut functions:\n\ncall(*popenargs, **kwargs):\n Run command with arguments. Wait for command to complete, then\n return the returncode attribute.\n\n The arguments are the same as for the Popen constructor. Example:\n\n >>> retcode = subprocess.call([\"ls\", \"-l\"])\n\ncheck_call(*popenargs, **kwargs):\n Run command with arguments. Wait for command to complete. If the\n exit code was zero then return, otherwise raise\n CalledProcessError. The CalledProcessError object will have the\n return code in the returncode attribute.\n\n The arguments are the same as for the Popen constructor. Example:\n\n >>> subprocess.check_call([\"ls\", \"-l\"])\n 0\n\ngetstatusoutput(cmd):\n Return (status, output) of executing cmd in a shell.\n\n Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple\n (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the\n returned output will contain output or error messages. A trailing newline\n is stripped from the output. The exit status for the command can be\n interpreted according to the rules for the C function wait(). Example:\n\n >>> subprocess.getstatusoutput('ls /bin/ls')\n (0, '/bin/ls')\n >>> subprocess.getstatusoutput('cat /bin/junk')\n (256, 'cat: /bin/junk: No such file or directory')\n >>> subprocess.getstatusoutput('/bin/junk')\n (256, 'sh: /bin/junk: not found')\n\ngetoutput(cmd):\n Return output (stdout or stderr) of executing cmd in a shell.\n\n Like getstatusoutput(), except the exit status is ignored and the return\n value is a string containing the command's output. Example:\n\n >>> subprocess.getoutput('ls /bin/ls')\n '/bin/ls'\n\ncheck_output(*popenargs, **kwargs):\n Run command with arguments and return its output.\n\n If the exit code was non-zero it raises a CalledProcessError. The\n CalledProcessError object will have the return code in the returncode\n attribute and output in the output attribute.\n\n The arguments are the same as for the Popen constructor. Example:\n\n >>> output = subprocess.check_output([\"ls\", \"-l\", \"/dev/null\"])\n\n\nExceptions\n----------\nExceptions raised in the child process, before the new program has\nstarted to execute, will be re-raised in the parent. Additionally,\nthe exception object will have one extra attribute called\n'child_traceback', which is a string containing traceback information\nfrom the child's point of view.\n\nThe most common exception raised is OSError. This occurs, for\nexample, when trying to execute a non-existent file. Applications\nshould prepare for OSErrors.\n\nA ValueError will be raised if Popen is called with invalid arguments.\n\nExceptions defined within this module inherit from SubprocessError.\ncheck_call() and check_output() will raise CalledProcessError if the\ncalled process returns a non-zero return code. TimeoutExpired\nbe raised if a timeout was specified and expired.\n\n\nSecurity\n--------\nUnlike some other popen functions, this implementation will never call\n/bin/sh implicitly. This means that all characters, including shell\nmetacharacters, can safely be passed to child processes.\n\n\nPopen objects\n=============\nInstances of the Popen class have the following methods:\n\npoll()\n Check if child process has terminated. Returns returncode\n attribute.\n\nwait()\n Wait for child process to terminate. Returns returncode attribute.\n\ncommunicate(input=None)\n Interact with process: Send data to stdin. Read data from stdout\n and stderr, until end-of-file is reached. Wait for process to\n terminate. The optional input argument should be a string to be\n sent to the child process, or None, if no data should be sent to\n the child.\n\n communicate() returns a tuple (stdout, stderr).\n\n Note: The data read is buffered in memory, so do not use this\n method if the data size is large or unlimited.\n\nThe following attributes are also available:\n\nstdin\n If the stdin argument is PIPE, this attribute is a file object\n that provides input to the child process. Otherwise, it is None.\n\nstdout\n If the stdout argument is PIPE, this attribute is a file object\n that provides output from the child process. Otherwise, it is\n None.\n\nstderr\n If the stderr argument is PIPE, this attribute is file object that\n provides error output from the child process. Otherwise, it is\n None.\n\npid\n The process ID of the child process.\n\nreturncode\n The child return code. A None value indicates that the process\n hasn't terminated yet. A negative value -N indicates that the\n child was terminated by signal N (POSIX only).\n\n\nReplacing older functions with the subprocess module\n====================================================\nIn this section, \"a ==> b\" means that b can be used as a replacement\nfor a.\n\nNote: All functions in this section fail (more or less) silently if\nthe executed program cannot be found; this module raises an OSError\nexception.\n\nIn the following examples, we assume that the subprocess module is\nimported with \"from subprocess import *\".\n\n\nReplacing /bin/sh shell backquote\n---------------------------------\noutput=`mycmd myarg`\n==>\noutput = Popen([\"mycmd\", \"myarg\"], stdout=PIPE).communicate()[0]\n\n\nReplacing shell pipe line\n-------------------------\noutput=`dmesg | grep hda`\n==>\np1 = Popen([\"dmesg\"], stdout=PIPE)\np2 = Popen([\"grep\", \"hda\"], stdin=p1.stdout, stdout=PIPE)\noutput = p2.communicate()[0]\n\n\nReplacing os.system()\n---------------------\nsts = os.system(\"mycmd\" + \" myarg\")\n==>\np = Popen(\"mycmd\" + \" myarg\", shell=True)\npid, sts = os.waitpid(p.pid, 0)\n\nNote:\n\n* Calling the program through the shell is usually not required.\n\n* It's easier to look at the returncode attribute than the\n exitstatus.\n\nA more real-world example would look like this:\n\ntry:\n retcode = call(\"mycmd\" + \" myarg\", shell=True)\n if retcode < 0:\n print(\"Child was terminated by signal\", -retcode, file=sys.stderr)\n else:\n print(\"Child returned\", retcode, file=sys.stderr)\nexcept OSError as e:\n print(\"Execution failed:\", e, file=sys.stderr)\n\n\nReplacing os.spawn*\n-------------------\nP_NOWAIT example:\n\npid = os.spawnlp(os.P_NOWAIT, \"/bin/mycmd\", \"mycmd\", \"myarg\")\n==>\npid = Popen([\"/bin/mycmd\", \"myarg\"]).pid\n\n\nP_WAIT example:\n\nretcode = os.spawnlp(os.P_WAIT, \"/bin/mycmd\", \"mycmd\", \"myarg\")\n==>\nretcode = call([\"/bin/mycmd\", \"myarg\"])\n\n\nVector example:\n\nos.spawnvp(os.P_NOWAIT, path, args)\n==>\nPopen([path] + args[1:])\n\n\nEnvironment example:\n\nos.spawnlpe(os.P_NOWAIT, \"/bin/mycmd\", \"mycmd\", \"myarg\", env)\n==>\nPopen([\"/bin/mycmd\", \"myarg\"], env={\"PATH\": \"/usr/bin\"})\n\"\"\"\n\nimport sys\nmswindows=(sys.platform ==\"win32\")\n\nimport io\nimport os\nimport time\nimport traceback\nimport gc\nimport signal\nimport builtins\nimport warnings\nimport errno\ntry :\n from time import monotonic as _time\nexcept ImportError:\n from time import time as _time\n \n \nclass SubprocessError(Exception):pass\n\n\nclass CalledProcessError(SubprocessError):\n ''\n\n\n\n \n def __init__(self,returncode,cmd,output=None ):\n self.returncode=returncode\n self.cmd=cmd\n self.output=output\n def __str__(self):\n return\"Command '%s' returned non-zero exit status %d\"%(self.cmd,self.returncode)\n \n \nclass TimeoutExpired(SubprocessError):\n ''\n\n \n def __init__(self,cmd,timeout,output=None ):\n self.cmd=cmd\n self.timeout=timeout\n self.output=output\n \n def __str__(self):\n return (\"Command '%s' timed out after %s seconds\"%\n (self.cmd,self.timeout))\n \n \nif mswindows:\n import threading\n import msvcrt\n import _winapi\n class STARTUPINFO:\n dwFlags=0\n hStdInput=None\n hStdOutput=None\n hStdError=None\n wShowWindow=0\n class pywintypes:\n error=IOError\nelse :\n import select\n _has_poll=hasattr(select,'poll')\n import _posixsubprocess\n _create_pipe=_posixsubprocess.cloexec_pipe\n \n \n \n \n _PIPE_BUF=getattr(select,'PIPE_BUF',512)\n \n \n__all__=[\"Popen\",\"PIPE\",\"STDOUT\",\"call\",\"check_call\",\"getstatusoutput\",\n\"getoutput\",\"check_output\",\"CalledProcessError\",\"DEVNULL\"]\n\nif mswindows:\n from _winapi import (CREATE_NEW_CONSOLE,CREATE_NEW_PROCESS_GROUP,\n STD_INPUT_HANDLE,STD_OUTPUT_HANDLE,\n STD_ERROR_HANDLE,SW_HIDE,\n STARTF_USESTDHANDLES,STARTF_USESHOWWINDOW)\n \n __all__.extend([\"CREATE_NEW_CONSOLE\",\"CREATE_NEW_PROCESS_GROUP\",\n \"STD_INPUT_HANDLE\",\"STD_OUTPUT_HANDLE\",\n \"STD_ERROR_HANDLE\",\"SW_HIDE\",\n \"STARTF_USESTDHANDLES\",\"STARTF_USESHOWWINDOW\"])\n \n class Handle(int):\n closed=False\n \n def Close(self,CloseHandle=_winapi.CloseHandle):\n if not self.closed:\n self.closed=True\n CloseHandle(self)\n \n def Detach(self):\n if not self.closed:\n self.closed=True\n return int(self)\n raise ValueError(\"already closed\")\n \n def __repr__(self):\n return\"Handle(%d)\"%int(self)\n \n __del__=Close\n __str__=__repr__\n \ntry :\n MAXFD=os.sysconf(\"SC_OPEN_MAX\")\nexcept :\n MAXFD=256\n \n \n \n \n \n_active=[]\n\ndef _cleanup():\n for inst in _active[:]:\n res=inst._internal_poll(_deadstate=sys.maxsize)\n if res is not None :\n try :\n _active.remove(inst)\n except ValueError:\n \n \n pass\n \nPIPE=-1\nSTDOUT=-2\nDEVNULL=-3\n\n\ndef _eintr_retry_call(func,*args):\n while True :\n try :\n return func(*args)\n except InterruptedError:\n continue\n \n \n \n \n \n \ndef _args_from_interpreter_flags():\n ''\n \n flag_opt_map={\n 'debug':'d',\n \n \n 'optimize':'O',\n 'dont_write_bytecode':'B',\n 'no_user_site':'s',\n 'no_site':'S',\n 'ignore_environment':'E',\n 'verbose':'v',\n 'bytes_warning':'b',\n 'quiet':'q',\n 'hash_randomization':'R',\n }\n args=[]\n for flag,opt in flag_opt_map.items():\n v=getattr(sys.flags,flag)\n if v >0:\n args.append('-'+opt *v)\n for opt in sys.warnoptions:\n args.append('-W'+opt)\n return args\n \n \ndef call(*popenargs,timeout=None ,**kwargs):\n ''\n\n\n\n\n\n \n with Popen(*popenargs,**kwargs)as p:\n try :\n return p.wait(timeout=timeout)\n except :\n p.kill()\n p.wait()\n raise\n \n \ndef check_call(*popenargs,**kwargs):\n ''\n\n\n\n\n\n\n\n \n retcode=call(*popenargs,**kwargs)\n if retcode:\n cmd=kwargs.get(\"args\")\n if cmd is None :\n cmd=popenargs[0]\n raise CalledProcessError(retcode,cmd)\n return 0\n \n \ndef check_output(*popenargs,timeout=None ,**kwargs):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if'stdout'in kwargs:\n raise ValueError('stdout argument not allowed, it will be overridden.')\n with Popen(*popenargs,stdout=PIPE,**kwargs)as process:\n try :\n output,unused_err=process.communicate(timeout=timeout)\n except TimeoutExpired:\n process.kill()\n output,unused_err=process.communicate()\n raise TimeoutExpired(process.args,timeout,output=output)\n except :\n process.kill()\n process.wait()\n raise\n retcode=process.poll()\n if retcode:\n raise CalledProcessError(retcode,process.args,output=output)\n return output\n \n \ndef list2cmdline(seq):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n result=[]\n needquote=False\n for arg in seq:\n bs_buf=[]\n \n \n if result:\n result.append(' ')\n \n needquote=(\" \"in arg)or (\"\\t\"in arg)or not arg\n if needquote:\n result.append('\"')\n \n for c in arg:\n if c =='\\\\':\n \n bs_buf.append(c)\n elif c =='\"':\n \n result.append('\\\\'*len(bs_buf)*2)\n bs_buf=[]\n result.append('\\\\\"')\n else :\n \n if bs_buf:\n result.extend(bs_buf)\n bs_buf=[]\n result.append(c)\n \n \n if bs_buf:\n result.extend(bs_buf)\n \n if needquote:\n result.extend(bs_buf)\n result.append('\"')\n \n return''.join(result)\n \n \n \n \n \n \ndef getstatusoutput(cmd):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n with os.popen('{ '+cmd+'; } 2>&1','r')as pipe:\n try :\n text=pipe.read()\n sts=pipe.close()\n except :\n process=pipe._proc\n process.kill()\n process.wait()\n raise\n if sts is None :\n sts=0\n if text[-1:]=='\\n':\n text=text[:-1]\n return sts,text\n \n \ndef getoutput(cmd):\n ''\n\n\n\n\n\n\n\n \n return getstatusoutput(cmd)[1]\n \n \n_PLATFORM_DEFAULT_CLOSE_FDS=object()\n\n\nclass Popen(object):\n def __init__(self,args,bufsize=-1,executable=None ,\n stdin=None ,stdout=None ,stderr=None ,\n preexec_fn=None ,close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,\n shell=False ,cwd=None ,env=None ,universal_newlines=False ,\n startupinfo=None ,creationflags=0,\n restore_signals=True ,start_new_session=False ,\n pass_fds=()):\n ''\n _cleanup()\n \n self._child_created=False\n self._input=None\n self._communication_started=False\n if bufsize is None :\n bufsize=-1\n if not isinstance(bufsize,int):\n raise TypeError(\"bufsize must be an integer\")\n \n if mswindows:\n if preexec_fn is not None :\n raise ValueError(\"preexec_fn is not supported on Windows \"\n \"platforms\")\n any_stdio_set=(stdin is not None or stdout is not None or\n stderr is not None )\n if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:\n if any_stdio_set:\n close_fds=False\n else :\n close_fds=True\n elif close_fds and any_stdio_set:\n raise ValueError(\n \"close_fds is not supported on Windows platforms\"\n \" if you redirect stdin/stdout/stderr\")\n else :\n \n if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:\n close_fds=True\n if pass_fds and not close_fds:\n warnings.warn(\"pass_fds overriding close_fds.\",RuntimeWarning)\n close_fds=True\n if startupinfo is not None :\n raise ValueError(\"startupinfo is only supported on Windows \"\n \"platforms\")\n if creationflags !=0:\n raise ValueError(\"creationflags is only supported on Windows \"\n \"platforms\")\n \n self.args=args\n self.stdin=None\n self.stdout=None\n self.stderr=None\n self.pid=None\n self.returncode=None\n self.universal_newlines=universal_newlines\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n (p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite)=self._get_handles(stdin,stdout,stderr)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n if p2cwrite !=-1:\n self.stdin=io.open(p2cwrite,'wb',bufsize)\n if universal_newlines:\n self.stdin=io.TextIOWrapper(self.stdin,write_through=True )\n if c2pread !=-1:\n self.stdout=io.open(c2pread,'rb',bufsize)\n if universal_newlines:\n self.stdout=io.TextIOWrapper(self.stdout)\n if errread !=-1:\n self.stderr=io.open(errread,'rb',bufsize)\n if universal_newlines:\n self.stderr=io.TextIOWrapper(self.stderr)\n \n self._closed_child_pipe_fds=False\n try :\n self._execute_child(args,executable,preexec_fn,close_fds,\n pass_fds,cwd,env,\n startupinfo,creationflags,shell,\n p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite,\n restore_signals,start_new_session)\n except :\n \n for f in filter(None ,(self.stdin,self.stdout,self.stderr)):\n try :\n f.close()\n except EnvironmentError:\n pass\n \n if not self._closed_child_pipe_fds:\n to_close=[]\n if stdin ==PIPE:\n to_close.append(p2cread)\n if stdout ==PIPE:\n to_close.append(c2pwrite)\n if stderr ==PIPE:\n to_close.append(errwrite)\n if hasattr(self,'_devnull'):\n to_close.append(self._devnull)\n for fd in to_close:\n try :\n os.close(fd)\n except EnvironmentError:\n pass\n \n raise\n \n \n def _translate_newlines(self,data,encoding):\n data=data.decode(encoding)\n return data.replace(\"\\r\\n\",\"\\n\").replace(\"\\r\",\"\\n\")\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,traceback):\n if self.stdout:\n self.stdout.close()\n if self.stderr:\n self.stderr.close()\n if self.stdin:\n self.stdin.close()\n \n self.wait()\n \n def __del__(self,_maxsize=sys.maxsize,_active=_active):\n \n \n \n if not getattr(self,'_child_created',False ):\n \n return\n \n self._internal_poll(_deadstate=_maxsize)\n if self.returncode is None and _active is not None :\n \n _active.append(self)\n \n def _get_devnull(self):\n if not hasattr(self,'_devnull'):\n self._devnull=os.open(os.devnull,os.O_RDWR)\n return self._devnull\n \n def communicate(self,input=None ,timeout=None ):\n ''\n\n\n\n\n\n \n \n if self._communication_started and input:\n raise ValueError(\"Cannot send input after starting communication\")\n \n \n \n \n if (timeout is None and not self._communication_started and\n [self.stdin,self.stdout,self.stderr].count(None )>=2):\n stdout=None\n stderr=None\n if self.stdin:\n if input:\n try :\n self.stdin.write(input)\n except IOError as e:\n if e.errno !=errno.EPIPE and e.errno !=errno.EINVAL:\n raise\n self.stdin.close()\n elif self.stdout:\n stdout=_eintr_retry_call(self.stdout.read)\n self.stdout.close()\n elif self.stderr:\n stderr=_eintr_retry_call(self.stderr.read)\n self.stderr.close()\n self.wait()\n else :\n if timeout is not None :\n endtime=_time()+timeout\n else :\n endtime=None\n \n try :\n stdout,stderr=self._communicate(input,endtime,timeout)\n finally :\n self._communication_started=True\n \n sts=self.wait(timeout=self._remaining_time(endtime))\n \n return (stdout,stderr)\n \n \n def poll(self):\n return self._internal_poll()\n \n \n def _remaining_time(self,endtime):\n ''\n if endtime is None :\n return None\n else :\n return endtime -_time()\n \n \n def _check_timeout(self,endtime,orig_timeout):\n ''\n if endtime is None :\n return\n if _time()>endtime:\n raise TimeoutExpired(self.args,orig_timeout)\n \n \n if mswindows:\n \n \n \n def _get_handles(self,stdin,stdout,stderr):\n ''\n\n \n if stdin is None and stdout is None and stderr is None :\n return (-1,-1,-1,-1,-1,-1)\n \n p2cread,p2cwrite=-1,-1\n c2pread,c2pwrite=-1,-1\n errread,errwrite=-1,-1\n \n if stdin is None :\n p2cread=_winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)\n if p2cread is None :\n p2cread,_=_winapi.CreatePipe(None ,0)\n p2cread=Handle(p2cread)\n _winapi.CloseHandle(_)\n elif stdin ==PIPE:\n p2cread,p2cwrite=_winapi.CreatePipe(None ,0)\n p2cread,p2cwrite=Handle(p2cread),Handle(p2cwrite)\n elif stdin ==DEVNULL:\n p2cread=msvcrt.get_osfhandle(self._get_devnull())\n elif isinstance(stdin,int):\n p2cread=msvcrt.get_osfhandle(stdin)\n else :\n \n p2cread=msvcrt.get_osfhandle(stdin.fileno())\n p2cread=self._make_inheritable(p2cread)\n \n if stdout is None :\n c2pwrite=_winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)\n if c2pwrite is None :\n _,c2pwrite=_winapi.CreatePipe(None ,0)\n c2pwrite=Handle(c2pwrite)\n _winapi.CloseHandle(_)\n elif stdout ==PIPE:\n c2pread,c2pwrite=_winapi.CreatePipe(None ,0)\n c2pread,c2pwrite=Handle(c2pread),Handle(c2pwrite)\n elif stdout ==DEVNULL:\n c2pwrite=msvcrt.get_osfhandle(self._get_devnull())\n elif isinstance(stdout,int):\n c2pwrite=msvcrt.get_osfhandle(stdout)\n else :\n \n c2pwrite=msvcrt.get_osfhandle(stdout.fileno())\n c2pwrite=self._make_inheritable(c2pwrite)\n \n if stderr is None :\n errwrite=_winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)\n if errwrite is None :\n _,errwrite=_winapi.CreatePipe(None ,0)\n errwrite=Handle(errwrite)\n _winapi.CloseHandle(_)\n elif stderr ==PIPE:\n errread,errwrite=_winapi.CreatePipe(None ,0)\n errread,errwrite=Handle(errread),Handle(errwrite)\n elif stderr ==STDOUT:\n errwrite=c2pwrite\n elif stderr ==DEVNULL:\n errwrite=msvcrt.get_osfhandle(self._get_devnull())\n elif isinstance(stderr,int):\n errwrite=msvcrt.get_osfhandle(stderr)\n else :\n \n errwrite=msvcrt.get_osfhandle(stderr.fileno())\n errwrite=self._make_inheritable(errwrite)\n \n return (p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite)\n \n \n def _make_inheritable(self,handle):\n ''\n h=_winapi.DuplicateHandle(\n _winapi.GetCurrentProcess(),handle,\n _winapi.GetCurrentProcess(),0,1,\n _winapi.DUPLICATE_SAME_ACCESS)\n return Handle(h)\n \n \n def _find_w9xpopen(self):\n ''\n w9xpopen=os.path.join(\n os.path.dirname(_winapi.GetModuleFileName(0)),\n \"w9xpopen.exe\")\n if not os.path.exists(w9xpopen):\n \n \n w9xpopen=os.path.join(os.path.dirname(sys.base_exec_prefix),\n \"w9xpopen.exe\")\n if not os.path.exists(w9xpopen):\n raise RuntimeError(\"Cannot locate w9xpopen.exe, which is \"\n \"needed for Popen to work with your \"\n \"shell or platform.\")\n return w9xpopen\n \n \n def _execute_child(self,args,executable,preexec_fn,close_fds,\n pass_fds,cwd,env,\n startupinfo,creationflags,shell,\n p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite,\n unused_restore_signals,unused_start_new_session):\n ''\n \n assert not pass_fds,\"pass_fds not supported on Windows.\"\n \n if not isinstance(args,str):\n args=list2cmdline(args)\n \n \n if startupinfo is None :\n startupinfo=STARTUPINFO()\n if -1 not in (p2cread,c2pwrite,errwrite):\n startupinfo.dwFlags |=_winapi.STARTF_USESTDHANDLES\n startupinfo.hStdInput=p2cread\n startupinfo.hStdOutput=c2pwrite\n startupinfo.hStdError=errwrite\n \n if shell:\n startupinfo.dwFlags |=_winapi.STARTF_USESHOWWINDOW\n startupinfo.wShowWindow=_winapi.SW_HIDE\n comspec=os.environ.get(\"COMSPEC\",\"cmd.exe\")\n args='{} /c \"{}\"'.format(comspec,args)\n if (_winapi.GetVersion()>=0x80000000 or\n os.path.basename(comspec).lower()==\"command.com\"):\n \n \n \n \n w9xpopen=self._find_w9xpopen()\n args='\"%s\" %s'%(w9xpopen,args)\n \n \n \n \n \n \n creationflags |=_winapi.CREATE_NEW_CONSOLE\n \n \n try :\n hp,ht,pid,tid=_winapi.CreateProcess(executable,args,\n \n None ,None ,\n int(not close_fds),\n creationflags,\n env,\n cwd,\n startupinfo)\n except pywintypes.error as e:\n \n \n \n \n raise WindowsError(*e.args)\n finally :\n \n \n \n \n \n \n if p2cread !=-1:\n p2cread.Close()\n if c2pwrite !=-1:\n c2pwrite.Close()\n if errwrite !=-1:\n errwrite.Close()\n if hasattr(self,'_devnull'):\n os.close(self._devnull)\n \n \n self._child_created=True\n self._handle=Handle(hp)\n self.pid=pid\n _winapi.CloseHandle(ht)\n \n def _internal_poll(self,_deadstate=None ,\n _WaitForSingleObject=_winapi.WaitForSingleObject,\n _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,\n _GetExitCodeProcess=_winapi.GetExitCodeProcess):\n ''\n\n\n\n\n\n \n if self.returncode is None :\n if _WaitForSingleObject(self._handle,0)==_WAIT_OBJECT_0:\n self.returncode=_GetExitCodeProcess(self._handle)\n return self.returncode\n \n \n def wait(self,timeout=None ,endtime=None ):\n ''\n \n if endtime is not None :\n timeout=self._remaining_time(endtime)\n if timeout is None :\n timeout_millis=_winapi.INFINITE\n else :\n timeout_millis=int(timeout *1000)\n if self.returncode is None :\n result=_winapi.WaitForSingleObject(self._handle,\n timeout_millis)\n if result ==_winapi.WAIT_TIMEOUT:\n raise TimeoutExpired(self.args,timeout)\n self.returncode=_winapi.GetExitCodeProcess(self._handle)\n return self.returncode\n \n \n def _readerthread(self,fh,buffer):\n buffer.append(fh.read())\n fh.close()\n \n \n def _communicate(self,input,endtime,orig_timeout):\n \n \n if self.stdout and not hasattr(self,\"_stdout_buff\"):\n self._stdout_buff=[]\n self.stdout_thread= threading.Thread(target=self._readerthread,\n args=(self.stdout,self._stdout_buff))\n self.stdout_thread.daemon=True\n self.stdout_thread.start()\n if self.stderr and not hasattr(self,\"_stderr_buff\"):\n self._stderr_buff=[]\n self.stderr_thread= threading.Thread(target=self._readerthread,\n args=(self.stderr,self._stderr_buff))\n self.stderr_thread.daemon=True\n self.stderr_thread.start()\n \n if self.stdin:\n if input is not None :\n try :\n self.stdin.write(input)\n except IOError as e:\n if e.errno !=errno.EPIPE:\n raise\n self.stdin.close()\n \n \n \n \n if self.stdout is not None :\n self.stdout_thread.join(self._remaining_time(endtime))\n if self.stdout_thread.is_alive():\n raise TimeoutExpired(self.args,orig_timeout)\n if self.stderr is not None :\n self.stderr_thread.join(self._remaining_time(endtime))\n if self.stderr_thread.is_alive():\n raise TimeoutExpired(self.args,orig_timeout)\n \n \n \n stdout=None\n stderr=None\n if self.stdout:\n stdout=self._stdout_buff\n self.stdout.close()\n if self.stderr:\n stderr=self._stderr_buff\n self.stderr.close()\n \n \n if stdout is not None :\n stdout=stdout[0]\n if stderr is not None :\n stderr=stderr[0]\n \n return (stdout,stderr)\n \n def send_signal(self,sig):\n ''\n \n if sig ==signal.SIGTERM:\n self.terminate()\n elif sig ==signal.CTRL_C_EVENT:\n os.kill(self.pid,signal.CTRL_C_EVENT)\n elif sig ==signal.CTRL_BREAK_EVENT:\n os.kill(self.pid,signal.CTRL_BREAK_EVENT)\n else :\n raise ValueError(\"Unsupported signal: {}\".format(sig))\n \n def terminate(self):\n ''\n \n try :\n _winapi.TerminateProcess(self._handle,1)\n except PermissionError:\n \n \n rc=_winapi.GetExitCodeProcess(self._handle)\n if rc ==_winapi.STILL_ACTIVE:\n raise\n self.returncode=rc\n \n kill=terminate\n \n else :\n \n \n \n def _get_handles(self,stdin,stdout,stderr):\n ''\n\n \n p2cread,p2cwrite=-1,-1\n c2pread,c2pwrite=-1,-1\n errread,errwrite=-1,-1\n \n if stdin is None :\n pass\n elif stdin ==PIPE:\n p2cread,p2cwrite=_create_pipe()\n elif stdin ==DEVNULL:\n p2cread=self._get_devnull()\n elif isinstance(stdin,int):\n p2cread=stdin\n else :\n \n p2cread=stdin.fileno()\n \n if stdout is None :\n pass\n elif stdout ==PIPE:\n c2pread,c2pwrite=_create_pipe()\n elif stdout ==DEVNULL:\n c2pwrite=self._get_devnull()\n elif isinstance(stdout,int):\n c2pwrite=stdout\n else :\n \n c2pwrite=stdout.fileno()\n \n if stderr is None :\n pass\n elif stderr ==PIPE:\n errread,errwrite=_create_pipe()\n elif stderr ==STDOUT:\n errwrite=c2pwrite\n elif stderr ==DEVNULL:\n errwrite=self._get_devnull()\n elif isinstance(stderr,int):\n errwrite=stderr\n else :\n \n errwrite=stderr.fileno()\n \n return (p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite)\n \n \n def _close_fds(self,fds_to_keep):\n start_fd=3\n for fd in sorted(fds_to_keep):\n if fd >=start_fd:\n os.closerange(start_fd,fd)\n start_fd=fd+1\n if start_fd <=MAXFD:\n os.closerange(start_fd,MAXFD)\n \n \n def _execute_child(self,args,executable,preexec_fn,close_fds,\n pass_fds,cwd,env,\n startupinfo,creationflags,shell,\n p2cread,p2cwrite,\n c2pread,c2pwrite,\n errread,errwrite,\n restore_signals,start_new_session):\n ''\n \n if isinstance(args,(str,bytes)):\n args=[args]\n else :\n args=list(args)\n \n if shell:\n args=[\"/bin/sh\",\"-c\"]+args\n if executable:\n args[0]=executable\n \n if executable is None :\n executable=args[0]\n orig_executable=executable\n \n \n \n \n errpipe_read,errpipe_write=_create_pipe()\n try :\n try :\n \n \n \n \n \n if env is not None :\n env_list=[os.fsencode(k)+b'='+os.fsencode(v)\n for k,v in env.items()]\n else :\n env_list=None\n executable=os.fsencode(executable)\n if os.path.dirname(executable):\n executable_list=(executable,)\n else :\n \n executable_list=tuple(\n os.path.join(os.fsencode(dir),executable)\n for dir in os.get_exec_path(env))\n fds_to_keep=set(pass_fds)\n fds_to_keep.add(errpipe_write)\n self.pid=_posixsubprocess.fork_exec(\n args,executable_list,\n close_fds,sorted(fds_to_keep),cwd,env_list,\n p2cread,p2cwrite,c2pread,c2pwrite,\n errread,errwrite,\n errpipe_read,errpipe_write,\n restore_signals,start_new_session,preexec_fn)\n self._child_created=True\n finally :\n \n os.close(errpipe_write)\n \n \n devnull_fd=getattr(self,'_devnull',None )\n if p2cread !=-1 and p2cwrite !=-1 and p2cread !=devnull_fd:\n os.close(p2cread)\n if c2pwrite !=-1 and c2pread !=-1 and c2pwrite !=devnull_fd:\n os.close(c2pwrite)\n if errwrite !=-1 and errread !=-1 and errwrite !=devnull_fd:\n os.close(errwrite)\n if devnull_fd is not None :\n os.close(devnull_fd)\n \n self._closed_child_pipe_fds=True\n \n \n \n errpipe_data=bytearray()\n while True :\n part=_eintr_retry_call(os.read,errpipe_read,50000)\n errpipe_data +=part\n if not part or len(errpipe_data)>50000:\n break\n finally :\n \n os.close(errpipe_read)\n \n if errpipe_data:\n try :\n _eintr_retry_call(os.waitpid,self.pid,0)\n except OSError as e:\n if e.errno !=errno.ECHILD:\n raise\n try :\n exception_name,hex_errno,err_msg=(\n errpipe_data.split(b':',2))\n except ValueError:\n exception_name=b'RuntimeError'\n hex_errno=b'0'\n err_msg=(b'Bad exception data from child: '+\n repr(errpipe_data))\n child_exception_type=getattr(\n builtins,exception_name.decode('ascii'),\n RuntimeError)\n err_msg=err_msg.decode(errors=\"surrogatepass\")\n if issubclass(child_exception_type,OSError)and hex_errno:\n errno_num=int(hex_errno,16)\n child_exec_never_called=(err_msg ==\"noexec\")\n if child_exec_never_called:\n err_msg=\"\"\n if errno_num !=0:\n err_msg=os.strerror(errno_num)\n if errno_num ==errno.ENOENT:\n if child_exec_never_called:\n \n err_msg +=': '+repr(cwd)\n else :\n err_msg +=': '+repr(orig_executable)\n raise child_exception_type(errno_num,err_msg)\n raise child_exception_type(err_msg)\n \n \n def _handle_exitstatus(self,sts,_WIFSIGNALED=os.WIFSIGNALED,\n _WTERMSIG=os.WTERMSIG,_WIFEXITED=os.WIFEXITED,\n _WEXITSTATUS=os.WEXITSTATUS):\n \n \n if _WIFSIGNALED(sts):\n self.returncode=-_WTERMSIG(sts)\n elif _WIFEXITED(sts):\n self.returncode=_WEXITSTATUS(sts)\n else :\n \n raise RuntimeError(\"Unknown child exit status!\")\n \n \n def _internal_poll(self,_deadstate=None ,_waitpid=os.waitpid,\n _WNOHANG=os.WNOHANG,_os_error=os.error,_ECHILD=errno.ECHILD):\n ''\n\n\n\n\n\n \n if self.returncode is None :\n try :\n pid,sts=_waitpid(self.pid,_WNOHANG)\n if pid ==self.pid:\n self._handle_exitstatus(sts)\n except _os_error as e:\n if _deadstate is not None :\n self.returncode=_deadstate\n elif e.errno ==_ECHILD:\n \n \n \n \n \n self.returncode=0\n return self.returncode\n \n \n def _try_wait(self,wait_flags):\n try :\n (pid,sts)=_eintr_retry_call(os.waitpid,self.pid,wait_flags)\n except OSError as e:\n if e.errno !=errno.ECHILD:\n raise\n \n \n \n pid=self.pid\n sts=0\n return (pid,sts)\n \n \n def wait(self,timeout=None ,endtime=None ):\n ''\n \n if self.returncode is not None :\n return self.returncode\n \n \n \n if endtime is not None or timeout is not None :\n if endtime is None :\n endtime=_time()+timeout\n elif timeout is None :\n timeout=self._remaining_time(endtime)\n \n if endtime is not None :\n \n \n delay=0.0005\n while True :\n (pid,sts)=self._try_wait(os.WNOHANG)\n assert pid ==self.pid or pid ==0\n if pid ==self.pid:\n self._handle_exitstatus(sts)\n break\n remaining=self._remaining_time(endtime)\n if remaining <=0:\n raise TimeoutExpired(self.args,timeout)\n delay=min(delay *2,remaining,.05)\n time.sleep(delay)\n else :\n while self.returncode is None :\n (pid,sts)=self._try_wait(0)\n \n \n if pid ==self.pid:\n self._handle_exitstatus(sts)\n return self.returncode\n \n \n def _communicate(self,input,endtime,orig_timeout):\n if self.stdin and not self._communication_started:\n \n \n self.stdin.flush()\n if not input:\n self.stdin.close()\n \n if _has_poll:\n stdout,stderr=self._communicate_with_poll(input,endtime,\n orig_timeout)\n else :\n stdout,stderr=self._communicate_with_select(input,endtime,\n orig_timeout)\n \n self.wait(timeout=self._remaining_time(endtime))\n \n \n if stdout is not None :\n stdout=b''.join(stdout)\n if stderr is not None :\n stderr=b''.join(stderr)\n \n \n \n if self.universal_newlines:\n if stdout is not None :\n stdout=self._translate_newlines(stdout,\n self.stdout.encoding)\n if stderr is not None :\n stderr=self._translate_newlines(stderr,\n self.stderr.encoding)\n \n return (stdout,stderr)\n \n \n def _save_input(self,input):\n \n \n \n if self.stdin and self._input is None :\n self._input_offset=0\n self._input=input\n if self.universal_newlines and input is not None :\n self._input=self._input.encode(self.stdin.encoding)\n \n \n def _communicate_with_poll(self,input,endtime,orig_timeout):\n stdout=None\n stderr=None\n \n if not self._communication_started:\n self._fd2file={}\n \n poller=select.poll()\n def register_and_append(file_obj,eventmask):\n poller.register(file_obj.fileno(),eventmask)\n self._fd2file[file_obj.fileno()]=file_obj\n \n def close_unregister_and_remove(fd):\n poller.unregister(fd)\n self._fd2file[fd].close()\n self._fd2file.pop(fd)\n \n if self.stdin and input:\n register_and_append(self.stdin,select.POLLOUT)\n \n \n if not self._communication_started:\n self._fd2output={}\n if self.stdout:\n self._fd2output[self.stdout.fileno()]=[]\n if self.stderr:\n self._fd2output[self.stderr.fileno()]=[]\n \n select_POLLIN_POLLPRI=select.POLLIN |select.POLLPRI\n if self.stdout:\n register_and_append(self.stdout,select_POLLIN_POLLPRI)\n stdout=self._fd2output[self.stdout.fileno()]\n if self.stderr:\n register_and_append(self.stderr,select_POLLIN_POLLPRI)\n stderr=self._fd2output[self.stderr.fileno()]\n \n self._save_input(input)\n \n while self._fd2file:\n timeout=self._remaining_time(endtime)\n if timeout is not None and timeout <0:\n raise TimeoutExpired(self.args,orig_timeout)\n try :\n ready=poller.poll(timeout)\n except select.error as e:\n if e.args[0]==errno.EINTR:\n continue\n raise\n self._check_timeout(endtime,orig_timeout)\n \n \n \n \n for fd,mode in ready:\n if mode&select.POLLOUT:\n chunk=self._input[self._input_offset:\n self._input_offset+_PIPE_BUF]\n try :\n self._input_offset +=os.write(fd,chunk)\n except OSError as e:\n if e.errno ==errno.EPIPE:\n close_unregister_and_remove(fd)\n else :\n raise\n else :\n if self._input_offset >=len(self._input):\n close_unregister_and_remove(fd)\n elif mode&select_POLLIN_POLLPRI:\n data=os.read(fd,4096)\n if not data:\n close_unregister_and_remove(fd)\n self._fd2output[fd].append(data)\n else :\n \n close_unregister_and_remove(fd)\n \n return (stdout,stderr)\n \n \n def _communicate_with_select(self,input,endtime,orig_timeout):\n if not self._communication_started:\n self._read_set=[]\n self._write_set=[]\n if self.stdin and input:\n self._write_set.append(self.stdin)\n if self.stdout:\n self._read_set.append(self.stdout)\n if self.stderr:\n self._read_set.append(self.stderr)\n \n self._save_input(input)\n \n stdout=None\n stderr=None\n \n if self.stdout:\n if not self._communication_started:\n self._stdout_buff=[]\n stdout=self._stdout_buff\n if self.stderr:\n if not self._communication_started:\n self._stderr_buff=[]\n stderr=self._stderr_buff\n \n while self._read_set or self._write_set:\n timeout=self._remaining_time(endtime)\n if timeout is not None and timeout <0:\n raise TimeoutExpired(self.args,orig_timeout)\n try :\n (rlist,wlist,xlist)= select.select(self._read_set,self._write_set,[],\n timeout)\n except select.error as e:\n if e.args[0]==errno.EINTR:\n continue\n raise\n \n \n \n if not (rlist or wlist or xlist):\n raise TimeoutExpired(self.args,orig_timeout)\n \n self._check_timeout(endtime,orig_timeout)\n \n \n \n \n if self.stdin in wlist:\n chunk=self._input[self._input_offset:\n self._input_offset+_PIPE_BUF]\n try :\n bytes_written=os.write(self.stdin.fileno(),chunk)\n except OSError as e:\n if e.errno ==errno.EPIPE:\n self.stdin.close()\n self._write_set.remove(self.stdin)\n else :\n raise\n else :\n self._input_offset +=bytes_written\n if self._input_offset >=len(self._input):\n self.stdin.close()\n self._write_set.remove(self.stdin)\n \n if self.stdout in rlist:\n data=os.read(self.stdout.fileno(),1024)\n if not data:\n self.stdout.close()\n self._read_set.remove(self.stdout)\n stdout.append(data)\n \n if self.stderr in rlist:\n data=os.read(self.stderr.fileno(),1024)\n if not data:\n self.stderr.close()\n self._read_set.remove(self.stderr)\n stderr.append(data)\n \n return (stdout,stderr)\n \n \n def send_signal(self,sig):\n ''\n \n os.kill(self.pid,sig)\n \n def terminate(self):\n ''\n \n self.send_signal(signal.SIGTERM)\n \n def kill(self):\n ''\n \n self.send_signal(signal.SIGKILL)\n"], "socket": [".py", "\n\n\n\"\"\"\\\nThis module provides socket operations and some related functions.\nOn Unix, it supports IP (Internet Protocol) and Unix domain sockets.\nOn other systems, it only supports IP. Functions specific for a\nsocket are available as methods of the socket object.\n\nFunctions:\n\nsocket() -- create a new socket object\nsocketpair() -- create a pair of new socket objects [*]\nfromfd() -- create a socket object from an open file descriptor [*]\nfromshare() -- create a socket object from data received from socket.share() [*]\ngethostname() -- return the current hostname\ngethostbyname() -- map a hostname to its IP number\ngethostbyaddr() -- map an IP number or hostname to DNS info\ngetservbyname() -- map a service name and a protocol name to a port number\ngetprotobyname() -- map a protocol name (e.g. 'tcp') to a number\nntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order\nhtons(), htonl() -- convert 16, 32 bit int from host to network byte order\ninet_aton() -- convert IP addr string (123.45.67.89) to 32-bit packed format\ninet_ntoa() -- convert 32-bit packed format IP to string (123.45.67.89)\nsocket.getdefaulttimeout() -- get the default timeout value\nsocket.setdefaulttimeout() -- set the default timeout value\ncreate_connection() -- connects to an address, with an optional timeout and\n optional source address.\n\n [*] not available on all platforms!\n\nSpecial objects:\n\nSocketType -- type object for socket objects\nerror -- exception raised for I/O errors\nhas_ipv6 -- boolean value indicating if IPv6 is supported\n\nInteger constants:\n\nAF_INET, AF_UNIX -- socket domains (first argument to socket() call)\nSOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)\n\nMany other constants may be defined; these may be used in calls to\nthe setsockopt() and getsockopt() methods.\n\"\"\"\n\nimport _socket\nfrom _socket import *\n\nimport os,sys,io\n\ntry :\n import errno\nexcept ImportError:\n errno=None\nEBADF=getattr(errno,'EBADF',9)\nEAGAIN=getattr(errno,'EAGAIN',11)\nEWOULDBLOCK=getattr(errno,'EWOULDBLOCK',11)\n\n__all__=[\"getfqdn\",\"create_connection\"]\n__all__.extend(os._get_exports_list(_socket))\n\n\n_realsocket=socket\n\n\nif sys.platform.lower().startswith(\"win\"):\n errorTab={}\n errorTab[10004]=\"The operation was interrupted.\"\n errorTab[10009]=\"A bad file handle was passed.\"\n errorTab[10013]=\"Permission denied.\"\n errorTab[10014]=\"A fault occurred on the network??\"\n errorTab[10022]=\"An invalid operation was attempted.\"\n errorTab[10035]=\"The socket operation would block\"\n errorTab[10036]=\"A blocking operation is already in progress.\"\n errorTab[10048]=\"The network address is in use.\"\n errorTab[10054]=\"The connection has been reset.\"\n errorTab[10058]=\"The network has been shut down.\"\n errorTab[10060]=\"The operation timed out.\"\n errorTab[10061]=\"Connection refused.\"\n errorTab[10063]=\"The name is too long.\"\n errorTab[10064]=\"The host is down.\"\n errorTab[10065]=\"The host is unreachable.\"\n __all__.append(\"errorTab\")\n \n \nclass socket(_socket.socket):\n\n ''\n \n __slots__=[\"__weakref__\",\"_io_refs\",\"_closed\"]\n \n def __init__(self,family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None ):\n _socket.socket.__init__(self,family,type,proto,fileno)\n self._io_refs=0\n self._closed=False\n \n def __enter__(self):\n return self\n \n def __exit__(self,*args):\n if not self._closed:\n self.close()\n \n def __repr__(self):\n ''\n s=_socket.socket.__repr__(self)\n if s.startswith(\"0:\n self._io_refs -=1\n if self._closed:\n self.close()\n \n def _real_close(self,_ss=_socket.socket):\n \n _ss.close(self)\n \n def close(self):\n \n self._closed=True\n if self._io_refs <=0:\n self._real_close()\n \n def detach(self):\n ''\n\n\n\n\n \n self._closed=True\n return super().detach()\n \ndef fromfd(fd,family,type,proto=0):\n ''\n\n\n\n \n nfd=dup(fd)\n return socket(family,type,proto,nfd)\n \nif hasattr(_socket.socket,\"share\"):\n def fromshare(info):\n ''\n\n\n\n \n return socket(0,0,0,info)\n \nif hasattr(_socket,\"socketpair\"):\n\n def socketpair(family=None ,type=SOCK_STREAM,proto=0):\n ''\n\n\n\n\n\n \n if family is None :\n try :\n family=AF_UNIX\n except NameError:\n family=AF_INET\n a,b=_socket.socketpair(family,type,proto)\n a=socket(family,type,proto,a.detach())\n b=socket(family,type,proto,b.detach())\n return a,b\n \n \n_blocking_errnos={EAGAIN,EWOULDBLOCK}\n\nclass SocketIO(io.RawIOBase):\n\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n def __init__(self,sock,mode):\n if mode not in (\"r\",\"w\",\"rw\",\"rb\",\"wb\",\"rwb\"):\n raise ValueError(\"invalid mode: %r\"%mode)\n io.RawIOBase.__init__(self)\n self._sock=sock\n if\"b\"not in mode:\n mode +=\"b\"\n self._mode=mode\n self._reading=\"r\"in mode\n self._writing=\"w\"in mode\n self._timeout_occurred=False\n \n def readinto(self,b):\n ''\n\n\n\n\n\n \n self._checkClosed()\n self._checkReadable()\n if self._timeout_occurred:\n raise IOError(\"cannot read from timed out object\")\n while True :\n try :\n return self._sock.recv_into(b)\n except timeout:\n self._timeout_occurred=True\n raise\n except InterruptedError:\n continue\n except error as e:\n if e.args[0]in _blocking_errnos:\n return None\n raise\n \n def write(self,b):\n ''\n\n\n\n \n self._checkClosed()\n self._checkWritable()\n try :\n return self._sock.send(b)\n except error as e:\n \n if e.args[0]in _blocking_errnos:\n return None\n raise\n \n def readable(self):\n ''\n \n if self.closed:\n raise ValueError(\"I/O operation on closed socket.\")\n return self._reading\n \n def writable(self):\n ''\n \n if self.closed:\n raise ValueError(\"I/O operation on closed socket.\")\n return self._writing\n \n def seekable(self):\n ''\n \n if self.closed:\n raise ValueError(\"I/O operation on closed socket.\")\n return super().seekable()\n \n def fileno(self):\n ''\n \n self._checkClosed()\n return self._sock.fileno()\n \n @property\n def name(self):\n if not self.closed:\n return self.fileno()\n else :\n return -1\n \n @property\n def mode(self):\n return self._mode\n \n def close(self):\n ''\n\n \n if self.closed:\n return\n io.RawIOBase.close(self)\n self._sock._decref_socketios()\n self._sock=None\n \n \ndef getfqdn(name=''):\n ''\n\n\n\n\n\n\n \n name=name.strip()\n if not name or name =='0.0.0.0':\n name=gethostname()\n try :\n hostname,aliases,ipaddrs=gethostbyaddr(name)\n except error:\n pass\n else :\n aliases.insert(0,hostname)\n for name in aliases:\n if'.'in name:\n break\n else :\n name=hostname\n return name\n \n \n_GLOBAL_DEFAULT_TIMEOUT=object()\n\ndef create_connection(address,timeout=_GLOBAL_DEFAULT_TIMEOUT,\nsource_address=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n host,port=address\n err=None\n for res in getaddrinfo(host,port,0,SOCK_STREAM):\n af,socktype,proto,canonname,sa=res\n sock=None\n try :\n sock=socket(af,socktype,proto)\n if timeout is not _GLOBAL_DEFAULT_TIMEOUT:\n sock.settimeout(timeout)\n if source_address:\n sock.bind(source_address)\n sock.connect(sa)\n return sock\n \n except error as _:\n err=_\n if sock is not None :\n sock.close()\n \n if err is not None :\n raise err\n else :\n raise error(\"getaddrinfo returns an empty list\")\n"], "_sre": [".py", "\n''\n\n\n\n\n\n\n\nMAXREPEAT=2147483648\n\n\nimport operator,sys\nfrom sre_constants import ATCODES,OPCODES,CHCODES\nfrom sre_constants import SRE_INFO_PREFIX,SRE_INFO_LITERAL\nfrom sre_constants import SRE_FLAG_UNICODE,SRE_FLAG_LOCALE\n\n\nimport sys\n\n\n\nMAGIC=20031017\n\n\n\n\n\n\n\n\n\n\n\n\n\nCODESIZE=4\n\ncopyright=\"_sre.py 2.4c Copyright 2005 by Nik Haldimann\"\n\n\ndef getcodesize():\n return CODESIZE\n \ndef compile(pattern,flags,code,groups=0,groupindex={},indexgroup=[None ]):\n ''\n \n return SRE_Pattern(pattern,flags,code,groups,groupindex,indexgroup)\n \ndef getlower(char_ord,flags):\n if (char_ord <128)or (flags&SRE_FLAG_UNICODE) or (flags&SRE_FLAG_LOCALE and char_ord <256):\n \n return ord(chr(char_ord).lower())\n else :\n return char_ord\n \n \nclass SRE_Pattern:\n\n def __init__(self,pattern,flags,code,groups=0,groupindex={},indexgroup=[None ]):\n self.pattern=pattern\n self.flags=flags\n self.groups=groups\n self.groupindex=groupindex\n self._indexgroup=indexgroup\n self._code=code\n \n def match(self,string,pos=0,endpos=sys.maxsize):\n ''\n\n \n state=_State(string,pos,endpos,self.flags)\n if state.match(self._code):\n return SRE_Match(self,state)\n return None\n \n def search(self,string,pos=0,endpos=sys.maxsize):\n ''\n\n\n \n state=_State(string,pos,endpos,self.flags)\n if state.search(self._code):\n return SRE_Match(self,state)\n else :\n return None\n \n def findall(self,string,pos=0,endpos=sys.maxsize):\n ''\n matchlist=[]\n state=_State(string,pos,endpos,self.flags)\n while state.start <=state.end:\n state.reset()\n state.string_position=state.start\n if not state.search(self._code):\n break\n match=SRE_Match(self,state)\n if self.groups ==0 or self.groups ==1:\n item=match.group(self.groups)\n else :\n item=match.groups(\"\")\n matchlist.append(item)\n if state.string_position ==state.start:\n state.start +=1\n else :\n state.start=state.string_position\n return matchlist\n \n def _subx(self,template,string,count=0,subn=False ):\n filter=template\n if not callable(template)and\"\\\\\"in template:\n \n \n \n \n import re as sre\n filter=sre._subx(self,template)\n state=_State(string,0,sys.maxsize,self.flags)\n sublist=[]\n \n n=last_pos=0\n while not count or n 0):\n \n if callable(filter):\n sublist.append(filter(SRE_Match(self,state)))\n else :\n sublist.append(filter)\n last_pos=state.string_position\n n +=1\n if state.string_position ==state.start:\n state.start +=1\n else :\n state.start=state.string_position\n \n if last_pos =0 and group <=self.re.groups:\n return group\n else :\n if group in self.re.groupindex:\n return self.re.groupindex[group]\n raise IndexError(\"no such group\")\n \n def _get_slice(self,group,default):\n group_indices=self.regs[group]\n if group_indices[0]>=0:\n return self.string[group_indices[0]:group_indices[1]]\n else :\n return default\n \n def start(self,group=0):\n ''\n\n \n return self.regs[self._get_index(group)][0]\n \n def end(self,group=0):\n ''\n\n \n return self.regs[self._get_index(group)][1]\n \n def span(self,group=0):\n ''\n return self.start(group),self.end(group)\n \n def expand(self,template):\n ''\n \n import sre\n return sre._expand(self.re,self,template)\n \n def groups(self,default=None ):\n ''\n\n \n groups=[]\n for indices in self.regs[1:]:\n if indices[0]>=0:\n groups.append(self.string[indices[0]:indices[1]])\n else :\n groups.append(default)\n return tuple(groups)\n \n def groupdict(self,default=None ):\n ''\n\n \n groupdict={}\n for key,value in self.re.groupindex.items():\n groupdict[key]=self._get_slice(value,default)\n return groupdict\n \n def group(self,*args):\n ''\n \n if len(args)==0:\n args=(0,)\n grouplist=[]\n for group in args:\n grouplist.append(self._get_slice(self._get_index(group),None ))\n if len(grouplist)==1:\n return grouplist[0]\n else :\n return tuple(grouplist)\n \n def __copy__():\n raise TypeError(\"cannot copy this pattern object\")\n \n def __deepcopy__():\n raise TypeError(\"cannot copy this pattern object\")\n \n \nclass _State:\n\n def __init__(self,string,start,end,flags):\n self.string=string\n if start <0:\n start=0\n if end >len(string):\n end=len(string)\n self.start=start\n self.string_position=self.start\n self.end=end\n self.pos=start\n self.flags=flags\n self.reset()\n \n def reset(self):\n self.marks=[]\n self.lastindex=-1\n self.marks_stack=[]\n self.context_stack=[]\n self.repeat=None\n \n def match(self,pattern_codes):\n \n \n \n \n \n \n \n \n \n dispatcher=_OpcodeDispatcher()\n self.context_stack.append(_MatchContext(self,pattern_codes))\n has_matched=None\n while len(self.context_stack)>0:\n context=self.context_stack[-1]\n has_matched=dispatcher.match(context)\n if has_matched is not None :\n self.context_stack.pop()\n return has_matched\n \n def search(self,pattern_codes):\n flags=0\n if pattern_codes[0]==OPCODES[\"info\"]:\n \n \n if pattern_codes[2]&SRE_INFO_PREFIX and pattern_codes[5]>1:\n return self.fast_search(pattern_codes)\n flags=pattern_codes[2]\n pattern_codes=pattern_codes[pattern_codes[1]+1:]\n \n string_position=self.start\n if pattern_codes[0]==OPCODES[\"literal\"]:\n \n \n character=pattern_codes[1]\n while True :\n while string_position =self.end:\n return False\n self.start=string_position\n string_position +=1\n self.string_position=string_position\n if flags&SRE_INFO_LITERAL:\n return True\n if self.match(pattern_codes[2:]):\n return True\n return False\n \n \n while string_position <=self.end:\n self.reset()\n self.start=self.string_position=string_position\n if self.match(pattern_codes):\n return True\n string_position +=1\n return False\n \n def fast_search(self,pattern_codes):\n ''\n \n \n \n flags=pattern_codes[2]\n prefix_len=pattern_codes[5]\n prefix_skip=pattern_codes[6]\n prefix=pattern_codes[7:7+prefix_len]\n overlap=pattern_codes[7+prefix_len -1:pattern_codes[1]+1]\n pattern_codes=pattern_codes[pattern_codes[1]+1:]\n i=0\n string_position=self.string_position\n while string_position =len(self.marks):\n self.marks.extend([None ]*(mark_nr -len(self.marks)+1))\n self.marks[mark_nr]=position\n \n def get_marks(self,group_index):\n marks_index=2 *group_index\n if len(self.marks)>marks_index+1:\n return self.marks[marks_index],self.marks[marks_index+1]\n else :\n return None ,None\n \n def marks_push(self):\n self.marks_stack.append((self.marks[:],self.lastindex))\n \n def marks_pop(self):\n self.marks,self.lastindex=self.marks_stack.pop()\n \n def marks_pop_keep(self):\n self.marks,self.lastindex=self.marks_stack[-1]\n \n def marks_pop_discard(self):\n self.marks_stack.pop()\n \n def lower(self,char_ord):\n return getlower(char_ord,self.flags)\n \n \nclass _MatchContext:\n\n def __init__(self,state,pattern_codes):\n self.state=state\n self.pattern_codes=pattern_codes\n self.string_position=state.string_position\n self.code_position=0\n self.has_matched=None\n \n def push_new_context(self,pattern_offset):\n ''\n\n \n child_context=_MatchContext(self.state,\n self.pattern_codes[self.code_position+pattern_offset:])\n \n \n \n \n self.state.context_stack.append(child_context)\n return child_context\n \n def peek_char(self,peek=0):\n return self.state.string[self.string_position+peek]\n \n def skip_char(self,skip_count):\n self.string_position +=skip_count\n \n def remaining_chars(self):\n return self.state.end -self.string_position\n \n def peek_code(self,peek=0):\n return self.pattern_codes[self.code_position+peek]\n \n def skip_code(self,skip_count):\n self.code_position +=skip_count\n \n def remaining_codes(self):\n return len(self.pattern_codes)-self.code_position\n \n def at_beginning(self):\n return self.string_position ==0\n \n def at_end(self):\n return self.string_position ==self.state.end\n \n def at_linebreak(self):\n return not self.at_end()and _is_linebreak(self.peek_char())\n \n def at_boundary(self,word_checker):\n if self.at_beginning()and self.at_end():\n return False\n that=not self.at_beginning()and word_checker(self.peek_char(-1))\n this=not self.at_end()and word_checker(self.peek_char())\n return this !=that\n \n \nclass _RepeatContext(_MatchContext):\n\n def __init__(self,context):\n _MatchContext.__init__(self,context.state,\n context.pattern_codes[context.code_position:])\n self.count=-1\n \n self.previous=context.state.repeat\n self.last_position=None\n \n \nclass _Dispatcher:\n\n DISPATCH_TABLE=None\n \n def dispatch(self,code,context):\n method=self.DISPATCH_TABLE.get(code,self.__class__.unknown)\n return method(self,context)\n \n def unknown(self,code,ctx):\n raise NotImplementedError()\n \n def build_dispatch_table(cls,code_dict,method_prefix):\n if cls.DISPATCH_TABLE is not None :\n return\n table={}\n for key,value in code_dict.items():\n if hasattr(cls,\"%s%s\"%(method_prefix,key)):\n table[value]=getattr(cls,\"%s%s\"%(method_prefix,key))\n cls.DISPATCH_TABLE=table\n \n build_dispatch_table=classmethod(build_dispatch_table)\n \n \nclass _OpcodeDispatcher(_Dispatcher):\n\n def __init__(self):\n self.executing_contexts={}\n self.at_dispatcher=_AtcodeDispatcher()\n self.ch_dispatcher=_ChcodeDispatcher()\n self.set_dispatcher=_CharsetDispatcher()\n \n def match(self,context):\n ''\n\n \n while context.remaining_codes()>0 and context.has_matched is None :\n opcode=context.peek_code()\n if not self.dispatch(opcode,context):\n return None\n if context.has_matched is None :\n context.has_matched=False\n return context.has_matched\n \n def dispatch(self,opcode,context):\n ''\n \n \n if id(context)in self.executing_contexts:\n generator=self.executing_contexts[id(context)]\n del self.executing_contexts[id(context)]\n has_finished=next(generator)\n else :\n method=self.DISPATCH_TABLE.get(opcode,_OpcodeDispatcher.unknown)\n has_finished=method(self,context)\n if hasattr(has_finished,\"__next__\"):\n generator=has_finished\n has_finished=next(generator)\n if not has_finished:\n self.executing_contexts[id(context)]=generator\n return has_finished\n \n def op_success(self,ctx):\n \n \n ctx.state.string_position=ctx.string_position\n ctx.has_matched=True\n return True\n \n def op_failure(self,ctx):\n \n \n ctx.has_matched=False\n return True\n \n def general_op_literal(self,ctx,compare,decorate=lambda x:x):\n \n if ctx.at_end()or not compare(decorate(ord(ctx.peek_char())),\n decorate(ctx.peek_code(1))):\n ctx.has_matched=False\n ctx.skip_code(2)\n ctx.skip_char(1)\n \n def op_literal(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.eq)\n return True\n \n def op_not_literal(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.ne)\n return True\n \n def op_literal_ignore(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.eq,ctx.state.lower)\n return True\n \n def op_not_literal_ignore(self,ctx):\n \n \n \n self.general_op_literal(ctx,operator.ne,ctx.state.lower)\n return True\n \n def op_at(self,ctx):\n \n \n \n if not self.at_dispatcher.dispatch(ctx.peek_code(1),ctx):\n ctx.has_matched=False\n \n return True\n ctx.skip_code(2)\n return True\n \n def op_category(self,ctx):\n \n \n \n if ctx.at_end()or not self.ch_dispatcher.dispatch(ctx.peek_code(1),ctx):\n ctx.has_matched=False\n \n return True\n ctx.skip_code(2)\n ctx.skip_char(1)\n return True\n \n def op_any(self,ctx):\n \n \n \n if ctx.at_end()or ctx.at_linebreak():\n ctx.has_matched=False\n \n return True\n ctx.skip_code(1)\n ctx.skip_char(1)\n return True\n \n def op_any_all(self,ctx):\n \n \n \n if ctx.at_end():\n ctx.has_matched=False\n \n return True\n ctx.skip_code(1)\n ctx.skip_char(1)\n return True\n \n def general_op_in(self,ctx,decorate=lambda x:x):\n \n \n if ctx.at_end():\n ctx.has_matched=False\n \n return\n skip=ctx.peek_code(1)\n ctx.skip_code(2)\n \n \n if not self.check_charset(ctx,decorate(ord(ctx.peek_char()))):\n \n ctx.has_matched=False\n return\n ctx.skip_code(skip -1)\n ctx.skip_char(1)\n \n \n def op_in(self,ctx):\n \n \n \n self.general_op_in(ctx)\n return True\n \n def op_in_ignore(self,ctx):\n \n \n \n self.general_op_in(ctx,ctx.state.lower)\n return True\n \n def op_jump(self,ctx):\n \n \n \n ctx.skip_code(ctx.peek_code(1)+1)\n return True\n \n \n \n op_info=op_jump\n \n def op_mark(self,ctx):\n \n \n \n ctx.state.set_mark(ctx.peek_code(1),ctx.string_position)\n ctx.skip_code(2)\n return True\n \n def op_branch(self,ctx):\n \n \n \n ctx.state.marks_push()\n ctx.skip_code(1)\n current_branch_length=ctx.peek_code(0)\n while current_branch_length:\n \n \n if not (ctx.peek_code(1)==OPCODES[\"literal\"]and (ctx.at_end()or ctx.peek_code(2)!=ord(ctx.peek_char()))):\n ctx.state.string_position=ctx.string_position\n child_context=ctx.push_new_context(1)\n \n yield False\n if child_context.has_matched:\n ctx.has_matched=True\n yield True\n ctx.state.marks_pop_keep()\n ctx.skip_code(current_branch_length)\n current_branch_length=ctx.peek_code(0)\n ctx.state.marks_pop_discard()\n ctx.has_matched=False\n \n yield True\n \n def op_repeat_one(self,ctx):\n \n \n \n \n mincount=ctx.peek_code(2)\n maxcount=ctx.peek_code(3)\n \n \n \n if ctx.remaining_chars()=mincount and (ctx.at_end()or ord(ctx.peek_char())!=char):\n ctx.skip_char(-1)\n count -=1\n if count =mincount:\n ctx.state.string_position=ctx.string_position\n child_context=ctx.push_new_context(ctx.peek_code(1)+1)\n yield False\n if child_context.has_matched:\n ctx.has_matched=True\n yield True\n ctx.skip_char(-1)\n count -=1\n ctx.state.marks_pop_keep()\n \n ctx.state.marks_pop_discard()\n ctx.has_matched=False\n \n yield True\n \n def op_min_repeat_one(self,ctx):\n \n \n mincount=ctx.peek_code(2)\n maxcount=ctx.peek_code(3)\n \n \n if ctx.remaining_chars()=maxcount and maxcount !=MAXREPEAT:\n ctx.has_matched=False\n \n yield True\n repeat.count=count\n child_context=repeat.push_new_context(4)\n yield False\n ctx.has_matched=child_context.has_matched\n if not ctx.has_matched:\n repeat.count=count -1\n ctx.state.string_position=ctx.string_position\n yield True\n \n def general_op_groupref(self,ctx,decorate=lambda x:x):\n group_start,group_end=ctx.state.get_marks(ctx.peek_code(1))\n if group_start is None or group_end is None or group_end =0:\n child_context=ctx.push_new_context(3)\n yield False\n if child_context.has_matched:\n ctx.has_matched=False\n yield True\n ctx.skip_code(ctx.peek_code(1)+1)\n yield True\n \n def unknown(self,ctx):\n \n raise RuntimeError(\"Internal re error. Unknown opcode: %s\"%ctx.peek_code())\n \n def check_charset(self,ctx,char):\n ''\n \n self.set_dispatcher.reset(char)\n save_position=ctx.code_position\n result=None\n while result is None :\n result=self.set_dispatcher.dispatch(ctx.peek_code(),ctx)\n ctx.code_position=save_position\n \n return result\n \n def count_repetitions(self,ctx,maxcount):\n ''\n\n \n count=0\n real_maxcount=ctx.state.end -ctx.string_position\n if maxcount >4) &(1 <<(char_code&15)):\n return self.ok\n ctx.skip_code(16)\n else :\n if char_code <256 and ctx.peek_code(char_code >>5) &(1 <<(char_code&31)):\n return self.ok\n ctx.skip_code(8)\n def set_range(self,ctx):\n \n if ctx.peek_code(1)<=self.char <=ctx.peek_code(2):\n return self.ok\n ctx.skip_code(3)\n def set_negate(self,ctx):\n self.ok=not self.ok\n ctx.skip_code(1)\n \n \n def set_bigcharset(self,ctx):\n raise NotImplementationError(\"_sre.py: set_bigcharset, array not implemented\")\n \n char_code=self.char\n count=ctx.peek_code(1)\n ctx.skip_code(2)\n if char_code <65536:\n block_index=char_code >>8\n \n a=array.array(\"B\")\n a.fromstring(array.array(CODESIZE ==2 and\"H\"or\"I\",\n [ctx.peek_code(block_index //CODESIZE)]).tostring())\n block=a[block_index %CODESIZE]\n ctx.skip_code(256 //CODESIZE)\n block_value=ctx.peek_code(block *(32 //CODESIZE)\n +((char_code&255)>>(CODESIZE ==2 and 4 or 5)))\n if block_value&(1 <<(char_code&((8 *CODESIZE)-1))):\n return self.ok\n else :\n ctx.skip_code(256 //CODESIZE)\n ctx.skip_code(count *(32 //CODESIZE))\n \n def unknown(self,ctx):\n return False\n \n_CharsetDispatcher.build_dispatch_table(OPCODES,\"set_\")\n\n\nclass _AtcodeDispatcher(_Dispatcher):\n\n def at_beginning(self,ctx):\n return ctx.at_beginning()\n at_beginning_string=at_beginning\n def at_beginning_line(self,ctx):\n return ctx.at_beginning()or _is_linebreak(ctx.peek_char(-1))\n def at_end(self,ctx):\n return (ctx.remaining_chars()==1 and ctx.at_linebreak())or ctx.at_end()\n def at_end_line(self,ctx):\n return ctx.at_linebreak()or ctx.at_end()\n def at_end_string(self,ctx):\n return ctx.at_end()\n def at_boundary(self,ctx):\n return ctx.at_boundary(_is_word)\n def at_non_boundary(self,ctx):\n return not ctx.at_boundary(_is_word)\n def at_loc_boundary(self,ctx):\n return ctx.at_boundary(_is_loc_word)\n def at_loc_non_boundary(self,ctx):\n return not ctx.at_boundary(_is_loc_word)\n def at_uni_boundary(self,ctx):\n return ctx.at_boundary(_is_uni_word)\n def at_uni_non_boundary(self,ctx):\n return not ctx.at_boundary(_is_uni_word)\n def unknown(self,ctx):\n return False\n \n_AtcodeDispatcher.build_dispatch_table(ATCODES,\"\")\n\n\nclass _ChcodeDispatcher(_Dispatcher):\n\n def category_digit(self,ctx):\n return _is_digit(ctx.peek_char())\n def category_not_digit(self,ctx):\n return not _is_digit(ctx.peek_char())\n def category_space(self,ctx):\n return _is_space(ctx.peek_char())\n def category_not_space(self,ctx):\n return not _is_space(ctx.peek_char())\n def category_word(self,ctx):\n return _is_word(ctx.peek_char())\n def category_not_word(self,ctx):\n return not _is_word(ctx.peek_char())\n def category_linebreak(self,ctx):\n return _is_linebreak(ctx.peek_char())\n def category_not_linebreak(self,ctx):\n return not _is_linebreak(ctx.peek_char())\n def category_loc_word(self,ctx):\n return _is_loc_word(ctx.peek_char())\n def category_loc_not_word(self,ctx):\n return not _is_loc_word(ctx.peek_char())\n def category_uni_digit(self,ctx):\n return ctx.peek_char().isdigit()\n def category_uni_not_digit(self,ctx):\n return not ctx.peek_char().isdigit()\n def category_uni_space(self,ctx):\n return ctx.peek_char().isspace()\n def category_uni_not_space(self,ctx):\n return not ctx.peek_char().isspace()\n def category_uni_word(self,ctx):\n return _is_uni_word(ctx.peek_char())\n def category_uni_not_word(self,ctx):\n return not _is_uni_word(ctx.peek_char())\n def category_uni_linebreak(self,ctx):\n return ord(ctx.peek_char())in _uni_linebreaks\n def category_uni_not_linebreak(self,ctx):\n return ord(ctx.peek_char())not in _uni_linebreaks\n def unknown(self,ctx):\n return False\n \n_ChcodeDispatcher.build_dispatch_table(CHCODES,\"\")\n\n\n_ascii_char_info=[0,0,0,0,0,0,0,0,0,2,6,2,\n2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,25,25,25,25,25,25,25,25,\n25,25,0,0,0,0,0,0,0,24,24,24,24,24,24,24,24,24,24,\n24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,0,0,\n0,0,16,0,24,24,24,24,24,24,24,24,24,24,24,24,24,24,\n24,24,24,24,24,24,24,24,24,24,24,24,0,0,0,0,0]\n\ndef _is_digit(char):\n code=ord(char)\n return code <128 and _ascii_char_info[code]&1\n \ndef _is_space(char):\n code=ord(char)\n return code <128 and _ascii_char_info[code]&2\n \ndef _is_word(char):\n\n code=ord(char)\n return code <128 and _ascii_char_info[code]&16\n \ndef _is_loc_word(char):\n return (not (ord(char)&~255)and char.isalnum())or char =='_'\n \ndef _is_uni_word(char):\n\n\n return chr(ord(char)).isalnum()or char =='_'\n \ndef _is_linebreak(char):\n return char ==\"\\n\"\n \n \n_uni_linebreaks=[10,13,28,29,30,133,8232,8233]\n\ndef _log(message):\n if 0:\n print(message)\n"], "itertools": [".py", "import operator\n\nclass accumulate:\n def __init__(self,iterable,func=operator.add):\n self.it=iter(iterable)\n self._total=None\n self.func=func\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if not self._total:\n self._total=next(self.it)\n return self._total\n else :\n element=next(self.it)\n try :\n self._total=self.func(self._total,element)\n except :\n raise TypeError(\"unsupported operand type\")\n return self._total\n \n \n \nclass chain:\n def __init__(self,*iterables):\n self._iterables_iter=iter(map(iter,iterables))\n \n self._cur_iterable_iter=iter([])\n \n def __iter__(self):\n return self\n \n def __next__(self):\n while True :\n try :\n return next(self._cur_iterable_iter)\n except StopIteration:\n self._cur_iterable_iter=next(self._iterables_iter)\n \n @classmethod\n def from_iterable(cls,iterable):\n for it in iterable:\n for element in it:\n yield element\n \nclass combinations:\n def __init__(self,iterable,r):\n self.pool=tuple(iterable)\n self.n=len(self.pool)\n self.r=r\n self.indices=list(range(self.r))\n self.zero=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if self.r >self.n:\n raise StopIteration\n if not self.zero:\n self.zero=True\n return tuple(self.pool[i]for i in self.indices)\n else :\n try :\n for i in reversed(range(self.r)):\n if self.indices[i]!=i+self.n -self.r:\n break\n self.indices[i]+=1\n for j in range(i+1,self.r):\n self.indices[j]=self.indices[j -1]+1\n return tuple(self.pool[i]for i in self.indices)\n except :\n raise StopIteration\n \nclass combinations_with_replacement:\n def __init__(self,iterable,r):\n self.pool=tuple(iterable)\n self.n=len(self.pool)\n self.r=r\n self.indices=[0]*self.r\n self.zero=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if not self.n and self.r:\n raise StopIteration\n if not self.zero:\n self.zero=True\n return tuple(self.pool[i]for i in self.indices)\n else :\n try :\n for i in reversed(range(self.r)):\n if self.indices[i]!=self.n -1:\n break\n self.indices[i:]=[self.indices[i]+1]*(self.r -i)\n return tuple(self.pool[i]for i in self.indices)\n except :\n raise StopIteration\n \n \n \nclass compress:\n def __init__(self,data,selectors):\n self.data=iter(data)\n self.selectors=iter(selectors)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n while True :\n next_item=next(self.data)\n next_selector=next(self.selectors)\n if bool(next_selector):\n return next_item\n \n \n \n \nclass count:\n ''\n\n\n\n \n def __init__(self,start=0,step=1):\n if not isinstance(start,(int,float)):\n raise TypeError('a number is required')\n self.times=start -step\n self.step=step\n \n def __iter__(self):\n return self\n \n def __next__(self):\n self.times +=self.step\n return self.times\n \n def __repr__(self):\n return'count(%d)'%(self.times+self.step)\n \n \n \nclass cycle:\n def __init__(self,iterable):\n self._cur_iter=iter(iterable)\n self._saved=[]\n self._must_save=True\n \n def __iter__(self):\n return self\n \n def __next__(self):\n try :\n next_elt=next(self._cur_iter)\n if self._must_save:\n self._saved.append(next_elt)\n except StopIteration:\n self._cur_iter=iter(self._saved)\n next_elt=next(self._cur_iter)\n self._must_save=False\n return next_elt\n \n \n \nclass dropwhile:\n def __init__(self,predicate,iterable):\n self._predicate=predicate\n self._iter=iter(iterable)\n self._dropped=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n value=next(self._iter)\n if self._dropped:\n return value\n while self._predicate(value):\n value=next(self._iter)\n self._dropped=True\n return value\n \n \n \nclass filterfalse:\n def __init__(self,predicate,iterable):\n \n self._iter=iter(iterable)\n if predicate is None :\n self._predicate=bool\n else :\n self._predicate=predicate\n \n def __iter__(self):\n return self\n def __next__(self):\n next_elt=next(self._iter)\n while True :\n if not self._predicate(next_elt):\n return next_elt\n next_elt=next(self._iter)\n \nclass groupby:\n\n\n def __init__(self,iterable,key=None ):\n if key is None :\n key=lambda x:x\n self.keyfunc=key\n self.it=iter(iterable)\n self.tgtkey=self.currkey=self.currvalue=object()\n def __iter__(self):\n return self\n def __next__(self):\n while self.currkey ==self.tgtkey:\n self.currvalue=next(self.it)\n self.currkey=self.keyfunc(self.currvalue)\n self.tgtkey=self.currkey\n return (self.currkey,self._grouper(self.tgtkey))\n def _grouper(self,tgtkey):\n while self.currkey ==tgtkey:\n yield self.currvalue\n self.currvalue=next(self.it)\n self.currkey=self.keyfunc(self.currvalue)\n \n \n \nclass islice:\n def __init__(self,iterable,*args):\n s=slice(*args)\n self.start,self.stop,self.step=s.start or 0,s.stop,s.step\n if not isinstance(self.start,int):\n raise ValueError(\"Start argument must be an integer\")\n if self.stop !=None and not isinstance(self.stop,int):\n raise ValueError(\"Stop argument must be an integer or None\")\n if self.step is None :\n self.step=1\n if self.start <0 or (self.stop !=None and self.stop <0\n )or self.step <=0:\n raise ValueError(\"indices for islice() must be positive\")\n self.it=iter(iterable)\n self.donext=None\n self.cnt=0\n \n def __iter__(self):\n return self\n \n def __next__(self):\n nextindex=self.start\n if self.stop !=None and nextindex >=self.stop:\n raise StopIteration\n while self.cnt <=nextindex:\n nextitem=next(self.it)\n self.cnt +=1\n self.start +=self.step\n return nextitem\n \nclass permutations:\n def __init__(self,iterable,r=None ):\n self.pool=tuple(iterable)\n self.n=len(self.pool)\n self.r=self.n if r is None else r\n self.indices=list(range(self.n))\n self.cycles=list(range(self.n,self.n -self.r,-1))\n self.zero=False\n self.stop=False\n \n def __iter__(self):\n return self\n \n def __next__(self):\n indices=self.indices\n if self.r >self.n:\n raise StopIteration\n if not self.zero:\n self.zero=True\n return tuple(self.pool[i]for i in indices[:self.r])\n \n i=self.r -1\n while i >=0:\n j=self.cycles[i]-1\n if j >0:\n self.cycles[i]=j\n indices[i],indices[-j]=indices[-j],indices[i]\n return tuple(self.pool[i]for i in indices[:self.r])\n self.cycles[i]=len(indices)-i\n n1=len(indices)-1\n assert n1 >=0\n num=indices[i]\n for k in range(i,n1):\n indices[k]=indices[k+1]\n indices[n1]=num\n i -=1\n raise StopIteration\n \n \ndef product(*args,repeat=1):\n\n\n pools=[tuple(pool)for pool in args]*repeat\n result=[[]]\n for pool in pools:\n result=[x+[y]for x in result for y in pool]\n for prod in result:\n yield tuple(prod)\n \n \n \n \n \n \n \n \nclass _product:\n def __init__(self,*args,**kw):\n if len(kw)>1:\n raise TypeError(\"product() takes at most 1 argument (%d given)\"%\n len(kw))\n self.repeat=kw.get('repeat',1)\n if not isinstance(self.repeat,int):\n raise TypeError(\"integer argument expected, got %s\"%\n type(self.repeat))\n self.gears=[x for x in args]*self.repeat\n self.num_gears=len(self.gears)\n \n self.indicies=[(0,len(self.gears[x]))\n for x in range(0,self.num_gears)]\n self.cont=True\n self.zero=False\n \n def roll_gears(self):\n \n \n \n should_carry=True\n for n in range(0,self.num_gears):\n nth_gear=self.num_gears -n -1\n if should_carry:\n count,lim=self.indicies[nth_gear]\n count +=1\n if count ==lim and nth_gear ==0:\n self.cont=False\n if count ==lim:\n should_carry=True\n count=0\n else :\n should_carry=False\n self.indicies[nth_gear]=(count,lim)\n else :\n break\n \n def __iter__(self):\n return self\n \n def __next__(self):\n if self.zero:\n raise StopIteration\n if self.repeat >0:\n if not self.cont:\n raise StopIteration\n l=[]\n for x in range(0,self.num_gears):\n index,limit=self.indicies[x]\n print('itertools 353',self.gears,x,index)\n l.append(self.gears[x][index])\n self.roll_gears()\n return tuple(l)\n elif self.repeat ==0:\n self.zero=True\n return ()\n else :\n raise ValueError(\"repeat argument cannot be negative\")\n \n \n \nclass repeat:\n def __init__(self,obj,times=None ):\n self._obj=obj\n if times is not None :\n range(times)\n if times <0:\n times=0\n self._times=times\n \n def __iter__(self):\n return self\n \n def __next__(self):\n \n if self._times is not None :\n if self._times <=0:\n raise StopIteration()\n self._times -=1\n return self._obj\n \n def __repr__(self):\n if self._times is not None :\n return'repeat(%r, %r)'%(self._obj,self._times)\n else :\n return'repeat(%r)'%(self._obj,)\n \n def __len__(self):\n if self._times ==-1 or self._times is None :\n raise TypeError(\"len() of uniszed object\")\n return self._times\n \n \n \nclass starmap(object):\n def __init__(self,function,iterable):\n self._func=function\n self._iter=iter(iterable)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n t=next(self._iter)\n return self._func(*t)\n \n \n \nclass takewhile(object):\n def __init__(self,predicate,iterable):\n self._predicate=predicate\n self._iter=iter(iterable)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n value=next(self._iter)\n if not self._predicate(value):\n raise StopIteration()\n return value\n \n \n \nclass TeeData(object):\n def __init__(self,iterator):\n self.data=[]\n self._iter=iterator\n \n def __getitem__(self,i):\n \n while i >=len(self.data):\n self.data.append(next(self._iter))\n return self.data[i]\n \n \nclass TeeObject(object):\n def __init__(self,iterable=None ,tee_data=None ):\n if tee_data:\n self.tee_data=tee_data\n self.pos=0\n \n elif isinstance(iterable,TeeObject):\n self.tee_data=iterable.tee_data\n self.pos=iterable.pos\n else :\n self.tee_data=TeeData(iter(iterable))\n self.pos=0\n \n def __next__(self):\n data=self.tee_data[self.pos]\n self.pos +=1\n return data\n \n def __iter__(self):\n return self\n \n \ndef tee(iterable,n=2):\n if isinstance(iterable,TeeObject):\n return tuple([iterable]+\n [TeeObject(tee_data=iterable.tee_data)for i in range(n -1)])\n tee_data=TeeData(iter(iterable))\n return tuple([TeeObject(tee_data=tee_data)for i in range(n)])\n \nclass zip_longest:\n def __init__(self,*args,fillvalue=None ):\n self.args=[iter(arg)for arg in args]\n self.fillvalue=fillvalue\n self.units=len(args)\n \n def __iter__(self):\n return self\n \n def __next__(self):\n temp=[]\n nb=0\n for i in range(self.units):\n try :\n temp.append(next(self.args[i]))\n nb +=1\n except StopIteration:\n temp.append(self.fillvalue)\n if nb ==0:\n raise StopIteration\n return tuple(temp)\n"], "encodings.cp1125": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1125',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x0410,\n0x0081:0x0411,\n0x0082:0x0412,\n0x0083:0x0413,\n0x0084:0x0414,\n0x0085:0x0415,\n0x0086:0x0416,\n0x0087:0x0417,\n0x0088:0x0418,\n0x0089:0x0419,\n0x008a:0x041a,\n0x008b:0x041b,\n0x008c:0x041c,\n0x008d:0x041d,\n0x008e:0x041e,\n0x008f:0x041f,\n0x0090:0x0420,\n0x0091:0x0421,\n0x0092:0x0422,\n0x0093:0x0423,\n0x0094:0x0424,\n0x0095:0x0425,\n0x0096:0x0426,\n0x0097:0x0427,\n0x0098:0x0428,\n0x0099:0x0429,\n0x009a:0x042a,\n0x009b:0x042b,\n0x009c:0x042c,\n0x009d:0x042d,\n0x009e:0x042e,\n0x009f:0x042f,\n0x00a0:0x0430,\n0x00a1:0x0431,\n0x00a2:0x0432,\n0x00a3:0x0433,\n0x00a4:0x0434,\n0x00a5:0x0435,\n0x00a6:0x0436,\n0x00a7:0x0437,\n0x00a8:0x0438,\n0x00a9:0x0439,\n0x00aa:0x043a,\n0x00ab:0x043b,\n0x00ac:0x043c,\n0x00ad:0x043d,\n0x00ae:0x043e,\n0x00af:0x043f,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x2561,\n0x00b6:0x2562,\n0x00b7:0x2556,\n0x00b8:0x2555,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x255c,\n0x00be:0x255b,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x255e,\n0x00c7:0x255f,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x2567,\n0x00d0:0x2568,\n0x00d1:0x2564,\n0x00d2:0x2565,\n0x00d3:0x2559,\n0x00d4:0x2558,\n0x00d5:0x2552,\n0x00d6:0x2553,\n0x00d7:0x256b,\n0x00d8:0x256a,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x258c,\n0x00de:0x2590,\n0x00df:0x2580,\n0x00e0:0x0440,\n0x00e1:0x0441,\n0x00e2:0x0442,\n0x00e3:0x0443,\n0x00e4:0x0444,\n0x00e5:0x0445,\n0x00e6:0x0446,\n0x00e7:0x0447,\n0x00e8:0x0448,\n0x00e9:0x0449,\n0x00ea:0x044a,\n0x00eb:0x044b,\n0x00ec:0x044c,\n0x00ed:0x044d,\n0x00ee:0x044e,\n0x00ef:0x044f,\n0x00f0:0x0401,\n0x00f1:0x0451,\n0x00f2:0x0490,\n0x00f3:0x0491,\n0x00f4:0x0404,\n0x00f5:0x0454,\n0x00f6:0x0406,\n0x00f7:0x0456,\n0x00f8:0x0407,\n0x00f9:0x0457,\n0x00fa:0x00b7,\n0x00fb:0x221a,\n0x00fc:0x2116,\n0x00fd:0x00a4,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\u2561'\n'\\u2562'\n'\\u2556'\n'\\u2555'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\u255c'\n'\\u255b'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\u255e'\n'\\u255f'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\u2567'\n'\\u2568'\n'\\u2564'\n'\\u2565'\n'\\u2559'\n'\\u2558'\n'\\u2552'\n'\\u2553'\n'\\u256b'\n'\\u256a'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\u258c'\n'\\u2590'\n'\\u2580'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u0401'\n'\\u0451'\n'\\u0490'\n'\\u0491'\n'\\u0404'\n'\\u0454'\n'\\u0406'\n'\\u0456'\n'\\u0407'\n'\\u0457'\n'\\xb7'\n'\\u221a'\n'\\u2116'\n'\\xa4'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a4:0x00fd,\n0x00b7:0x00fa,\n0x0401:0x00f0,\n0x0404:0x00f4,\n0x0406:0x00f6,\n0x0407:0x00f8,\n0x0410:0x0080,\n0x0411:0x0081,\n0x0412:0x0082,\n0x0413:0x0083,\n0x0414:0x0084,\n0x0415:0x0085,\n0x0416:0x0086,\n0x0417:0x0087,\n0x0418:0x0088,\n0x0419:0x0089,\n0x041a:0x008a,\n0x041b:0x008b,\n0x041c:0x008c,\n0x041d:0x008d,\n0x041e:0x008e,\n0x041f:0x008f,\n0x0420:0x0090,\n0x0421:0x0091,\n0x0422:0x0092,\n0x0423:0x0093,\n0x0424:0x0094,\n0x0425:0x0095,\n0x0426:0x0096,\n0x0427:0x0097,\n0x0428:0x0098,\n0x0429:0x0099,\n0x042a:0x009a,\n0x042b:0x009b,\n0x042c:0x009c,\n0x042d:0x009d,\n0x042e:0x009e,\n0x042f:0x009f,\n0x0430:0x00a0,\n0x0431:0x00a1,\n0x0432:0x00a2,\n0x0433:0x00a3,\n0x0434:0x00a4,\n0x0435:0x00a5,\n0x0436:0x00a6,\n0x0437:0x00a7,\n0x0438:0x00a8,\n0x0439:0x00a9,\n0x043a:0x00aa,\n0x043b:0x00ab,\n0x043c:0x00ac,\n0x043d:0x00ad,\n0x043e:0x00ae,\n0x043f:0x00af,\n0x0440:0x00e0,\n0x0441:0x00e1,\n0x0442:0x00e2,\n0x0443:0x00e3,\n0x0444:0x00e4,\n0x0445:0x00e5,\n0x0446:0x00e6,\n0x0447:0x00e7,\n0x0448:0x00e8,\n0x0449:0x00e9,\n0x044a:0x00ea,\n0x044b:0x00eb,\n0x044c:0x00ec,\n0x044d:0x00ed,\n0x044e:0x00ee,\n0x044f:0x00ef,\n0x0451:0x00f1,\n0x0454:0x00f5,\n0x0456:0x00f7,\n0x0457:0x00f9,\n0x0490:0x00f2,\n0x0491:0x00f3,\n0x2116:0x00fc,\n0x221a:0x00fb,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2552:0x00d5,\n0x2553:0x00d6,\n0x2554:0x00c9,\n0x2555:0x00b8,\n0x2556:0x00b7,\n0x2557:0x00bb,\n0x2558:0x00d4,\n0x2559:0x00d3,\n0x255a:0x00c8,\n0x255b:0x00be,\n0x255c:0x00bd,\n0x255d:0x00bc,\n0x255e:0x00c6,\n0x255f:0x00c7,\n0x2560:0x00cc,\n0x2561:0x00b5,\n0x2562:0x00b6,\n0x2563:0x00b9,\n0x2564:0x00d1,\n0x2565:0x00d2,\n0x2566:0x00cb,\n0x2567:0x00cf,\n0x2568:0x00d0,\n0x2569:0x00ca,\n0x256a:0x00d8,\n0x256b:0x00d7,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x258c:0x00dd,\n0x2590:0x00de,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "multiprocessing.process": [".py", "\n\n\n\n\n\n\n\n\n__all__=['Process','current_process','active_children']\n\n\n\n\n\nimport os\nimport sys\nimport signal\nimport itertools\nfrom _weakrefset import WeakSet\n\n\nfrom _multiprocessing import Process\n\n\n\n\ntry :\n ORIGINAL_DIR=os.path.abspath(os.getcwd())\nexcept OSError:\n ORIGINAL_DIR=None\n \n \n \n \n \ndef current_process():\n ''\n\n \n return _current_process\n \ndef active_children():\n ''\n\n \n _cleanup()\n return list(_current_process._children)\n \n \n \n \n \ndef _cleanup():\n\n for p in list(_current_process._children):\n if p._popen.poll()is not None :\n _current_process._children.discard(p)\n \n \n \n \n \n \n \n \n \n \n \n \nclass AuthenticationString(bytes):\n def __reduce__(self):\n from .forking import Popen\n if not Popen.thread_is_spawning():\n raise TypeError(\n 'Pickling an AuthenticationString object is '\n 'disallowed for security reasons'\n )\n return AuthenticationString,(bytes(self),)\n \n \n \n \n \nclass _MainProcess(Process):\n\n def __init__(self):\n self._identity=()\n self._daemonic=False\n self._name='MainProcess'\n self._parent_pid=None\n self._popen=None\n self._counter=itertools.count(1)\n self._children=set()\n self._authkey=AuthenticationString(os.urandom(32))\n self._tempdir=None\n \n_current_process=_MainProcess()\ndel _MainProcess\n\n\n\n\n\n_exitcode_to_name={}\n\nfor name,signum in list(signal.__dict__.items()):\n if name[:3]=='SIG'and'_'not in name:\n _exitcode_to_name[-signum]=name\n \n \n_dangling=WeakSet()\n"], "urllib.error": [".py", "class HTTPError(Exception):pass"], "doctest": [".py", "\n\n\n\n\n\n\n\nr\"\"\"Module doctest -- a framework for running examples in docstrings.\n\nIn simplest use, end each module M to be tested with:\n\ndef _test():\n import doctest\n doctest.testmod()\n\nif __name__ == \"__main__\":\n _test()\n\nThen running the module as a script will cause the examples in the\ndocstrings to get executed and verified:\n\npython M.py\n\nThis won't display anything unless an example fails, in which case the\nfailing example(s) and the cause(s) of the failure(s) are printed to stdout\n(why not stderr? because stderr is a lame hack <0.2 wink>), and the final\nline of output is \"Test failed.\".\n\nRun it with the -v switch instead:\n\npython M.py -v\n\nand a detailed report of all examples tried is printed to stdout, along\nwith assorted summaries at the end.\n\nYou can force verbose mode by passing \"verbose=True\" to testmod, or prohibit\nit by passing \"verbose=False\". In either of those cases, sys.argv is not\nexamined by testmod.\n\nThere are a variety of other ways to run doctests, including integration\nwith the unittest framework, and support for running non-Python text\nfiles containing doctests. There are also many ways to override parts\nof doctest's default behaviors. See the Library Reference Manual for\ndetails.\n\"\"\"\n\n__docformat__='reStructuredText en'\n\n__all__=[\n\n'register_optionflag',\n'DONT_ACCEPT_TRUE_FOR_1',\n'DONT_ACCEPT_BLANKLINE',\n'NORMALIZE_WHITESPACE',\n'ELLIPSIS',\n'SKIP',\n'IGNORE_EXCEPTION_DETAIL',\n'COMPARISON_FLAGS',\n'REPORT_UDIFF',\n'REPORT_CDIFF',\n'REPORT_NDIFF',\n'REPORT_ONLY_FIRST_FAILURE',\n'REPORTING_FLAGS',\n'FAIL_FAST',\n\n\n'Example',\n'DocTest',\n\n'DocTestParser',\n\n'DocTestFinder',\n\n'DocTestRunner',\n'OutputChecker',\n'DocTestFailure',\n'UnexpectedException',\n'DebugRunner',\n\n'testmod',\n'testfile',\n'run_docstring_examples',\n\n'DocTestSuite',\n'DocFileSuite',\n'set_unittest_reportflags',\n\n'script_from_examples',\n'testsource',\n'debug_src',\n'debug',\n]\n\nimport __future__\nimport argparse\nimport difflib\nimport inspect\nimport linecache\nimport os\nimport pdb\nimport re\nimport sys\nimport traceback\nimport unittest\nfrom io import StringIO\nfrom collections import namedtuple\n\nTestResults=namedtuple('TestResults','failed attempted')\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nOPTIONFLAGS_BY_NAME={}\ndef register_optionflag(name):\n\n return OPTIONFLAGS_BY_NAME.setdefault(name,1 <=2\n \n \n startpos,endpos=0,len(got)\n w=ws[0]\n if w:\n if got.startswith(w):\n startpos=len(w)\n del ws[0]\n else :\n return False\n w=ws[-1]\n if w:\n if got.endswith(w):\n endpos -=len(w)\n del ws[-1]\n else :\n return False\n \n if startpos >endpos:\n \n \n return False\n \n \n \n \n for w in ws:\n \n \n \n startpos=got.find(w,startpos,endpos)\n if startpos <0:\n return False\n startpos +=len(w)\n \n return True\n \ndef _comment_line(line):\n ''\n line=line.rstrip()\n if line:\n return'# '+line\n else :\n return'#'\n \ndef _strip_exception_details(msg):\n\n\n\n\n\n\n\n\n\n\n start,end=0,len(msg)\n \n i=msg.find(\"\\n\")\n if i >=0:\n end=i\n \n i=msg.find(':',0,end)\n if i >=0:\n end=i\n \n i=msg.rfind('.',0,end)\n if i >=0:\n start=i+1\n return msg[start:end]\n \nclass _OutputRedirectingPdb(pdb.Pdb):\n ''\n\n\n\n \n def __init__(self,out):\n self.__out=out\n self.__debugger_used=False\n \n pdb.Pdb.__init__(self,stdout=out,nosigint=True )\n \n self.use_rawinput=1\n \n def set_trace(self,frame=None ):\n self.__debugger_used=True\n if frame is None :\n frame=sys._getframe().f_back\n pdb.Pdb.set_trace(self,frame)\n \n def set_continue(self):\n \n \n if self.__debugger_used:\n pdb.Pdb.set_continue(self)\n \n def trace_dispatch(self,*args):\n \n save_stdout=sys.stdout\n sys.stdout=self.__out\n \n try :\n return pdb.Pdb.trace_dispatch(self,*args)\n finally :\n sys.stdout=save_stdout\n \n \ndef _module_relative_path(module,path):\n if not inspect.ismodule(module):\n raise TypeError('Expected a module: %r'%module)\n if path.startswith('/'):\n raise ValueError('Module-relative files may not have absolute paths')\n \n \n if hasattr(module,'__file__'):\n \n basedir=os.path.split(module.__file__)[0]\n elif module.__name__ =='__main__':\n \n if len(sys.argv)>0 and sys.argv[0]!='':\n basedir=os.path.split(sys.argv[0])[0]\n else :\n basedir=os.curdir\n else :\n \n raise ValueError(\"Can't resolve paths relative to the module \"+\n module+\" (it has no __file__)\")\n \n \n return os.path.join(basedir,*(path.split('/')))\n \n \n \n \n \n \n \n \n \n \n \n \n \nclass Example:\n ''\n\n\n\n\n\n\n\n\n\n\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,source,want,exc_msg=None ,lineno=0,indent=0,\n options=None ):\n \n if not source.endswith('\\n'):\n source +='\\n'\n if want and not want.endswith('\\n'):\n want +='\\n'\n if exc_msg is not None and not exc_msg.endswith('\\n'):\n exc_msg +='\\n'\n \n self.source=source\n self.want=want\n self.lineno=lineno\n self.indent=indent\n if options is None :options={}\n self.options=options\n self.exc_msg=exc_msg\n \n def __eq__(self,other):\n if type(self)is not type(other):\n return NotImplemented\n \n return self.source ==other.source and self.want ==other.want and self.lineno ==other.lineno and self.indent ==other.indent and self.options ==other.options and self.exc_msg ==other.exc_msg\n \n def __hash__(self):\n return hash((self.source,self.want,self.lineno,self.indent,\n self.exc_msg))\n \nclass DocTest:\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,examples,globs,name,filename,lineno,docstring):\n ''\n\n\n \n assert not isinstance(examples,str), \"DocTest no longer accepts str; use DocTestParser instead\"\n self.examples=examples\n self.docstring=docstring\n self.globs=globs.copy()\n self.name=name\n self.filename=filename\n self.lineno=lineno\n \n def __repr__(self):\n if len(self.examples)==0:\n examples='no examples'\n elif len(self.examples)==1:\n examples='1 example'\n else :\n examples='%d examples'%len(self.examples)\n return (''%\n (self.name,self.filename,self.lineno,examples))\n \n def __eq__(self,other):\n if type(self)is not type(other):\n return NotImplemented\n \n return self.examples ==other.examples and self.docstring ==other.docstring and self.globs ==other.globs and self.name ==other.name and self.filename ==other.filename and self.lineno ==other.lineno\n \n def __hash__(self):\n return hash((self.docstring,self.name,self.filename,self.lineno))\n \n \n def __lt__(self,other):\n if not isinstance(other,DocTest):\n return NotImplemented\n return ((self.name,self.filename,self.lineno,id(self))\n <\n (other.name,other.filename,other.lineno,id(other)))\n \n \n \n \n \nclass DocTestParser:\n ''\n\n \n \n \n \n \n \n _EXAMPLE_RE=re.compile(r'''\n # Source consists of a PS1 line followed by zero or more PS2 lines.\n (?P\n (?:^(?P [ ]*) >>> .*) # PS1 line\n (?:\\n [ ]* \\.\\.\\. .*)*) # PS2 lines\n \\n?\n # Want consists of any non-blank lines that do not start with PS1.\n (?P (?:(?![ ]*$) # Not a blank line\n (?![ ]*>>>) # Not a line starting with PS1\n .+$\\n? # But any other line\n )*)\n ''',re.MULTILINE |re.VERBOSE)\n \n \n \n \n \n \n \n \n \n \n _EXCEPTION_RE=re.compile(r\"\"\"\n # Grab the traceback header. Different versions of Python have\n # said different things on the first traceback line.\n ^(?P Traceback\\ \\(\n (?: most\\ recent\\ call\\ last\n | innermost\\ last\n ) \\) :\n )\n \\s* $ # toss trailing whitespace on the header.\n (?P .*?) # don't blink: absorb stuff until...\n ^ (?P \\w+ .*) # a line *starts* with alphanum.\n \"\"\",re.VERBOSE |re.MULTILINE |re.DOTALL)\n \n \n \n _IS_BLANK_OR_COMMENT=re.compile(r'^[ ]*(#.*)?$').match\n \n def parse(self,string,name=''):\n ''\n\n\n\n\n\n \n string=string.expandtabs()\n \n min_indent=self._min_indent(string)\n if min_indent >0:\n string='\\n'.join([l[min_indent:]for l in string.split('\\n')])\n \n output=[]\n charno,lineno=0,0\n \n for m in self._EXAMPLE_RE.finditer(string):\n \n output.append(string[charno:m.start()])\n \n lineno +=string.count('\\n',charno,m.start())\n \n (source,options,want,exc_msg)= self._parse_example(m,name,lineno)\n \n if not self._IS_BLANK_OR_COMMENT(source):\n output.append(Example(source,want,exc_msg,\n lineno=lineno,\n indent=min_indent+len(m.group('indent')),\n options=options))\n \n lineno +=string.count('\\n',m.start(),m.end())\n \n charno=m.end()\n \n output.append(string[charno:])\n return output\n \n def get_doctest(self,string,globs,name,filename,lineno):\n ''\n\n\n\n\n\n\n \n return DocTest(self.get_examples(string,name),globs,\n name,filename,lineno,string)\n \n def get_examples(self,string,name=''):\n ''\n\n\n\n\n\n\n\n\n \n return [x for x in self.parse(string,name)\n if isinstance(x,Example)]\n \n def _parse_example(self,m,name,lineno):\n ''\n\n\n\n\n\n\n\n\n \n \n indent=len(m.group('indent'))\n \n \n \n source_lines=m.group('source').split('\\n')\n self._check_prompt_blank(source_lines,indent,name,lineno)\n self._check_prefix(source_lines[1:],' '*indent+'.',name,lineno)\n source='\\n'.join([sl[indent+4:]for sl in source_lines])\n \n \n \n \n want=m.group('want')\n want_lines=want.split('\\n')\n if len(want_lines)>1 and re.match(r' *$',want_lines[-1]):\n del want_lines[-1]\n self._check_prefix(want_lines,' '*indent,name,\n lineno+len(source_lines))\n want='\\n'.join([wl[indent:]for wl in want_lines])\n \n \n m=self._EXCEPTION_RE.match(want)\n if m:\n exc_msg=m.group('msg')\n else :\n exc_msg=None\n \n \n options=self._find_options(source,name,lineno)\n \n return source,options,want,exc_msg\n \n \n \n \n \n \n \n \n _OPTION_DIRECTIVE_RE=re.compile(r'#\\s*doctest:\\s*([^\\n\\'\"]*)$',\n re.MULTILINE)\n \n def _find_options(self,source,name,lineno):\n ''\n\n\n\n\n\n \n options={}\n \n for m in self._OPTION_DIRECTIVE_RE.finditer(source):\n option_strings=m.group(1).replace(',',' ').split()\n for option in option_strings:\n if (option[0]not in'+-'or\n option[1:]not in OPTIONFLAGS_BY_NAME):\n raise ValueError('line %r of the doctest for %s '\n 'has an invalid option: %r'%\n (lineno+1,name,option))\n flag=OPTIONFLAGS_BY_NAME[option[1:]]\n options[flag]=(option[0]=='+')\n if options and self._IS_BLANK_OR_COMMENT(source):\n raise ValueError('line %r of the doctest for %s has an option '\n 'directive on a line with no example: %r'%\n (lineno,name,source))\n return options\n \n \n \n _INDENT_RE=re.compile('^([ ]*)(?=\\S)',re.MULTILINE)\n \n def _min_indent(self,s):\n ''\n indents=[len(indent)for indent in self._INDENT_RE.findall(s)]\n if len(indents)>0:\n return min(indents)\n else :\n return 0\n \n def _check_prompt_blank(self,lines,indent,name,lineno):\n ''\n\n\n\n\n \n for i,line in enumerate(lines):\n if len(line)>=indent+4 and line[indent+3]!=' ':\n raise ValueError('line %r of the docstring for %s '\n 'lacks blank after %s: %r'%\n (lineno+i+1,name,\n line[indent:indent+3],line))\n \n def _check_prefix(self,lines,prefix,name,lineno):\n ''\n\n\n \n for i,line in enumerate(lines):\n if line and not line.startswith(prefix):\n raise ValueError('line %r of the docstring for %s has '\n 'inconsistent leading whitespace: %r'%\n (lineno+i+1,name,line))\n \n \n \n \n \n \nclass DocTestFinder:\n ''\n\n\n\n\n\n \n \n def __init__(self,verbose=False ,parser=DocTestParser(),\n recurse=True ,exclude_empty=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self._parser=parser\n self._verbose=verbose\n self._recurse=recurse\n self._exclude_empty=exclude_empty\n \n def find(self,obj,name=None ,module=None ,globs=None ,extraglobs=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\n\n\n \n \n if name is None :\n name=getattr(obj,'__name__',None )\n if name is None :\n raise ValueError(\"DocTestFinder.find: name must be given \"\n \"when obj.__name__ doesn't exist: %r\"%\n (type(obj),))\n \n \n \n \n if module is False :\n module=None\n elif module is None :\n module=inspect.getmodule(obj)\n \n \n \n \n try :\n file=inspect.getsourcefile(obj)\n except TypeError:\n source_lines=None\n else :\n if not file:\n \n \n file=inspect.getfile(obj)\n if not file[0]+file[-2:]=='<]>':file=None\n if file is None :\n source_lines=None\n else :\n if module is not None :\n \n \n \n source_lines=linecache.getlines(file,module.__dict__)\n else :\n \n \n source_lines=linecache.getlines(file)\n if not source_lines:\n source_lines=None\n \n \n if globs is None :\n if module is None :\n globs={}\n else :\n globs=module.__dict__.copy()\n else :\n globs=globs.copy()\n if extraglobs is not None :\n globs.update(extraglobs)\n if'__name__'not in globs:\n globs['__name__']='__main__'\n \n \n tests=[]\n self._find(tests,obj,name,module,source_lines,globs,{})\n \n \n \n \n tests.sort()\n return tests\n \n def _from_module(self,module,object):\n ''\n\n\n \n if module is None :\n return True\n elif inspect.getmodule(object)is not None :\n return module is inspect.getmodule(object)\n elif inspect.isfunction(object):\n return module.__dict__ is object.__globals__\n elif inspect.ismethoddescriptor(object):\n if hasattr(object,'__objclass__'):\n obj_mod=object.__objclass__.__module__\n elif hasattr(object,'__module__'):\n obj_mod=object.__module__\n else :\n return True\n return module.__name__ ==obj_mod\n elif inspect.isclass(object):\n return module.__name__ ==object.__module__\n elif hasattr(object,'__module__'):\n return module.__name__ ==object.__module__\n elif isinstance(object,property):\n return True\n else :\n raise ValueError(\"object must be a class or function\")\n \n def _find(self,tests,obj,name,module,source_lines,globs,seen):\n ''\n\n\n \n if self._verbose:\n print('Finding tests in %s'%name)\n \n \n if id(obj)in seen:\n return\n seen[id(obj)]=1\n \n \n test=self._get_test(obj,name,module,globs,source_lines)\n if test is not None :\n tests.append(test)\n \n \n if inspect.ismodule(obj)and self._recurse:\n for valname,val in obj.__dict__.items():\n valname='%s.%s'%(name,valname)\n \n if ((inspect.isroutine(val)or inspect.isclass(val))and\n self._from_module(module,val)):\n self._find(tests,val,valname,module,source_lines,\n globs,seen)\n \n \n if inspect.ismodule(obj)and self._recurse:\n for valname,val in getattr(obj,'__test__',{}).items():\n if not isinstance(valname,str):\n raise ValueError(\"DocTestFinder.find: __test__ keys \"\n \"must be strings: %r\"%\n (type(valname),))\n if not (inspect.isroutine(val)or inspect.isclass(val)or\n inspect.ismodule(val)or isinstance(val,str)):\n raise ValueError(\"DocTestFinder.find: __test__ values \"\n \"must be strings, functions, methods, \"\n \"classes, or modules: %r\"%\n (type(val),))\n valname='%s.__test__.%s'%(name,valname)\n self._find(tests,val,valname,module,source_lines,\n globs,seen)\n \n \n if inspect.isclass(obj)and self._recurse:\n for valname,val in obj.__dict__.items():\n \n if isinstance(val,staticmethod):\n val=getattr(obj,valname)\n if isinstance(val,classmethod):\n val=getattr(obj,valname).__func__\n \n \n if ((inspect.isroutine(val)or inspect.isclass(val)or\n isinstance(val,property))and\n self._from_module(module,val)):\n valname='%s.%s'%(name,valname)\n self._find(tests,val,valname,module,source_lines,\n globs,seen)\n \n def _get_test(self,obj,name,module,globs,source_lines):\n ''\n\n\n \n \n \n if isinstance(obj,str):\n docstring=obj\n else :\n try :\n if obj.__doc__ is None :\n docstring=''\n else :\n docstring=obj.__doc__\n if not isinstance(docstring,str):\n docstring=str(docstring)\n except (TypeError,AttributeError):\n docstring=''\n \n \n lineno=self._find_lineno(obj,source_lines)\n \n \n if self._exclude_empty and not docstring:\n return None\n \n \n if module is None :\n filename=None\n else :\n filename=getattr(module,'__file__',module.__name__)\n if filename[-4:]in (\".pyc\",\".pyo\"):\n filename=filename[:-1]\n return self._parser.get_doctest(docstring,globs,name,\n filename,lineno)\n \n def _find_lineno(self,obj,source_lines):\n ''\n\n\n \n lineno=None\n \n \n if inspect.ismodule(obj):\n lineno=0\n \n \n \n \n if inspect.isclass(obj):\n if source_lines is None :\n return None\n pat=re.compile(r'^\\s*class\\s*%s\\b'%\n getattr(obj,'__name__','-'))\n for i,line in enumerate(source_lines):\n if pat.match(line):\n lineno=i\n break\n \n \n if inspect.ismethod(obj):obj=obj.__func__\n if inspect.isfunction(obj):obj=obj.__code__\n if inspect.istraceback(obj):obj=obj.tb_frame\n if inspect.isframe(obj):obj=obj.f_code\n if inspect.iscode(obj):\n lineno=getattr(obj,'co_firstlineno',None )-1\n \n \n \n \n \n \n if lineno is not None :\n if source_lines is None :\n return lineno+1\n pat=re.compile('(^|.*:)\\s*\\w*(\"|\\')')\n for lineno in range(lineno,len(source_lines)):\n if pat.match(source_lines[lineno]):\n return lineno\n \n \n return None\n \n \n \n \n \nclass DocTestRunner:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n DIVIDER=\"*\"*70\n \n def __init__(self,checker=None ,verbose=None ,optionflags=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self._checker=checker or OutputChecker()\n if verbose is None :\n verbose='-v'in sys.argv\n self._verbose=verbose\n self.optionflags=optionflags\n self.original_optionflags=optionflags\n \n \n self.tries=0\n self.failures=0\n self._name2ft={}\n \n \n self._fakeout=_SpoofOut()\n \n \n \n \n \n def report_start(self,out,test,example):\n ''\n\n\n \n if self._verbose:\n if example.want:\n out('Trying:\\n'+_indent(example.source)+\n 'Expecting:\\n'+_indent(example.want))\n else :\n out('Trying:\\n'+_indent(example.source)+\n 'Expecting nothing\\n')\n \n def report_success(self,out,test,example,got):\n ''\n\n\n \n if self._verbose:\n out(\"ok\\n\")\n \n def report_failure(self,out,test,example,got):\n ''\n\n \n out(self._failure_header(test,example)+\n self._checker.output_difference(example,got,self.optionflags))\n \n def report_unexpected_exception(self,out,test,example,exc_info):\n ''\n\n \n out(self._failure_header(test,example)+\n 'Exception raised:\\n'+_indent(_exception_traceback(exc_info)))\n \n def _failure_header(self,test,example):\n out=[self.DIVIDER]\n if test.filename:\n if test.lineno is not None and example.lineno is not None :\n lineno=test.lineno+example.lineno+1\n else :\n lineno='?'\n out.append('File \"%s\", line %s, in %s'%\n (test.filename,lineno,test.name))\n else :\n out.append('Line %s, in %s'%(example.lineno+1,test.name))\n out.append('Failed example:')\n source=example.source\n out.append(_indent(source))\n return'\\n'.join(out)\n \n \n \n \n \n def __run(self,test,compileflags,out):\n ''\n\n\n\n\n\n\n\n \n \n failures=tries=0\n \n \n \n original_optionflags=self.optionflags\n \n SUCCESS,FAILURE,BOOM=range(3)\n \n check=self._checker.check_output\n \n \n for examplenum,example in enumerate(test.examples):\n \n \n \n quiet=(self.optionflags&REPORT_ONLY_FIRST_FAILURE and\n failures >0)\n \n \n self.optionflags=original_optionflags\n if example.options:\n for (optionflag,val)in example.options.items():\n if val:\n self.optionflags |=optionflag\n else :\n self.optionflags &=~optionflag\n \n \n if self.optionflags&SKIP:\n continue\n \n \n tries +=1\n if not quiet:\n self.report_start(out,test,example)\n \n \n \n \n filename=''%(test.name,examplenum)\n \n \n \n \n try :\n \n exec(compile(example.source,filename,\"single\",\n compileflags,1),test.globs)\n self.debugger.set_continue()\n exception=None\n except KeyboardInterrupt:\n raise\n except :\n exception=sys.exc_info()\n self.debugger.set_continue()\n \n got=self._fakeout.getvalue()\n self._fakeout.truncate(0)\n outcome=FAILURE\n \n \n \n if exception is None :\n if check(example.want,got,self.optionflags):\n outcome=SUCCESS\n \n \n else :\n exc_msg=traceback.format_exception_only(*exception[:2])[-1]\n if not quiet:\n got +=_exception_traceback(exception)\n \n \n \n if example.exc_msg is None :\n outcome=BOOM\n \n \n elif check(example.exc_msg,exc_msg,self.optionflags):\n outcome=SUCCESS\n \n \n elif self.optionflags&IGNORE_EXCEPTION_DETAIL:\n if check(_strip_exception_details(example.exc_msg),\n _strip_exception_details(exc_msg),\n self.optionflags):\n outcome=SUCCESS\n \n \n if outcome is SUCCESS:\n if not quiet:\n self.report_success(out,test,example,got)\n elif outcome is FAILURE:\n if not quiet:\n self.report_failure(out,test,example,got)\n failures +=1\n elif outcome is BOOM:\n if not quiet:\n self.report_unexpected_exception(out,test,example,\n exception)\n failures +=1\n else :\n assert False ,(\"unknown outcome\",outcome)\n \n if failures and self.optionflags&FAIL_FAST:\n break\n \n \n self.optionflags=original_optionflags\n \n \n self.__record_outcome(test,failures,tries)\n return TestResults(failures,tries)\n \n def __record_outcome(self,test,f,t):\n ''\n\n\n \n f2,t2=self._name2ft.get(test.name,(0,0))\n self._name2ft[test.name]=(f+f2,t+t2)\n self.failures +=f\n self.tries +=t\n \n __LINECACHE_FILENAME_RE=re.compile(r'.+)'\n r'\\[(?P\\d+)\\]>$')\n def __patched_linecache_getlines(self,filename,module_globals=None ):\n m=self.__LINECACHE_FILENAME_RE.match(filename)\n if m and m.group('name')==self.test.name:\n example=self.test.examples[int(m.group('examplenum'))]\n return example.source.splitlines(keepends=True )\n else :\n return self.save_linecache_getlines(filename,module_globals)\n \n def run(self,test,compileflags=None ,out=None ,clear_globs=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.test=test\n \n if compileflags is None :\n compileflags=_extract_future_flags(test.globs)\n \n save_stdout=sys.stdout\n if out is None :\n encoding=save_stdout.encoding\n if encoding is None or encoding.lower()=='utf-8':\n out=save_stdout.write\n else :\n \n def out(s):\n s=str(s.encode(encoding,'backslashreplace'),encoding)\n save_stdout.write(s)\n sys.stdout=self._fakeout\n \n \n \n \n \n \n save_trace=sys.gettrace()\n save_set_trace=pdb.set_trace\n self.debugger=_OutputRedirectingPdb(save_stdout)\n self.debugger.reset()\n pdb.set_trace=self.debugger.set_trace\n \n \n \n self.save_linecache_getlines=linecache.getlines\n linecache.getlines=self.__patched_linecache_getlines\n \n \n save_displayhook=sys.displayhook\n sys.displayhook=sys.__displayhook__\n \n try :\n return self.__run(test,compileflags,out)\n finally :\n sys.stdout=save_stdout\n pdb.set_trace=save_set_trace\n sys.settrace(save_trace)\n linecache.getlines=self.save_linecache_getlines\n sys.displayhook=save_displayhook\n if clear_globs:\n test.globs.clear()\n import builtins\n builtins._=None\n \n \n \n \n def summarize(self,verbose=None ):\n ''\n\n\n\n\n\n\n\n\n \n if verbose is None :\n verbose=self._verbose\n notests=[]\n passed=[]\n failed=[]\n totalt=totalf=0\n for x in self._name2ft.items():\n name,(f,t)=x\n assert f <=t\n totalt +=t\n totalf +=f\n if t ==0:\n notests.append(name)\n elif f ==0:\n passed.append((name,t))\n else :\n failed.append(x)\n if verbose:\n if notests:\n print(len(notests),\"items had no tests:\")\n notests.sort()\n for thing in notests:\n print(\" \",thing)\n if passed:\n print(len(passed),\"items passed all tests:\")\n passed.sort()\n for thing,count in passed:\n print(\" %3d tests in %s\"%(count,thing))\n if failed:\n print(self.DIVIDER)\n print(len(failed),\"items had failures:\")\n failed.sort()\n for thing,(f,t)in failed:\n print(\" %3d of %3d in %s\"%(f,t,thing))\n if verbose:\n print(totalt,\"tests in\",len(self._name2ft),\"items.\")\n print(totalt -totalf,\"passed and\",totalf,\"failed.\")\n if totalf:\n print(\"***Test Failed***\",totalf,\"failures.\")\n elif verbose:\n print(\"Test passed.\")\n return TestResults(totalf,totalt)\n \n \n \n \n def merge(self,other):\n d=self._name2ft\n for name,(f,t)in other._name2ft.items():\n if name in d:\n \n \n \n \n f2,t2=d[name]\n f=f+f2\n t=t+t2\n d[name]=f,t\n \nclass OutputChecker:\n ''\n\n\n\n\n\n \n def _toAscii(self,s):\n ''\n\n \n return str(s.encode('ASCII','backslashreplace'),\"ASCII\")\n \n def check_output(self,want,got,optionflags):\n ''\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n got=self._toAscii(got)\n want=self._toAscii(want)\n \n \n \n if got ==want:\n return True\n \n \n \n if not (optionflags&DONT_ACCEPT_TRUE_FOR_1):\n if (got,want)==(\"True\\n\",\"1\\n\"):\n return True\n if (got,want)==(\"False\\n\",\"0\\n\"):\n return True\n \n \n \n if not (optionflags&DONT_ACCEPT_BLANKLINE):\n \n want=re.sub('(?m)^%s\\s*?$'%re.escape(BLANKLINE_MARKER),\n '',want)\n \n \n got=re.sub('(?m)^\\s*?$','',got)\n if got ==want:\n return True\n \n \n \n \n if optionflags&NORMALIZE_WHITESPACE:\n got=' '.join(got.split())\n want=' '.join(want.split())\n if got ==want:\n return True\n \n \n \n if optionflags&ELLIPSIS:\n if _ellipsis_match(want,got):\n return True\n \n \n return False\n \n \n def _do_a_fancy_diff(self,want,got,optionflags):\n \n if not optionflags&(REPORT_UDIFF |\n REPORT_CDIFF |\n REPORT_NDIFF):\n return False\n \n \n \n \n \n \n \n \n \n \n \n if optionflags&REPORT_NDIFF:\n return True\n \n \n return want.count('\\n')>2 and got.count('\\n')>2\n \n def output_difference(self,example,got,optionflags):\n ''\n\n\n\n\n \n want=example.want\n \n \n if not (optionflags&DONT_ACCEPT_BLANKLINE):\n got=re.sub('(?m)^[ ]*(?=\\n)',BLANKLINE_MARKER,got)\n \n \n if self._do_a_fancy_diff(want,got,optionflags):\n \n want_lines=want.splitlines(keepends=True )\n got_lines=got.splitlines(keepends=True )\n \n if optionflags&REPORT_UDIFF:\n diff=difflib.unified_diff(want_lines,got_lines,n=2)\n diff=list(diff)[2:]\n kind='unified diff with -expected +actual'\n elif optionflags&REPORT_CDIFF:\n diff=difflib.context_diff(want_lines,got_lines,n=2)\n diff=list(diff)[2:]\n kind='context diff with expected followed by actual'\n elif optionflags&REPORT_NDIFF:\n engine=difflib.Differ(charjunk=difflib.IS_CHARACTER_JUNK)\n diff=list(engine.compare(want_lines,got_lines))\n kind='ndiff with -expected +actual'\n else :\n assert 0,'Bad diff option'\n \n diff=[line.rstrip()+'\\n'for line in diff]\n return'Differences (%s):\\n'%kind+_indent(''.join(diff))\n \n \n \n if want and got:\n return'Expected:\\n%sGot:\\n%s'%(_indent(want),_indent(got))\n elif want:\n return'Expected:\\n%sGot nothing\\n'%_indent(want)\n elif got:\n return'Expected nothing\\nGot:\\n%s'%_indent(got)\n else :\n return'Expected nothing\\nGot nothing\\n'\n \nclass DocTestFailure(Exception):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,test,example,got):\n self.test=test\n self.example=example\n self.got=got\n \n def __str__(self):\n return str(self.test)\n \nclass UnexpectedException(Exception):\n ''\n\n\n\n\n\n\n\n\n \n def __init__(self,test,example,exc_info):\n self.test=test\n self.example=example\n self.exc_info=exc_info\n \n def __str__(self):\n return str(self.test)\n \nclass DebugRunner(DocTestRunner):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 run(self,test,compileflags=None ,out=None ,clear_globs=True ):\n r=DocTestRunner.run(self,test,compileflags,out,False )\n if clear_globs:\n test.globs.clear()\n return r\n \n def report_unexpected_exception(self,out,test,example,exc_info):\n raise UnexpectedException(test,example,exc_info)\n \n def report_failure(self,out,test,example,got):\n raise DocTestFailure(test,example,got)\n \n \n \n \n \n \n \n \nmaster=None\n\ndef testmod(m=None ,name=None ,globs=None ,verbose=None ,\nreport=True ,optionflags=0,extraglobs=None ,\nraise_on_error=False ,exclude_empty=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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global master\n \n \n if m is None :\n \n \n \n m=sys.modules.get('__main__')\n \n \n if not inspect.ismodule(m):\n raise TypeError(\"testmod: module required; %r\"%(m,))\n \n \n if name is None :\n name=m.__name__\n \n \n finder=DocTestFinder(exclude_empty=exclude_empty)\n \n if raise_on_error:\n runner=DebugRunner(verbose=verbose,optionflags=optionflags)\n else :\n runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n \n for test in finder.find(m,name,globs=globs,extraglobs=extraglobs):\n runner.run(test)\n \n if report:\n runner.summarize()\n \n if master is None :\n master=runner\n else :\n master.merge(runner)\n \n return TestResults(runner.failures,runner.tries)\n \ndef testfile(filename,module_relative=True ,name=None ,package=None ,\nglobs=None ,verbose=None ,report=True ,optionflags=0,\nextraglobs=None ,raise_on_error=False ,parser=DocTestParser(),\nencoding=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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global master\n \n if package and not module_relative:\n raise ValueError(\"Package may only be specified for module-\"\n \"relative paths.\")\n \n \n text,filename=_load_testfile(filename,package,module_relative,\n encoding or\"utf-8\")\n \n \n if name is None :\n name=os.path.basename(filename)\n \n \n if globs is None :\n globs={}\n else :\n globs=globs.copy()\n if extraglobs is not None :\n globs.update(extraglobs)\n if'__name__'not in globs:\n globs['__name__']='__main__'\n \n if raise_on_error:\n runner=DebugRunner(verbose=verbose,optionflags=optionflags)\n else :\n runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n \n \n test=parser.get_doctest(text,globs,name,filename,0)\n runner.run(test)\n \n if report:\n runner.summarize()\n \n if master is None :\n master=runner\n else :\n master.merge(runner)\n \n return TestResults(runner.failures,runner.tries)\n \ndef run_docstring_examples(f,globs,verbose=False ,name=\"NoName\",\ncompileflags=None ,optionflags=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n finder=DocTestFinder(verbose=verbose,recurse=False )\n runner=DocTestRunner(verbose=verbose,optionflags=optionflags)\n for test in finder.find(f,name,globs=globs):\n runner.run(test,compileflags=compileflags)\n \n \n \n \n \n_unittest_reportflags=0\n\ndef set_unittest_reportflags(flags):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _unittest_reportflags\n \n if (flags&REPORTING_FLAGS)!=flags:\n raise ValueError(\"Only reporting flags allowed\",flags)\n old=_unittest_reportflags\n _unittest_reportflags=flags\n return old\n \n \nclass DocTestCase(unittest.TestCase):\n\n def __init__(self,test,optionflags=0,setUp=None ,tearDown=None ,\n checker=None ):\n \n unittest.TestCase.__init__(self)\n self._dt_optionflags=optionflags\n self._dt_checker=checker\n self._dt_test=test\n self._dt_setUp=setUp\n self._dt_tearDown=tearDown\n \n def setUp(self):\n test=self._dt_test\n \n if self._dt_setUp is not None :\n self._dt_setUp(test)\n \n def tearDown(self):\n test=self._dt_test\n \n if self._dt_tearDown is not None :\n self._dt_tearDown(test)\n \n test.globs.clear()\n \n def runTest(self):\n test=self._dt_test\n old=sys.stdout\n new=StringIO()\n optionflags=self._dt_optionflags\n \n if not (optionflags&REPORTING_FLAGS):\n \n \n optionflags |=_unittest_reportflags\n \n runner=DocTestRunner(optionflags=optionflags,\n checker=self._dt_checker,verbose=False )\n \n try :\n runner.DIVIDER=\"-\"*70\n failures,tries=runner.run(\n test,out=new.write,clear_globs=False )\n finally :\n sys.stdout=old\n \n if failures:\n raise self.failureException(self.format_failure(new.getvalue()))\n \n def format_failure(self,err):\n test=self._dt_test\n if test.lineno is None :\n lineno='unknown line number'\n else :\n lineno='%s'%test.lineno\n lname='.'.join(test.name.split('.')[-1:])\n return ('Failed doctest test for %s\\n'\n ' File \"%s\", line %s, in %s\\n\\n%s'\n %(test.name,test.filename,lineno,lname,err)\n )\n \n def debug(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n self.setUp()\n runner=DebugRunner(optionflags=self._dt_optionflags,\n checker=self._dt_checker,verbose=False )\n runner.run(self._dt_test,clear_globs=False )\n self.tearDown()\n \n def id(self):\n return self._dt_test.name\n \n def __eq__(self,other):\n if type(self)is not type(other):\n return NotImplemented\n \n return self._dt_test ==other._dt_test and self._dt_optionflags ==other._dt_optionflags and self._dt_setUp ==other._dt_setUp and self._dt_tearDown ==other._dt_tearDown and self._dt_checker ==other._dt_checker\n \n def __hash__(self):\n return hash((self._dt_optionflags,self._dt_setUp,self._dt_tearDown,\n self._dt_checker))\n \n def __repr__(self):\n name=self._dt_test.name.split('.')\n return\"%s (%s)\"%(name[-1],'.'.join(name[:-1]))\n \n __str__=__repr__\n \n def shortDescription(self):\n return\"Doctest: \"+self._dt_test.name\n \nclass SkipDocTestCase(DocTestCase):\n def __init__(self,module):\n self.module=module\n DocTestCase.__init__(self,None )\n \n def setUp(self):\n self.skipTest(\"DocTestSuite will not work with -O2 and above\")\n \n def test_skip(self):\n pass\n \n def shortDescription(self):\n return\"Skipping tests from %s\"%self.module.__name__\n \n __str__=shortDescription\n \n \nclass _DocTestSuite(unittest.TestSuite):\n\n def _removeTestAtIndex(self,index):\n pass\n \n \ndef DocTestSuite(module=None ,globs=None ,extraglobs=None ,test_finder=None ,\n**options):\n ''\n\n\n\n\n\n\n\n\n\n\n\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 test_finder is None :\n test_finder=DocTestFinder()\n \n module=_normalize_module(module)\n tests=test_finder.find(module,globs=globs,extraglobs=extraglobs)\n \n if not tests and sys.flags.optimize >=2:\n \n suite=_DocTestSuite()\n suite.addTest(SkipDocTestCase(module))\n return suite\n elif not tests:\n \n \n \n \n \n \n \n raise ValueError(module,\"has no docstrings\")\n \n tests.sort()\n suite=_DocTestSuite()\n \n for test in tests:\n if len(test.examples)==0:\n continue\n if not test.filename:\n filename=module.__file__\n if filename[-4:]in (\".pyc\",\".pyo\"):\n filename=filename[:-1]\n test.filename=filename\n suite.addTest(DocTestCase(test,**options))\n \n return suite\n \nclass DocFileCase(DocTestCase):\n\n def id(self):\n return'_'.join(self._dt_test.name.split('.'))\n \n def __repr__(self):\n return self._dt_test.filename\n __str__=__repr__\n \n def format_failure(self,err):\n return ('Failed doctest test for %s\\n File \"%s\", line 0\\n\\n%s'\n %(self._dt_test.name,self._dt_test.filename,err)\n )\n \ndef DocFileTest(path,module_relative=True ,package=None ,\nglobs=None ,parser=DocTestParser(),\nencoding=None ,**options):\n if globs is None :\n globs={}\n else :\n globs=globs.copy()\n \n if package and not module_relative:\n raise ValueError(\"Package may only be specified for module-\"\n \"relative paths.\")\n \n \n doc,path=_load_testfile(path,package,module_relative,\n encoding or\"utf-8\")\n \n if\"__file__\"not in globs:\n globs[\"__file__\"]=path\n \n \n name=os.path.basename(path)\n \n \n test=parser.get_doctest(doc,globs,name,path,0)\n return DocFileCase(test,**options)\n \ndef DocFileSuite(*paths,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n suite=_DocTestSuite()\n \n \n \n \n if kw.get('module_relative',True ):\n kw['package']=_normalize_module(kw.get('package'))\n \n for path in paths:\n suite.addTest(DocFileTest(path,**kw))\n \n return suite\n \n \n \n \n \ndef script_from_examples(s):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n output=[]\n for piece in DocTestParser().parse(s):\n if isinstance(piece,Example):\n \n output.append(piece.source[:-1])\n \n want=piece.want\n if want:\n output.append('# Expected:')\n output +=['## '+l for l in want.split('\\n')[:-1]]\n else :\n \n output +=[_comment_line(l)\n for l in piece.split('\\n')[:-1]]\n \n \n while output and output[-1]=='#':\n output.pop()\n while output and output[0]=='#':\n output.pop(0)\n \n \n return'\\n'.join(output)+'\\n'\n \ndef testsource(module,name):\n ''\n\n\n\n\n \n module=_normalize_module(module)\n tests=DocTestFinder().find(module)\n test=[t for t in tests if t.name ==name]\n if not test:\n raise ValueError(name,\"not found in tests\")\n test=test[0]\n testsrc=script_from_examples(test.docstring)\n return testsrc\n \ndef debug_src(src,pm=False ,globs=None ):\n ''\n testsrc=script_from_examples(src)\n debug_script(testsrc,pm,globs)\n \ndef debug_script(src,pm=False ,globs=None ):\n ''\n import pdb\n \n if globs:\n globs=globs.copy()\n else :\n globs={}\n \n if pm:\n try :\n exec(src,globs,globs)\n except :\n print(sys.exc_info()[1])\n p=pdb.Pdb(nosigint=True )\n p.reset()\n p.interaction(None ,sys.exc_info()[2])\n else :\n pdb.Pdb(nosigint=True ).run(\"exec(%r)\"%src,globs,globs)\n \ndef debug(module,name,pm=False ):\n ''\n\n\n\n\n \n module=_normalize_module(module)\n testsrc=testsource(module,name)\n debug_script(testsrc,pm,module.__dict__)\n \n \n \n \nclass _TestClass:\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,val):\n ''\n\n\n\n\n \n \n self.val=val\n \n def square(self):\n ''\n\n\n\n \n \n self.val=self.val **2\n return self\n \n def get(self):\n ''\n\n\n\n\n \n \n return self.val\n \n__test__={\"_TestClass\":_TestClass,\n\"string\":r\"\"\"\n Example of a string object, searched as-is.\n >>> x = 1; y = 2\n >>> x + y, x * y\n (3, 2)\n \"\"\",\n\n\"bool-int equivalence\":r\"\"\"\n In 2.2, boolean expressions displayed\n 0 or 1. By default, we still accept\n them. This can be disabled by passing\n DONT_ACCEPT_TRUE_FOR_1 to the new\n optionflags argument.\n >>> 4 == 4\n 1\n >>> 4 == 4\n True\n >>> 4 > 4\n 0\n >>> 4 > 4\n False\n \"\"\",\n\n\"blank lines\":r\"\"\"\n Blank lines can be marked with :\n >>> print('foo\\n\\nbar\\n')\n foo\n \n bar\n \n \"\"\",\n\n\"ellipsis\":r\"\"\"\n If the ellipsis flag is used, then '...' can be used to\n elide substrings in the desired output:\n >>> print(list(range(1000))) #doctest: +ELLIPSIS\n [0, 1, 2, ..., 999]\n \"\"\",\n\n\"whitespace normalization\":r\"\"\"\n If the whitespace normalization flag is used, then\n differences in whitespace are ignored.\n >>> print(list(range(30))) #doctest: +NORMALIZE_WHITESPACE\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n 27, 28, 29]\n \"\"\",\n}\n\n\ndef _test():\n parser=argparse.ArgumentParser(description=\"doctest runner\")\n parser.add_argument('-v','--verbose',action='store_true',default=False ,\n help='print very verbose output for all tests')\n parser.add_argument('-o','--option',action='append',\n choices=OPTIONFLAGS_BY_NAME.keys(),default=[],\n help=('specify a doctest option flag to apply'\n ' to the test run; may be specified more'\n ' than once to apply multiple options'))\n parser.add_argument('-f','--fail-fast',action='store_true',\n help=('stop running tests after first failure (this'\n ' is a shorthand for -o FAIL_FAST, and is'\n ' in addition to any other -o options)'))\n parser.add_argument('file',nargs='+',\n help='file containing the tests to run')\n args=parser.parse_args()\n testfiles=args.file\n \n \n verbose=args.verbose\n options=0\n for option in args.option:\n options |=OPTIONFLAGS_BY_NAME[option]\n if args.fail_fast:\n options |=FAIL_FAST\n for filename in testfiles:\n if filename.endswith(\".py\"):\n \n \n \n dirname,filename=os.path.split(filename)\n sys.path.insert(0,dirname)\n m=__import__(filename[:-3])\n del sys.path[0]\n failures,_=testmod(m,verbose=verbose,optionflags=options)\n else :\n failures,_=testfile(filename,module_relative=False ,\n verbose=verbose,optionflags=options)\n if failures:\n return 1\n return 0\n \n \nif __name__ ==\"__main__\":\n sys.exit(_test())\n"], "locale": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\nimport sys\nimport encodings\nimport encodings.aliases\nimport re\nimport collections\nfrom builtins import str as _builtin_str\nimport functools\n\n\n\n\n\n\n\n__all__=[\"getlocale\",\"getdefaultlocale\",\"getpreferredencoding\",\"Error\",\n\"setlocale\",\"resetlocale\",\"localeconv\",\"strcoll\",\"strxfrm\",\n\"str\",\"atof\",\"atoi\",\"format\",\"format_string\",\"currency\",\n\"normalize\",\"LC_CTYPE\",\"LC_COLLATE\",\"LC_TIME\",\"LC_MONETARY\",\n\"LC_NUMERIC\",\"LC_ALL\",\"CHAR_MAX\"]\n\ndef _strcoll(a,b):\n ''\n\n \n return (a >b)-(a .*?)\\))?'\nr'(?P[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')\n\ndef format(percent,value,grouping=False ,monetary=False ,*additional):\n ''\n\n\n\n \n \n match=_percent_re.match(percent)\n if not match or len(match.group())!=len(percent):\n raise ValueError((\"format() must be given exactly one %%char \"\n \"format specifier, %s not valid\")%repr(percent))\n return _format(percent,value,grouping,monetary,*additional)\n \ndef _format(percent,value,grouping=False ,monetary=False ,*additional):\n if additional:\n formatted=percent %((value,)+additional)\n else :\n formatted=percent %value\n \n if percent[-1]in'eEfFgG':\n seps=0\n parts=formatted.split('.')\n if grouping:\n parts[0],seps=_group(parts[0],monetary=monetary)\n decimal_point=localeconv()[monetary and'mon_decimal_point'\n or'decimal_point']\n formatted=decimal_point.join(parts)\n if seps:\n formatted=_strip_padding(formatted,seps)\n elif percent[-1]in'diu':\n seps=0\n if grouping:\n formatted,seps=_group(formatted,monetary=monetary)\n if seps:\n formatted=_strip_padding(formatted,seps)\n return formatted\n \ndef format_string(f,val,grouping=False ):\n ''\n\n \n percents=list(_percent_re.finditer(f))\n new_f=_percent_re.sub('%s',f)\n \n if isinstance(val,collections.Mapping):\n new_val=[]\n for perc in percents:\n if perc.group()[-1]=='%':\n new_val.append('%')\n else :\n new_val.append(format(perc.group(),val,grouping))\n else :\n if not isinstance(val,tuple):\n val=(val,)\n new_val=[]\n i=0\n for perc in percents:\n if perc.group()[-1]=='%':\n new_val.append('%')\n else :\n starcount=perc.group('modifiers').count('*')\n new_val.append(_format(perc.group(),\n val[i],\n grouping,\n False ,\n *val[i+1:i+1+starcount]))\n i +=(1+starcount)\n val=tuple(new_val)\n \n return new_f %val\n \ndef currency(val,symbol=True ,grouping=False ,international=False ):\n ''\n \n conv=localeconv()\n \n \n digits=conv[international and'int_frac_digits'or'frac_digits']\n if digits ==127:\n raise ValueError(\"Currency formatting is not possible using \"\n \"the 'C' locale.\")\n \n s=format('%%.%if'%digits,abs(val),grouping,monetary=True )\n \n s='<'+s+'>'\n \n if symbol:\n smb=conv[international and'int_curr_symbol'or'currency_symbol']\n precedes=conv[val <0 and'n_cs_precedes'or'p_cs_precedes']\n separated=conv[val <0 and'n_sep_by_space'or'p_sep_by_space']\n \n if precedes:\n s=smb+(separated and' 'or'')+s\n else :\n s=s+(separated and' 'or'')+smb\n \n sign_pos=conv[val <0 and'n_sign_posn'or'p_sign_posn']\n sign=conv[val <0 and'negative_sign'or'positive_sign']\n \n if sign_pos ==0:\n s='('+s+')'\n elif sign_pos ==1:\n s=sign+s\n elif sign_pos ==2:\n s=s+sign\n elif sign_pos ==3:\n s=s.replace('<',sign)\n elif sign_pos ==4:\n s=s.replace('>',sign)\n else :\n \n \n s=sign+s\n \n return s.replace('<','').replace('>','')\n \ndef str(val):\n ''\n return format(\"%.12g\",val)\n \ndef atof(string,func=float):\n ''\n \n ts=localeconv()['thousands_sep']\n if ts:\n string=string.replace(ts,'')\n \n dd=localeconv()['decimal_point']\n if dd:\n string=string.replace(dd,'.')\n \n return func(string)\n \ndef atoi(str):\n ''\n return atof(str,int)\n \ndef _test():\n setlocale(LC_ALL,\"\")\n \n s1=format(\"%d\",123456789,1)\n print(s1,\"is\",atoi(s1))\n \n s1=str(3.14)\n print(s1,\"is\",atof(s1))\n \n \n \n \n \n \n \n \n_setlocale=setlocale\n\ndef _replace_encoding(code,encoding):\n if'.'in code:\n langname=code[:code.index('.')]\n else :\n langname=code\n \n norm_encoding=encodings.normalize_encoding(encoding)\n \n norm_encoding=encodings.aliases.aliases.get(norm_encoding.lower(),\n norm_encoding)\n \n encoding=norm_encoding\n norm_encoding=norm_encoding.lower()\n if norm_encoding in locale_encoding_alias:\n encoding=locale_encoding_alias[norm_encoding]\n else :\n norm_encoding=norm_encoding.replace('_','')\n norm_encoding=norm_encoding.replace('-','')\n if norm_encoding in locale_encoding_alias:\n encoding=locale_encoding_alias[norm_encoding]\n \n return langname+'.'+encoding\n \ndef _append_modifier(code,modifier):\n if modifier =='euro':\n if'.'not in code:\n return code+'.ISO8859-15'\n _,_,encoding=code.partition('.')\n if encoding in ('ISO8859-15','UTF-8'):\n return code\n if encoding =='ISO8859-1':\n return _replace_encoding(code,'ISO8859-15')\n return code+'@'+modifier\n \ndef normalize(localename):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n code=localename.lower()\n if':'in code:\n \n code=code.replace(':','.')\n if'@'in code:\n code,modifier=code.split('@',1)\n else :\n modifier=''\n if'.'in code:\n langname,encoding=code.split('.')[:2]\n else :\n langname=code\n encoding=''\n \n \n lang_enc=langname\n if encoding:\n norm_encoding=encoding.replace('-','')\n norm_encoding=norm_encoding.replace('_','')\n lang_enc +='.'+norm_encoding\n lookup_name=lang_enc\n if modifier:\n lookup_name +='@'+modifier\n code=locale_alias.get(lookup_name,None )\n if code is not None :\n return code\n \n \n if modifier:\n \n code=locale_alias.get(lang_enc,None )\n if code is not None :\n \n if'@'not in code:\n return _append_modifier(code,modifier)\n if code.split('@',1)[1].lower()==modifier:\n return code\n \n \n if encoding:\n \n lookup_name=langname\n if modifier:\n lookup_name +='@'+modifier\n code=locale_alias.get(lookup_name,None )\n if code is not None :\n \n if'@'not in code:\n return _replace_encoding(code,encoding)\n code,modifier=code.split('@',1)\n return _replace_encoding(code,encoding)+'@'+modifier\n \n if modifier:\n \n code=locale_alias.get(langname,None )\n if code is not None :\n \n if'@'not in code:\n code=_replace_encoding(code,encoding)\n return _append_modifier(code,modifier)\n code,defmod=code.split('@',1)\n if defmod.lower()==modifier:\n return _replace_encoding(code,encoding)+'@'+defmod\n \n return localename\n \ndef _parse_localename(localename):\n\n ''\n\n\n\n\n\n\n\n\n\n\n \n code=normalize(localename)\n if'@'in code:\n \n code,modifier=code.split('@',1)\n if modifier =='euro'and'.'not in code:\n \n \n \n return code,'iso-8859-15'\n \n if'.'in code:\n return tuple(code.split('.')[:2])\n elif code =='C':\n return None ,None\n raise ValueError('unknown locale: %s'%localename)\n \ndef _build_localename(localetuple):\n\n ''\n\n\n\n\n \n try :\n language,encoding=localetuple\n \n if language is None :\n language='C'\n if encoding is None :\n return language\n else :\n return language+'.'+encoding\n except (TypeError,ValueError):\n raise TypeError('Locale must be None, a string, or an iterable of two strings -- language code, encoding.')\n \ndef getdefaultlocale(envvars=('LC_ALL','LC_CTYPE','LANG','LANGUAGE')):\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 \n import _locale\n code,encoding=_locale._getdefaultlocale()\n except (ImportError,AttributeError):\n pass\n else :\n \n if sys.platform ==\"win32\"and code and code[:2]==\"0x\":\n \n code=windows_locale.get(int(code,0))\n \n \n return code,encoding\n \n \n import os\n lookup=os.environ.get\n for variable in envvars:\n localename=lookup(variable,None )\n if localename:\n if variable =='LANGUAGE':\n localename=localename.split(':')[0]\n break\n else :\n localename='C'\n return _parse_localename(localename)\n \n \ndef getlocale(category=LC_CTYPE):\n\n ''\n\n\n\n\n\n\n\n\n\n \n localename=_setlocale(category)\n if category ==LC_ALL and';'in localename:\n raise TypeError('category LC_ALL is not supported')\n return _parse_localename(localename)\n \ndef setlocale(category,locale=None ):\n\n ''\n\n\n\n\n\n\n\n\n \n if locale and not isinstance(locale,_builtin_str):\n \n locale=normalize(_build_localename(locale))\n return _setlocale(category,locale)\n \ndef resetlocale(category=LC_ALL):\n\n ''\n\n\n\n\n \n _setlocale(category,_build_localename(getdefaultlocale()))\n \nif sys.platform.startswith(\"win\"):\n\n def getpreferredencoding(do_setlocale=True ):\n ''\n import _bootlocale\n return _bootlocale.getpreferredencoding(False )\nelse :\n\n try :\n CODESET\n except NameError:\n \n def getpreferredencoding(do_setlocale=True ):\n ''\n \n res=getdefaultlocale()[1]\n if res is None :\n \n res='ascii'\n return res\n else :\n def getpreferredencoding(do_setlocale=True ):\n ''\n \n import _bootlocale\n if do_setlocale:\n oldloc=setlocale(LC_CTYPE)\n try :\n setlocale(LC_CTYPE,\"\")\n except Error:\n pass\n result=_bootlocale.getpreferredencoding(False )\n if do_setlocale:\n setlocale(LC_CTYPE,oldloc)\n return result\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nlocale_encoding_alias={\n\n\n'437':'C',\n'c':'C',\n'en':'ISO8859-1',\n'jis':'JIS7',\n'jis7':'JIS7',\n'ajec':'eucJP',\n'koi8c':'KOI8-C',\n'microsoftcp1251':'CP1251',\n'microsoftcp1255':'CP1255',\n'microsoftcp1256':'CP1256',\n'88591':'ISO8859-1',\n'88592':'ISO8859-2',\n'88595':'ISO8859-5',\n'885915':'ISO8859-15',\n\n\n'ascii':'ISO8859-1',\n'latin_1':'ISO8859-1',\n'iso8859_1':'ISO8859-1',\n'iso8859_10':'ISO8859-10',\n'iso8859_11':'ISO8859-11',\n'iso8859_13':'ISO8859-13',\n'iso8859_14':'ISO8859-14',\n'iso8859_15':'ISO8859-15',\n'iso8859_16':'ISO8859-16',\n'iso8859_2':'ISO8859-2',\n'iso8859_3':'ISO8859-3',\n'iso8859_4':'ISO8859-4',\n'iso8859_5':'ISO8859-5',\n'iso8859_6':'ISO8859-6',\n'iso8859_7':'ISO8859-7',\n'iso8859_8':'ISO8859-8',\n'iso8859_9':'ISO8859-9',\n'iso2022_jp':'JIS7',\n'shift_jis':'SJIS',\n'tactis':'TACTIS',\n'euc_jp':'eucJP',\n'euc_kr':'eucKR',\n'utf_8':'UTF-8',\n'koi8_r':'KOI8-R',\n'koi8_u':'KOI8-U',\n'cp1251':'CP1251',\n'cp1255':'CP1255',\n'cp1256':'CP1256',\n\n\n\n}\n\nfor k,v in sorted(locale_encoding_alias.items()):\n k=k.replace('_','')\n locale_encoding_alias.setdefault(k,v)\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nlocale_alias={\n'a3':'az_AZ.KOI8-C',\n'a3_az':'az_AZ.KOI8-C',\n'a3_az.koic':'az_AZ.KOI8-C',\n'aa_dj':'aa_DJ.ISO8859-1',\n'aa_er':'aa_ER.UTF-8',\n'aa_et':'aa_ET.UTF-8',\n'af':'af_ZA.ISO8859-1',\n'af_za':'af_ZA.ISO8859-1',\n'am':'am_ET.UTF-8',\n'am_et':'am_ET.UTF-8',\n'american':'en_US.ISO8859-1',\n'an_es':'an_ES.ISO8859-15',\n'ar':'ar_AA.ISO8859-6',\n'ar_aa':'ar_AA.ISO8859-6',\n'ar_ae':'ar_AE.ISO8859-6',\n'ar_bh':'ar_BH.ISO8859-6',\n'ar_dz':'ar_DZ.ISO8859-6',\n'ar_eg':'ar_EG.ISO8859-6',\n'ar_in':'ar_IN.UTF-8',\n'ar_iq':'ar_IQ.ISO8859-6',\n'ar_jo':'ar_JO.ISO8859-6',\n'ar_kw':'ar_KW.ISO8859-6',\n'ar_lb':'ar_LB.ISO8859-6',\n'ar_ly':'ar_LY.ISO8859-6',\n'ar_ma':'ar_MA.ISO8859-6',\n'ar_om':'ar_OM.ISO8859-6',\n'ar_qa':'ar_QA.ISO8859-6',\n'ar_sa':'ar_SA.ISO8859-6',\n'ar_sd':'ar_SD.ISO8859-6',\n'ar_sy':'ar_SY.ISO8859-6',\n'ar_tn':'ar_TN.ISO8859-6',\n'ar_ye':'ar_YE.ISO8859-6',\n'arabic':'ar_AA.ISO8859-6',\n'as':'as_IN.UTF-8',\n'as_in':'as_IN.UTF-8',\n'ast_es':'ast_ES.ISO8859-15',\n'ayc_pe':'ayc_PE.UTF-8',\n'az':'az_AZ.ISO8859-9E',\n'az_az':'az_AZ.ISO8859-9E',\n'az_az.iso88599e':'az_AZ.ISO8859-9E',\n'be':'be_BY.CP1251',\n'be@latin':'be_BY.UTF-8@latin',\n'be_bg.utf8':'bg_BG.UTF-8',\n'be_by':'be_BY.CP1251',\n'be_by@latin':'be_BY.UTF-8@latin',\n'bem_zm':'bem_ZM.UTF-8',\n'ber_dz':'ber_DZ.UTF-8',\n'ber_ma':'ber_MA.UTF-8',\n'bg':'bg_BG.CP1251',\n'bg_bg':'bg_BG.CP1251',\n'bho_in':'bho_IN.UTF-8',\n'bn_bd':'bn_BD.UTF-8',\n'bn_in':'bn_IN.UTF-8',\n'bo_cn':'bo_CN.UTF-8',\n'bo_in':'bo_IN.UTF-8',\n'bokmal':'nb_NO.ISO8859-1',\n'bokm\\xe5l':'nb_NO.ISO8859-1',\n'br':'br_FR.ISO8859-1',\n'br_fr':'br_FR.ISO8859-1',\n'brx_in':'brx_IN.UTF-8',\n'bs':'bs_BA.ISO8859-2',\n'bs_ba':'bs_BA.ISO8859-2',\n'bulgarian':'bg_BG.CP1251',\n'byn_er':'byn_ER.UTF-8',\n'c':'C',\n'c-french':'fr_CA.ISO8859-1',\n'c.ascii':'C',\n'c.en':'C',\n'c.iso88591':'en_US.ISO8859-1',\n'c.utf8':'en_US.UTF-8',\n'c_c':'C',\n'c_c.c':'C',\n'ca':'ca_ES.ISO8859-1',\n'ca_ad':'ca_AD.ISO8859-1',\n'ca_es':'ca_ES.ISO8859-1',\n'ca_es@valencia':'ca_ES.ISO8859-15@valencia',\n'ca_fr':'ca_FR.ISO8859-1',\n'ca_it':'ca_IT.ISO8859-1',\n'catalan':'ca_ES.ISO8859-1',\n'cextend':'en_US.ISO8859-1',\n'chinese-s':'zh_CN.eucCN',\n'chinese-t':'zh_TW.eucTW',\n'crh_ua':'crh_UA.UTF-8',\n'croatian':'hr_HR.ISO8859-2',\n'cs':'cs_CZ.ISO8859-2',\n'cs_cs':'cs_CZ.ISO8859-2',\n'cs_cz':'cs_CZ.ISO8859-2',\n'csb_pl':'csb_PL.UTF-8',\n'cv_ru':'cv_RU.UTF-8',\n'cy':'cy_GB.ISO8859-1',\n'cy_gb':'cy_GB.ISO8859-1',\n'cz':'cs_CZ.ISO8859-2',\n'cz_cz':'cs_CZ.ISO8859-2',\n'czech':'cs_CZ.ISO8859-2',\n'da':'da_DK.ISO8859-1',\n'da_dk':'da_DK.ISO8859-1',\n'danish':'da_DK.ISO8859-1',\n'dansk':'da_DK.ISO8859-1',\n'de':'de_DE.ISO8859-1',\n'de_at':'de_AT.ISO8859-1',\n'de_be':'de_BE.ISO8859-1',\n'de_ch':'de_CH.ISO8859-1',\n'de_de':'de_DE.ISO8859-1',\n'de_li.utf8':'de_LI.UTF-8',\n'de_lu':'de_LU.ISO8859-1',\n'deutsch':'de_DE.ISO8859-1',\n'doi_in':'doi_IN.UTF-8',\n'dutch':'nl_NL.ISO8859-1',\n'dutch.iso88591':'nl_BE.ISO8859-1',\n'dv_mv':'dv_MV.UTF-8',\n'dz_bt':'dz_BT.UTF-8',\n'ee':'ee_EE.ISO8859-4',\n'ee_ee':'ee_EE.ISO8859-4',\n'eesti':'et_EE.ISO8859-1',\n'el':'el_GR.ISO8859-7',\n'el_cy':'el_CY.ISO8859-7',\n'el_gr':'el_GR.ISO8859-7',\n'el_gr@euro':'el_GR.ISO8859-15',\n'en':'en_US.ISO8859-1',\n'en_ag':'en_AG.UTF-8',\n'en_au':'en_AU.ISO8859-1',\n'en_be':'en_BE.ISO8859-1',\n'en_bw':'en_BW.ISO8859-1',\n'en_ca':'en_CA.ISO8859-1',\n'en_dk':'en_DK.ISO8859-1',\n'en_dl.utf8':'en_DL.UTF-8',\n'en_gb':'en_GB.ISO8859-1',\n'en_hk':'en_HK.ISO8859-1',\n'en_ie':'en_IE.ISO8859-1',\n'en_in':'en_IN.ISO8859-1',\n'en_ng':'en_NG.UTF-8',\n'en_nz':'en_NZ.ISO8859-1',\n'en_ph':'en_PH.ISO8859-1',\n'en_sg':'en_SG.ISO8859-1',\n'en_uk':'en_GB.ISO8859-1',\n'en_us':'en_US.ISO8859-1',\n'en_us@euro@euro':'en_US.ISO8859-15',\n'en_za':'en_ZA.ISO8859-1',\n'en_zm':'en_ZM.UTF-8',\n'en_zw':'en_ZW.ISO8859-1',\n'en_zw.utf8':'en_ZS.UTF-8',\n'eng_gb':'en_GB.ISO8859-1',\n'english':'en_EN.ISO8859-1',\n'english_uk':'en_GB.ISO8859-1',\n'english_united-states':'en_US.ISO8859-1',\n'english_united-states.437':'C',\n'english_us':'en_US.ISO8859-1',\n'eo':'eo_XX.ISO8859-3',\n'eo.utf8':'eo.UTF-8',\n'eo_eo':'eo_EO.ISO8859-3',\n'eo_us.utf8':'eo_US.UTF-8',\n'eo_xx':'eo_XX.ISO8859-3',\n'es':'es_ES.ISO8859-1',\n'es_ar':'es_AR.ISO8859-1',\n'es_bo':'es_BO.ISO8859-1',\n'es_cl':'es_CL.ISO8859-1',\n'es_co':'es_CO.ISO8859-1',\n'es_cr':'es_CR.ISO8859-1',\n'es_cu':'es_CU.UTF-8',\n'es_do':'es_DO.ISO8859-1',\n'es_ec':'es_EC.ISO8859-1',\n'es_es':'es_ES.ISO8859-1',\n'es_gt':'es_GT.ISO8859-1',\n'es_hn':'es_HN.ISO8859-1',\n'es_mx':'es_MX.ISO8859-1',\n'es_ni':'es_NI.ISO8859-1',\n'es_pa':'es_PA.ISO8859-1',\n'es_pe':'es_PE.ISO8859-1',\n'es_pr':'es_PR.ISO8859-1',\n'es_py':'es_PY.ISO8859-1',\n'es_sv':'es_SV.ISO8859-1',\n'es_us':'es_US.ISO8859-1',\n'es_uy':'es_UY.ISO8859-1',\n'es_ve':'es_VE.ISO8859-1',\n'estonian':'et_EE.ISO8859-1',\n'et':'et_EE.ISO8859-15',\n'et_ee':'et_EE.ISO8859-15',\n'eu':'eu_ES.ISO8859-1',\n'eu_es':'eu_ES.ISO8859-1',\n'eu_fr':'eu_FR.ISO8859-1',\n'fa':'fa_IR.UTF-8',\n'fa_ir':'fa_IR.UTF-8',\n'fa_ir.isiri3342':'fa_IR.ISIRI-3342',\n'ff_sn':'ff_SN.UTF-8',\n'fi':'fi_FI.ISO8859-15',\n'fi_fi':'fi_FI.ISO8859-15',\n'fil_ph':'fil_PH.UTF-8',\n'finnish':'fi_FI.ISO8859-1',\n'fo':'fo_FO.ISO8859-1',\n'fo_fo':'fo_FO.ISO8859-1',\n'fr':'fr_FR.ISO8859-1',\n'fr_be':'fr_BE.ISO8859-1',\n'fr_ca':'fr_CA.ISO8859-1',\n'fr_ch':'fr_CH.ISO8859-1',\n'fr_fr':'fr_FR.ISO8859-1',\n'fr_lu':'fr_LU.ISO8859-1',\n'fran\\xe7ais':'fr_FR.ISO8859-1',\n'fre_fr':'fr_FR.ISO8859-1',\n'french':'fr_FR.ISO8859-1',\n'french.iso88591':'fr_CH.ISO8859-1',\n'french_france':'fr_FR.ISO8859-1',\n'fur_it':'fur_IT.UTF-8',\n'fy_de':'fy_DE.UTF-8',\n'fy_nl':'fy_NL.UTF-8',\n'ga':'ga_IE.ISO8859-1',\n'ga_ie':'ga_IE.ISO8859-1',\n'galego':'gl_ES.ISO8859-1',\n'galician':'gl_ES.ISO8859-1',\n'gd':'gd_GB.ISO8859-1',\n'gd_gb':'gd_GB.ISO8859-1',\n'ger_de':'de_DE.ISO8859-1',\n'german':'de_DE.ISO8859-1',\n'german.iso88591':'de_CH.ISO8859-1',\n'german_germany':'de_DE.ISO8859-1',\n'gez_er':'gez_ER.UTF-8',\n'gez_et':'gez_ET.UTF-8',\n'gl':'gl_ES.ISO8859-1',\n'gl_es':'gl_ES.ISO8859-1',\n'greek':'el_GR.ISO8859-7',\n'gu_in':'gu_IN.UTF-8',\n'gv':'gv_GB.ISO8859-1',\n'gv_gb':'gv_GB.ISO8859-1',\n'ha_ng':'ha_NG.UTF-8',\n'he':'he_IL.ISO8859-8',\n'he_il':'he_IL.ISO8859-8',\n'hebrew':'he_IL.ISO8859-8',\n'hi':'hi_IN.ISCII-DEV',\n'hi_in':'hi_IN.ISCII-DEV',\n'hi_in.isciidev':'hi_IN.ISCII-DEV',\n'hne':'hne_IN.UTF-8',\n'hne_in':'hne_IN.UTF-8',\n'hr':'hr_HR.ISO8859-2',\n'hr_hr':'hr_HR.ISO8859-2',\n'hrvatski':'hr_HR.ISO8859-2',\n'hsb_de':'hsb_DE.ISO8859-2',\n'ht_ht':'ht_HT.UTF-8',\n'hu':'hu_HU.ISO8859-2',\n'hu_hu':'hu_HU.ISO8859-2',\n'hungarian':'hu_HU.ISO8859-2',\n'hy_am':'hy_AM.UTF-8',\n'hy_am.armscii8':'hy_AM.ARMSCII_8',\n'ia':'ia.UTF-8',\n'ia_fr':'ia_FR.UTF-8',\n'icelandic':'is_IS.ISO8859-1',\n'id':'id_ID.ISO8859-1',\n'id_id':'id_ID.ISO8859-1',\n'ig_ng':'ig_NG.UTF-8',\n'ik_ca':'ik_CA.UTF-8',\n'in':'id_ID.ISO8859-1',\n'in_id':'id_ID.ISO8859-1',\n'is':'is_IS.ISO8859-1',\n'is_is':'is_IS.ISO8859-1',\n'iso-8859-1':'en_US.ISO8859-1',\n'iso-8859-15':'en_US.ISO8859-15',\n'iso8859-1':'en_US.ISO8859-1',\n'iso8859-15':'en_US.ISO8859-15',\n'iso_8859_1':'en_US.ISO8859-1',\n'iso_8859_15':'en_US.ISO8859-15',\n'it':'it_IT.ISO8859-1',\n'it_ch':'it_CH.ISO8859-1',\n'it_it':'it_IT.ISO8859-1',\n'italian':'it_IT.ISO8859-1',\n'iu':'iu_CA.NUNACOM-8',\n'iu_ca':'iu_CA.NUNACOM-8',\n'iu_ca.nunacom8':'iu_CA.NUNACOM-8',\n'iw':'he_IL.ISO8859-8',\n'iw_il':'he_IL.ISO8859-8',\n'iw_il.utf8':'iw_IL.UTF-8',\n'ja':'ja_JP.eucJP',\n'ja_jp':'ja_JP.eucJP',\n'ja_jp.euc':'ja_JP.eucJP',\n'ja_jp.mscode':'ja_JP.SJIS',\n'ja_jp.pck':'ja_JP.SJIS',\n'japan':'ja_JP.eucJP',\n'japanese':'ja_JP.eucJP',\n'japanese-euc':'ja_JP.eucJP',\n'japanese.euc':'ja_JP.eucJP',\n'jp_jp':'ja_JP.eucJP',\n'ka':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge.georgianacademy':'ka_GE.GEORGIAN-ACADEMY',\n'ka_ge.georgianps':'ka_GE.GEORGIAN-PS',\n'ka_ge.georgianrs':'ka_GE.GEORGIAN-ACADEMY',\n'kk_kz':'kk_KZ.RK1048',\n'kl':'kl_GL.ISO8859-1',\n'kl_gl':'kl_GL.ISO8859-1',\n'km_kh':'km_KH.UTF-8',\n'kn':'kn_IN.UTF-8',\n'kn_in':'kn_IN.UTF-8',\n'ko':'ko_KR.eucKR',\n'ko_kr':'ko_KR.eucKR',\n'ko_kr.euc':'ko_KR.eucKR',\n'kok_in':'kok_IN.UTF-8',\n'korean':'ko_KR.eucKR',\n'korean.euc':'ko_KR.eucKR',\n'ks':'ks_IN.UTF-8',\n'ks_in':'ks_IN.UTF-8',\n'ks_in@devanagari.utf8':'ks_IN.UTF-8@devanagari',\n'ku_tr':'ku_TR.ISO8859-9',\n'kw':'kw_GB.ISO8859-1',\n'kw_gb':'kw_GB.ISO8859-1',\n'ky':'ky_KG.UTF-8',\n'ky_kg':'ky_KG.UTF-8',\n'lb_lu':'lb_LU.UTF-8',\n'lg_ug':'lg_UG.ISO8859-10',\n'li_be':'li_BE.UTF-8',\n'li_nl':'li_NL.UTF-8',\n'lij_it':'lij_IT.UTF-8',\n'lithuanian':'lt_LT.ISO8859-13',\n'lo':'lo_LA.MULELAO-1',\n'lo_la':'lo_LA.MULELAO-1',\n'lo_la.cp1133':'lo_LA.IBM-CP1133',\n'lo_la.ibmcp1133':'lo_LA.IBM-CP1133',\n'lo_la.mulelao1':'lo_LA.MULELAO-1',\n'lt':'lt_LT.ISO8859-13',\n'lt_lt':'lt_LT.ISO8859-13',\n'lv':'lv_LV.ISO8859-13',\n'lv_lv':'lv_LV.ISO8859-13',\n'mag_in':'mag_IN.UTF-8',\n'mai':'mai_IN.UTF-8',\n'mai_in':'mai_IN.UTF-8',\n'mg_mg':'mg_MG.ISO8859-15',\n'mhr_ru':'mhr_RU.UTF-8',\n'mi':'mi_NZ.ISO8859-1',\n'mi_nz':'mi_NZ.ISO8859-1',\n'mk':'mk_MK.ISO8859-5',\n'mk_mk':'mk_MK.ISO8859-5',\n'ml':'ml_IN.UTF-8',\n'ml_in':'ml_IN.UTF-8',\n'mn_mn':'mn_MN.UTF-8',\n'mni_in':'mni_IN.UTF-8',\n'mr':'mr_IN.UTF-8',\n'mr_in':'mr_IN.UTF-8',\n'ms':'ms_MY.ISO8859-1',\n'ms_my':'ms_MY.ISO8859-1',\n'mt':'mt_MT.ISO8859-3',\n'mt_mt':'mt_MT.ISO8859-3',\n'my_mm':'my_MM.UTF-8',\n'nan_tw@latin':'nan_TW.UTF-8@latin',\n'nb':'nb_NO.ISO8859-1',\n'nb_no':'nb_NO.ISO8859-1',\n'nds_de':'nds_DE.UTF-8',\n'nds_nl':'nds_NL.UTF-8',\n'ne_np':'ne_NP.UTF-8',\n'nhn_mx':'nhn_MX.UTF-8',\n'niu_nu':'niu_NU.UTF-8',\n'niu_nz':'niu_NZ.UTF-8',\n'nl':'nl_NL.ISO8859-1',\n'nl_aw':'nl_AW.UTF-8',\n'nl_be':'nl_BE.ISO8859-1',\n'nl_nl':'nl_NL.ISO8859-1',\n'nn':'nn_NO.ISO8859-1',\n'nn_no':'nn_NO.ISO8859-1',\n'no':'no_NO.ISO8859-1',\n'no@nynorsk':'ny_NO.ISO8859-1',\n'no_no':'no_NO.ISO8859-1',\n'no_no.iso88591@bokmal':'no_NO.ISO8859-1',\n'no_no.iso88591@nynorsk':'no_NO.ISO8859-1',\n'norwegian':'no_NO.ISO8859-1',\n'nr':'nr_ZA.ISO8859-1',\n'nr_za':'nr_ZA.ISO8859-1',\n'nso':'nso_ZA.ISO8859-15',\n'nso_za':'nso_ZA.ISO8859-15',\n'ny':'ny_NO.ISO8859-1',\n'ny_no':'ny_NO.ISO8859-1',\n'nynorsk':'nn_NO.ISO8859-1',\n'oc':'oc_FR.ISO8859-1',\n'oc_fr':'oc_FR.ISO8859-1',\n'om_et':'om_ET.UTF-8',\n'om_ke':'om_KE.ISO8859-1',\n'or':'or_IN.UTF-8',\n'or_in':'or_IN.UTF-8',\n'os_ru':'os_RU.UTF-8',\n'pa':'pa_IN.UTF-8',\n'pa_in':'pa_IN.UTF-8',\n'pa_pk':'pa_PK.UTF-8',\n'pap_an':'pap_AN.UTF-8',\n'pd':'pd_US.ISO8859-1',\n'pd_de':'pd_DE.ISO8859-1',\n'pd_us':'pd_US.ISO8859-1',\n'ph':'ph_PH.ISO8859-1',\n'ph_ph':'ph_PH.ISO8859-1',\n'pl':'pl_PL.ISO8859-2',\n'pl_pl':'pl_PL.ISO8859-2',\n'polish':'pl_PL.ISO8859-2',\n'portuguese':'pt_PT.ISO8859-1',\n'portuguese_brazil':'pt_BR.ISO8859-1',\n'posix':'C',\n'posix-utf2':'C',\n'pp':'pp_AN.ISO8859-1',\n'pp_an':'pp_AN.ISO8859-1',\n'ps_af':'ps_AF.UTF-8',\n'pt':'pt_PT.ISO8859-1',\n'pt_br':'pt_BR.ISO8859-1',\n'pt_pt':'pt_PT.ISO8859-1',\n'ro':'ro_RO.ISO8859-2',\n'ro_ro':'ro_RO.ISO8859-2',\n'romanian':'ro_RO.ISO8859-2',\n'ru':'ru_RU.UTF-8',\n'ru_ru':'ru_RU.UTF-8',\n'ru_ua':'ru_UA.KOI8-U',\n'rumanian':'ro_RO.ISO8859-2',\n'russian':'ru_RU.ISO8859-5',\n'rw':'rw_RW.ISO8859-1',\n'rw_rw':'rw_RW.ISO8859-1',\n'sa_in':'sa_IN.UTF-8',\n'sat_in':'sat_IN.UTF-8',\n'sc_it':'sc_IT.UTF-8',\n'sd':'sd_IN.UTF-8',\n'sd_in':'sd_IN.UTF-8',\n'sd_in@devanagari.utf8':'sd_IN.UTF-8@devanagari',\n'sd_pk':'sd_PK.UTF-8',\n'se_no':'se_NO.UTF-8',\n'serbocroatian':'sr_RS.UTF-8@latin',\n'sh':'sr_RS.UTF-8@latin',\n'sh_ba.iso88592@bosnia':'sr_CS.ISO8859-2',\n'sh_hr':'sh_HR.ISO8859-2',\n'sh_hr.iso88592':'hr_HR.ISO8859-2',\n'sh_sp':'sr_CS.ISO8859-2',\n'sh_yu':'sr_RS.UTF-8@latin',\n'shs_ca':'shs_CA.UTF-8',\n'si':'si_LK.UTF-8',\n'si_lk':'si_LK.UTF-8',\n'sid_et':'sid_ET.UTF-8',\n'sinhala':'si_LK.UTF-8',\n'sk':'sk_SK.ISO8859-2',\n'sk_sk':'sk_SK.ISO8859-2',\n'sl':'sl_SI.ISO8859-2',\n'sl_cs':'sl_CS.ISO8859-2',\n'sl_si':'sl_SI.ISO8859-2',\n'slovak':'sk_SK.ISO8859-2',\n'slovene':'sl_SI.ISO8859-2',\n'slovenian':'sl_SI.ISO8859-2',\n'so_dj':'so_DJ.ISO8859-1',\n'so_et':'so_ET.UTF-8',\n'so_ke':'so_KE.ISO8859-1',\n'so_so':'so_SO.ISO8859-1',\n'sp':'sr_CS.ISO8859-5',\n'sp_yu':'sr_CS.ISO8859-5',\n'spanish':'es_ES.ISO8859-1',\n'spanish_spain':'es_ES.ISO8859-1',\n'sq':'sq_AL.ISO8859-2',\n'sq_al':'sq_AL.ISO8859-2',\n'sq_mk':'sq_MK.UTF-8',\n'sr':'sr_RS.UTF-8',\n'sr@cyrillic':'sr_RS.UTF-8',\n'sr@latn':'sr_CS.UTF-8@latin',\n'sr_cs':'sr_CS.UTF-8',\n'sr_cs.iso88592@latn':'sr_CS.ISO8859-2',\n'sr_cs@latn':'sr_CS.UTF-8@latin',\n'sr_me':'sr_ME.UTF-8',\n'sr_rs':'sr_RS.UTF-8',\n'sr_rs@latn':'sr_RS.UTF-8@latin',\n'sr_sp':'sr_CS.ISO8859-2',\n'sr_yu':'sr_RS.UTF-8@latin',\n'sr_yu.cp1251@cyrillic':'sr_CS.CP1251',\n'sr_yu.iso88592':'sr_CS.ISO8859-2',\n'sr_yu.iso88595':'sr_CS.ISO8859-5',\n'sr_yu.iso88595@cyrillic':'sr_CS.ISO8859-5',\n'sr_yu.microsoftcp1251@cyrillic':'sr_CS.CP1251',\n'sr_yu.utf8':'sr_RS.UTF-8',\n'sr_yu.utf8@cyrillic':'sr_RS.UTF-8',\n'sr_yu@cyrillic':'sr_RS.UTF-8',\n'ss':'ss_ZA.ISO8859-1',\n'ss_za':'ss_ZA.ISO8859-1',\n'st':'st_ZA.ISO8859-1',\n'st_za':'st_ZA.ISO8859-1',\n'sv':'sv_SE.ISO8859-1',\n'sv_fi':'sv_FI.ISO8859-1',\n'sv_se':'sv_SE.ISO8859-1',\n'sw_ke':'sw_KE.UTF-8',\n'sw_tz':'sw_TZ.UTF-8',\n'swedish':'sv_SE.ISO8859-1',\n'szl_pl':'szl_PL.UTF-8',\n'ta':'ta_IN.TSCII-0',\n'ta_in':'ta_IN.TSCII-0',\n'ta_in.tscii':'ta_IN.TSCII-0',\n'ta_in.tscii0':'ta_IN.TSCII-0',\n'ta_lk':'ta_LK.UTF-8',\n'te':'te_IN.UTF-8',\n'te_in':'te_IN.UTF-8',\n'tg':'tg_TJ.KOI8-C',\n'tg_tj':'tg_TJ.KOI8-C',\n'th':'th_TH.ISO8859-11',\n'th_th':'th_TH.ISO8859-11',\n'th_th.tactis':'th_TH.TIS620',\n'th_th.tis620':'th_TH.TIS620',\n'thai':'th_TH.ISO8859-11',\n'ti_er':'ti_ER.UTF-8',\n'ti_et':'ti_ET.UTF-8',\n'tig_er':'tig_ER.UTF-8',\n'tk_tm':'tk_TM.UTF-8',\n'tl':'tl_PH.ISO8859-1',\n'tl_ph':'tl_PH.ISO8859-1',\n'tn':'tn_ZA.ISO8859-15',\n'tn_za':'tn_ZA.ISO8859-15',\n'tr':'tr_TR.ISO8859-9',\n'tr_cy':'tr_CY.ISO8859-9',\n'tr_tr':'tr_TR.ISO8859-9',\n'ts':'ts_ZA.ISO8859-1',\n'ts_za':'ts_ZA.ISO8859-1',\n'tt':'tt_RU.TATAR-CYR',\n'tt_ru':'tt_RU.TATAR-CYR',\n'tt_ru.tatarcyr':'tt_RU.TATAR-CYR',\n'tt_ru@iqtelif':'tt_RU.UTF-8@iqtelif',\n'turkish':'tr_TR.ISO8859-9',\n'ug_cn':'ug_CN.UTF-8',\n'uk':'uk_UA.KOI8-U',\n'uk_ua':'uk_UA.KOI8-U',\n'univ':'en_US.utf',\n'universal':'en_US.utf',\n'universal.utf8@ucs4':'en_US.UTF-8',\n'unm_us':'unm_US.UTF-8',\n'ur':'ur_PK.CP1256',\n'ur_in':'ur_IN.UTF-8',\n'ur_pk':'ur_PK.CP1256',\n'uz':'uz_UZ.UTF-8',\n'uz_uz':'uz_UZ.UTF-8',\n'uz_uz@cyrillic':'uz_UZ.UTF-8',\n've':'ve_ZA.UTF-8',\n've_za':'ve_ZA.UTF-8',\n'vi':'vi_VN.TCVN',\n'vi_vn':'vi_VN.TCVN',\n'vi_vn.tcvn':'vi_VN.TCVN',\n'vi_vn.tcvn5712':'vi_VN.TCVN',\n'vi_vn.viscii':'vi_VN.VISCII',\n'vi_vn.viscii111':'vi_VN.VISCII',\n'wa':'wa_BE.ISO8859-1',\n'wa_be':'wa_BE.ISO8859-1',\n'wae_ch':'wae_CH.UTF-8',\n'wal_et':'wal_ET.UTF-8',\n'wo_sn':'wo_SN.UTF-8',\n'xh':'xh_ZA.ISO8859-1',\n'xh_za':'xh_ZA.ISO8859-1',\n'yi':'yi_US.CP1255',\n'yi_us':'yi_US.CP1255',\n'yo_ng':'yo_NG.UTF-8',\n'yue_hk':'yue_HK.UTF-8',\n'zh':'zh_CN.eucCN',\n'zh_cn':'zh_CN.gb2312',\n'zh_cn.big5':'zh_TW.big5',\n'zh_cn.euc':'zh_CN.eucCN',\n'zh_hk':'zh_HK.big5hkscs',\n'zh_hk.big5hk':'zh_HK.big5hkscs',\n'zh_sg':'zh_SG.GB2312',\n'zh_sg.gbk':'zh_SG.GBK',\n'zh_tw':'zh_TW.big5',\n'zh_tw.euc':'zh_TW.eucTW',\n'zh_tw.euctw':'zh_TW.eucTW',\n'zu':'zu_ZA.ISO8859-1',\n'zu_za':'zu_ZA.ISO8859-1',\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nwindows_locale={\n0x0436:\"af_ZA\",\n0x041c:\"sq_AL\",\n0x0484:\"gsw_FR\",\n0x045e:\"am_ET\",\n0x0401:\"ar_SA\",\n0x0801:\"ar_IQ\",\n0x0c01:\"ar_EG\",\n0x1001:\"ar_LY\",\n0x1401:\"ar_DZ\",\n0x1801:\"ar_MA\",\n0x1c01:\"ar_TN\",\n0x2001:\"ar_OM\",\n0x2401:\"ar_YE\",\n0x2801:\"ar_SY\",\n0x2c01:\"ar_JO\",\n0x3001:\"ar_LB\",\n0x3401:\"ar_KW\",\n0x3801:\"ar_AE\",\n0x3c01:\"ar_BH\",\n0x4001:\"ar_QA\",\n0x042b:\"hy_AM\",\n0x044d:\"as_IN\",\n0x042c:\"az_AZ\",\n0x082c:\"az_AZ\",\n0x046d:\"ba_RU\",\n0x042d:\"eu_ES\",\n0x0423:\"be_BY\",\n0x0445:\"bn_IN\",\n0x201a:\"bs_BA\",\n0x141a:\"bs_BA\",\n0x047e:\"br_FR\",\n0x0402:\"bg_BG\",\n\n0x0403:\"ca_ES\",\n0x0004:\"zh_CHS\",\n0x0404:\"zh_TW\",\n0x0804:\"zh_CN\",\n0x0c04:\"zh_HK\",\n0x1004:\"zh_SG\",\n0x1404:\"zh_MO\",\n0x7c04:\"zh_CHT\",\n0x0483:\"co_FR\",\n0x041a:\"hr_HR\",\n0x101a:\"hr_BA\",\n0x0405:\"cs_CZ\",\n0x0406:\"da_DK\",\n0x048c:\"gbz_AF\",\n0x0465:\"div_MV\",\n0x0413:\"nl_NL\",\n0x0813:\"nl_BE\",\n0x0409:\"en_US\",\n0x0809:\"en_GB\",\n0x0c09:\"en_AU\",\n0x1009:\"en_CA\",\n0x1409:\"en_NZ\",\n0x1809:\"en_IE\",\n0x1c09:\"en_ZA\",\n0x2009:\"en_JA\",\n0x2409:\"en_CB\",\n0x2809:\"en_BZ\",\n0x2c09:\"en_TT\",\n0x3009:\"en_ZW\",\n0x3409:\"en_PH\",\n0x4009:\"en_IN\",\n0x4409:\"en_MY\",\n0x4809:\"en_IN\",\n0x0425:\"et_EE\",\n0x0438:\"fo_FO\",\n0x0464:\"fil_PH\",\n0x040b:\"fi_FI\",\n0x040c:\"fr_FR\",\n0x080c:\"fr_BE\",\n0x0c0c:\"fr_CA\",\n0x100c:\"fr_CH\",\n0x140c:\"fr_LU\",\n0x180c:\"fr_MC\",\n0x0462:\"fy_NL\",\n0x0456:\"gl_ES\",\n0x0437:\"ka_GE\",\n0x0407:\"de_DE\",\n0x0807:\"de_CH\",\n0x0c07:\"de_AT\",\n0x1007:\"de_LU\",\n0x1407:\"de_LI\",\n0x0408:\"el_GR\",\n0x046f:\"kl_GL\",\n0x0447:\"gu_IN\",\n0x0468:\"ha_NG\",\n0x040d:\"he_IL\",\n0x0439:\"hi_IN\",\n0x040e:\"hu_HU\",\n0x040f:\"is_IS\",\n0x0421:\"id_ID\",\n0x045d:\"iu_CA\",\n0x085d:\"iu_CA\",\n0x083c:\"ga_IE\",\n0x0410:\"it_IT\",\n0x0810:\"it_CH\",\n0x0411:\"ja_JP\",\n0x044b:\"kn_IN\",\n0x043f:\"kk_KZ\",\n0x0453:\"kh_KH\",\n0x0486:\"qut_GT\",\n0x0487:\"rw_RW\",\n0x0457:\"kok_IN\",\n0x0412:\"ko_KR\",\n0x0440:\"ky_KG\",\n0x0454:\"lo_LA\",\n0x0426:\"lv_LV\",\n0x0427:\"lt_LT\",\n0x082e:\"dsb_DE\",\n0x046e:\"lb_LU\",\n0x042f:\"mk_MK\",\n0x043e:\"ms_MY\",\n0x083e:\"ms_BN\",\n0x044c:\"ml_IN\",\n0x043a:\"mt_MT\",\n0x0481:\"mi_NZ\",\n0x047a:\"arn_CL\",\n0x044e:\"mr_IN\",\n0x047c:\"moh_CA\",\n0x0450:\"mn_MN\",\n0x0850:\"mn_CN\",\n0x0461:\"ne_NP\",\n0x0414:\"nb_NO\",\n0x0814:\"nn_NO\",\n0x0482:\"oc_FR\",\n0x0448:\"or_IN\",\n0x0463:\"ps_AF\",\n0x0429:\"fa_IR\",\n0x0415:\"pl_PL\",\n0x0416:\"pt_BR\",\n0x0816:\"pt_PT\",\n0x0446:\"pa_IN\",\n0x046b:\"quz_BO\",\n0x086b:\"quz_EC\",\n0x0c6b:\"quz_PE\",\n0x0418:\"ro_RO\",\n0x0417:\"rm_CH\",\n0x0419:\"ru_RU\",\n0x243b:\"smn_FI\",\n0x103b:\"smj_NO\",\n0x143b:\"smj_SE\",\n0x043b:\"se_NO\",\n0x083b:\"se_SE\",\n0x0c3b:\"se_FI\",\n0x203b:\"sms_FI\",\n0x183b:\"sma_NO\",\n0x1c3b:\"sma_SE\",\n0x044f:\"sa_IN\",\n0x0c1a:\"sr_SP\",\n0x1c1a:\"sr_BA\",\n0x081a:\"sr_SP\",\n0x181a:\"sr_BA\",\n0x045b:\"si_LK\",\n0x046c:\"ns_ZA\",\n0x0432:\"tn_ZA\",\n0x041b:\"sk_SK\",\n0x0424:\"sl_SI\",\n0x040a:\"es_ES\",\n0x080a:\"es_MX\",\n0x0c0a:\"es_ES\",\n0x100a:\"es_GT\",\n0x140a:\"es_CR\",\n0x180a:\"es_PA\",\n0x1c0a:\"es_DO\",\n0x200a:\"es_VE\",\n0x240a:\"es_CO\",\n0x280a:\"es_PE\",\n0x2c0a:\"es_AR\",\n0x300a:\"es_EC\",\n0x340a:\"es_CL\",\n0x380a:\"es_UR\",\n0x3c0a:\"es_PY\",\n0x400a:\"es_BO\",\n0x440a:\"es_SV\",\n0x480a:\"es_HN\",\n0x4c0a:\"es_NI\",\n0x500a:\"es_PR\",\n0x540a:\"es_US\",\n\n0x0441:\"sw_KE\",\n0x041d:\"sv_SE\",\n0x081d:\"sv_FI\",\n0x045a:\"syr_SY\",\n0x0428:\"tg_TJ\",\n0x085f:\"tmz_DZ\",\n0x0449:\"ta_IN\",\n0x0444:\"tt_RU\",\n0x044a:\"te_IN\",\n0x041e:\"th_TH\",\n0x0851:\"bo_BT\",\n0x0451:\"bo_CN\",\n0x041f:\"tr_TR\",\n0x0442:\"tk_TM\",\n0x0480:\"ug_CN\",\n0x0422:\"uk_UA\",\n0x042e:\"wen_DE\",\n0x0420:\"ur_PK\",\n0x0820:\"ur_IN\",\n0x0443:\"uz_UZ\",\n0x0843:\"uz_UZ\",\n0x042a:\"vi_VN\",\n0x0452:\"cy_GB\",\n0x0488:\"wo_SN\",\n0x0434:\"xh_ZA\",\n0x0485:\"sah_RU\",\n0x0478:\"ii_CN\",\n0x046a:\"yo_NG\",\n0x0435:\"zu_ZA\",\n}\n\ndef _print_locale():\n\n ''\n \n categories={}\n def _init_categories(categories=categories):\n for k,v in globals().items():\n if k[:3]=='LC_':\n categories[k]=v\n _init_categories()\n del categories['LC_ALL']\n \n print('Locale defaults as determined by getdefaultlocale():')\n print('-'*72)\n lang,enc=getdefaultlocale()\n print('Language: ',lang or'(undefined)')\n print('Encoding: ',enc or'(undefined)')\n print()\n \n print('Locale settings on startup:')\n print('-'*72)\n for name,category in categories.items():\n print(name,'...')\n lang,enc=getlocale(category)\n print(' Language: ',lang or'(undefined)')\n print(' Encoding: ',enc or'(undefined)')\n print()\n \n print()\n print('Locale settings after calling resetlocale():')\n print('-'*72)\n resetlocale()\n for name,category in categories.items():\n print(name,'...')\n lang,enc=getlocale(category)\n print(' Language: ',lang or'(undefined)')\n print(' Encoding: ',enc or'(undefined)')\n print()\n \n try :\n setlocale(LC_ALL,\"\")\n except :\n print('NOTE:')\n print('setlocale(LC_ALL, \"\") does not support the default locale')\n print('given in the OS environment variables.')\n else :\n print()\n print('Locale settings after calling setlocale(LC_ALL, \"\"):')\n print('-'*72)\n for name,category in categories.items():\n print(name,'...')\n lang,enc=getlocale(category)\n print(' Language: ',lang or'(undefined)')\n print(' Encoding: ',enc or'(undefined)')\n print()\n \n \n \ntry :\n LC_MESSAGES\nexcept NameError:\n pass\nelse :\n __all__.append(\"LC_MESSAGES\")\n \nif __name__ =='__main__':\n print('Locale aliasing:')\n print()\n _print_locale()\n print()\n print('Number formatting:')\n print()\n _test()\n"], "xml.etree.cElementTree": [".py", "\n\nfrom xml.etree.ElementTree import *\n"], "_abcoll": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) for collections, according to PEP 3119.\n\nDON'T USE THIS MODULE DIRECTLY! The classes here should be imported\nvia collections; they are defined here only to alleviate certain\nbootstrapping issues. Unit tests are in test_collections.\n\"\"\"\n\nfrom abc import ABCMeta,abstractmethod\nimport sys\n\n__all__=[\"Hashable\",\"Iterable\",\"Iterator\",\n\"Sized\",\"Container\",\"Callable\",\n\"Set\",\"MutableSet\",\n\"Mapping\",\"MutableMapping\",\n\"MappingView\",\"KeysView\",\"ItemsView\",\"ValuesView\",\n\"Sequence\",\"MutableSequence\",\n\"ByteString\",\n]\n\n\"\"\"\n### collection related types which are not exposed through builtin ###\n## iterators ##\n#fixme brython\n#bytes_iterator = type(iter(b''))\nbytes_iterator = type(iter(''))\n#fixme brython\n#bytearray_iterator = type(iter(bytearray()))\n#callable_iterator = ???\ndict_keyiterator = type(iter({}.keys()))\ndict_valueiterator = type(iter({}.values()))\ndict_itemiterator = type(iter({}.items()))\nlist_iterator = type(iter([]))\nlist_reverseiterator = type(iter(reversed([])))\nrange_iterator = type(iter(range(0)))\nset_iterator = type(iter(set()))\nstr_iterator = type(iter(\"\"))\ntuple_iterator = type(iter(()))\nzip_iterator = type(iter(zip()))\n## views ##\ndict_keys = type({}.keys())\ndict_values = type({}.values())\ndict_items = type({}.items())\n## misc ##\ndict_proxy = type(type.__dict__)\n\"\"\"\n\ndef abstractmethod(self):\n return self\n \n \n \n \n \nclass Iterable:\n\n @abstractmethod\n def __iter__(self):\n while False :\n yield None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Iterable:\n if any(\"__iter__\"in B.__dict__ for B in C.__mro__):\n return True\n return NotImplemented\n \n \n \nclass Sized:\n\n @abstractmethod\n def __len__(self):\n return 0\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Sized:\n if any(\"__len__\"in B.__dict__ for B in C.__mro__):\n return True\n return NotImplemented\n \n \n \nclass Container:\n\n @abstractmethod\n def __contains__(self,x):\n return False\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is Container:\n if any(\"__contains__\"in B.__dict__ for B in C.__mro__):\n return True\n return NotImplemented\n \n \n \n \nclass Mapping(Sized,Iterable,Container):\n\n @abstractmethod\n def __getitem__(self,key):\n raise KeyError\n \n def get(self,key,default=None ):\n try :\n return self[key]\n except KeyError:\n return default\n \n def __contains__(self,key):\n try :\n self[key]\n except KeyError:\n return False\n else :\n return True\n \n def keys(self):\n return KeysView(self)\n \n def items(self):\n return ItemsView(self)\n \n def values(self):\n return ValuesView(self)\n \n def __eq__(self,other):\n if not isinstance(other,Mapping):\n return NotImplemented\n return dict(self.items())==dict(other.items())\n \n def __ne__(self,other):\n return not (self ==other)\n \n \nclass MutableMapping(Mapping):\n\n @abstractmethod\n def __setitem__(self,key,value):\n raise KeyError\n \n @abstractmethod\n def __delitem__(self,key):\n raise KeyError\n \n __marker=object()\n \n def pop(self,key,default=__marker):\n try :\n value=self[key]\n except KeyError:\n if default is self.__marker:\n raise\n return default\n else :\n del self[key]\n return value\n \n def popitem(self):\n try :\n key=next(iter(self))\n except StopIteration:\n raise KeyError\n value=self[key]\n del self[key]\n return key,value\n \n def clear(self):\n try :\n while True :\n self.popitem()\n except KeyError:\n pass\n \n def update(*args,**kwds):\n if len(args)>2:\n raise TypeError(\"update() takes at most 2 positional \"\n \"arguments ({} given)\".format(len(args)))\n elif not args:\n raise TypeError(\"update() takes at least 1 argument (0 given)\")\n self=args[0]\n other=args[1]if len(args)>=2 else ()\n \n if isinstance(other,Mapping):\n for key in other:\n self[key]=other[key]\n elif hasattr(other,\"keys\"):\n for key in other.keys():\n self[key]=other[key]\n else :\n for key,value in other:\n self[key]=value\n for key,value in kwds.items():\n self[key]=value\n \n def setdefault(self,key,default=None ):\n try :\n return self[key]\n except KeyError:\n self[key]=default\n return default\n \n \n"], "cmd": [".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\nimport string,sys\n\n__all__=[\"Cmd\"]\n\nPROMPT='(Cmd) '\nIDENTCHARS=string.ascii_letters+string.digits+'_'\n\nclass Cmd:\n ''\n\n\n\n\n\n\n\n\n\n \n prompt=PROMPT\n identchars=IDENTCHARS\n ruler='='\n lastcmd=''\n intro=None\n doc_leader=\"\"\n doc_header=\"Documented commands (type help ):\"\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"], "encodings.cp1252": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1252',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\u0160'\n'\\u2039'\n'\\u0152'\n'\\ufffe'\n'\\u017d'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\u0161'\n'\\u203a'\n'\\u0153'\n'\\ufffe'\n'\\u017e'\n'\\u0178'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\xa4'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xaa'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xba'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\xc0'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\xc7'\n'\\xc8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xcc'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xd0'\n'\\xd1'\n'\\xd2'\n'\\xd3'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\xd9'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\xdd'\n'\\xde'\n'\\xdf'\n'\\xe0'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\xe7'\n'\\xe8'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xec'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xf0'\n'\\xf1'\n'\\xf2'\n'\\xf3'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\xf9'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\xfd'\n'\\xfe'\n'\\xff'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_io": [".py", "''\n\n\n\nimport os\nimport abc\nimport codecs\nimport errno\n\ntry :\n from _thread import allocate_lock as Lock\nexcept ImportError:\n from _dummy_thread import allocate_lock as Lock\n \nimport io\n\n\nSEEK_SET=0\nSEEK_CUR=1\nSEEK_END=2\n\nvalid_seek_flags={0,1,2}\nif hasattr(os,'SEEK_HOLE'):\n valid_seek_flags.add(os.SEEK_HOLE)\n valid_seek_flags.add(os.SEEK_DATA)\n \n \nDEFAULT_BUFFER_SIZE=8 *1024\n\n\n\n\n\n\nBlockingIOError=BlockingIOError\n\n\ndef __open(file,mode=\"r\",buffering=-1,encoding=None ,errors=None ,\nnewline=None ,closefd=True ,opener=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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 not isinstance(file,(str,bytes,int)):\n raise TypeError(\"invalid file: %r\"%file)\n if not isinstance(mode,str):\n raise TypeError(\"invalid mode: %r\"%mode)\n if not isinstance(buffering,int):\n raise TypeError(\"invalid buffering: %r\"%buffering)\n if encoding is not None and not isinstance(encoding,str):\n raise TypeError(\"invalid encoding: %r\"%encoding)\n if errors is not None and not isinstance(errors,str):\n raise TypeError(\"invalid errors: %r\"%errors)\n modes=set(mode)\n if modes -set(\"axrwb+tU\")or len(mode)>len(modes):\n raise ValueError(\"invalid mode: %r\"%mode)\n creating=\"x\"in modes\n reading=\"r\"in modes\n writing=\"w\"in modes\n appending=\"a\"in modes\n updating=\"+\"in modes\n text=\"t\"in modes\n binary=\"b\"in modes\n if\"U\"in modes:\n if creating or writing or appending:\n raise ValueError(\"can't use U and writing mode at once\")\n reading=True\n if text and binary:\n raise ValueError(\"can't have text and binary mode at once\")\n if creating+reading+writing+appending >1:\n raise ValueError(\"can't have read/write/append mode at once\")\n if not (creating or reading or writing or appending):\n raise ValueError(\"must have exactly one of read/write/append mode\")\n if binary and encoding is not None :\n raise ValueError(\"binary mode doesn't take an encoding argument\")\n if binary and errors is not None :\n raise ValueError(\"binary mode doesn't take an errors argument\")\n if binary and newline is not None :\n raise ValueError(\"binary mode doesn't take a newline argument\")\n raw=FileIO(file,\n (creating and\"x\"or\"\")+\n (reading and\"r\"or\"\")+\n (writing and\"w\"or\"\")+\n (appending and\"a\"or\"\")+\n (updating and\"+\"or\"\"),\n closefd,opener=opener)\n line_buffering=False\n if buffering ==1 or buffering <0 and raw.isatty():\n buffering=-1\n line_buffering=True\n if buffering <0:\n buffering=DEFAULT_BUFFER_SIZE\n try :\n bs=os.fstat(raw.fileno()).st_blksize\n except (os.error,AttributeError):\n pass\n else :\n if bs >1:\n buffering=bs\n if buffering <0:\n raise ValueError(\"invalid buffering size\")\n if buffering ==0:\n if binary:\n return raw\n raise ValueError(\"can't have unbuffered text I/O\")\n if updating:\n buffer=BufferedRandom(raw,buffering)\n elif creating or writing or appending:\n buffer=BufferedWriter(raw,buffering)\n elif reading:\n buffer=BufferedReader(raw,buffering)\n else :\n raise ValueError(\"unknown mode: %r\"%mode)\n if binary:\n return buffer\n text=TextIOWrapper(buffer,encoding,errors,newline,line_buffering)\n text.mode=mode\n return text\n \n \nclass DocDescriptor:\n ''\n \n def __get__(self,obj,typ):\n return (\n \"open(file, mode='r', buffering=-1, encoding=None, \"\n \"errors=None, newline=None, closefd=True)\\n\\n\"+\n open.__doc__)\n \nclass OpenWrapper:\n ''\n\n\n\n\n\n \n __doc__=DocDescriptor()\n \n def __new__(cls,*args,**kwargs):\n return open(*args,**kwargs)\n \n \n \n \ntry :\n UnsupportedOperation=io.UnsupportedOperation\nexcept AttributeError:\n class UnsupportedOperation(ValueError,IOError):\n pass\n \n \nclass IOBase(metaclass=abc.ABCMeta):\n\n ''\n\n\n\n\n\n\n\n\n\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 _unsupported(self,name):\n ''\n raise UnsupportedOperation(\"%s.%s() not supported\"%\n (self.__class__.__name__,name))\n \n \n \n def seek(self,pos,whence=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n self._unsupported(\"seek\")\n \n def tell(self):\n ''\n return self.seek(0,1)\n \n def truncate(self,pos=None ):\n ''\n\n\n\n \n self._unsupported(\"truncate\")\n \n \n \n def flush(self):\n ''\n\n\n \n self._checkClosed()\n \n \n __closed=False\n \n def close(self):\n ''\n\n\n \n if not self.__closed:\n try :\n self.flush()\n finally :\n self.__closed=True\n \n def __del__(self):\n ''\n \n \n \n \n \n try :\n self.close()\n except :\n pass\n \n \n \n def seekable(self):\n ''\n\n\n\n \n return False\n \n def _checkSeekable(self,msg=None ):\n ''\n \n if not self.seekable():\n raise UnsupportedOperation(\"File or stream is not seekable.\"\n if msg is None else msg)\n \n def readable(self):\n ''\n\n\n \n return False\n \n def _checkReadable(self,msg=None ):\n ''\n \n if not self.readable():\n raise UnsupportedOperation(\"File or stream is not readable.\"\n if msg is None else msg)\n \n def writable(self):\n ''\n\n\n \n return False\n \n def _checkWritable(self,msg=None ):\n ''\n \n if not self.writable():\n raise UnsupportedOperation(\"File or stream is not writable.\"\n if msg is None else msg)\n \n @property\n def closed(self):\n ''\n\n\n \n return self.__closed\n \n def _checkClosed(self,msg=None ):\n ''\n \n if self.closed:\n raise ValueError(\"I/O operation on closed file.\"\n if msg is None else msg)\n \n \n \n def __enter__(self):\n ''\n self._checkClosed()\n return self\n \n def __exit__(self,*args):\n ''\n self.close()\n \n \n \n \n \n def fileno(self):\n ''\n\n\n \n self._unsupported(\"fileno\")\n \n def isatty(self):\n ''\n\n\n \n self._checkClosed()\n return False\n \n \n \n def readline(self,limit=-1):\n ''\n\n\n\n\n\n\n\n \n \n if hasattr(self,\"peek\"):\n def nreadahead():\n readahead=self.peek(1)\n if not readahead:\n return 1\n n=(readahead.find(b\"\\n\")+1)or len(readahead)\n if limit >=0:\n n=min(n,limit)\n return n\n else :\n def nreadahead():\n return 1\n if limit is None :\n limit=-1\n elif not isinstance(limit,int):\n raise TypeError(\"limit must be an integer\")\n res=bytearray()\n while limit <0 or len(res)=hint:\n break\n return lines\n \n def writelines(self,lines):\n self._checkClosed()\n for line in lines:\n self.write(line)\n \n \n \n \n \nclass RawIOBase(IOBase):\n\n ''\n \n \n \n \n \n \n \n \n \n \n \n def read(self,n=-1):\n ''\n\n\n\n \n if n is None :\n n=-1\n if n <0:\n return self.readall()\n b=bytearray(n.__index__())\n n=self.readinto(b)\n if n is None :\n return None\n del b[n:]\n return bytes(b)\n \n def readall(self):\n ''\n res=bytearray()\n while True :\n data=self.read(DEFAULT_BUFFER_SIZE)\n if not data:\n break\n res +=data\n if res:\n return bytes(res)\n else :\n \n return data\n \n def readinto(self,b):\n ''\n\n\n\n \n self._unsupported(\"readinto\")\n \n def write(self,b):\n ''\n\n\n \n self._unsupported(\"write\")\n \n \n \n \n \n \n \nclass BufferedIOBase(IOBase):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def read(self,n=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self._unsupported(\"read\")\n \n def read1(self,n=None ):\n ''\n\n \n self._unsupported(\"read1\")\n \n def readinto(self,b):\n ''\n\n\n\n\n\n\n\n\n \n \n data=self.read(len(b))\n n=len(data)\n try :\n b[:n]=data\n except TypeError as err:\n import array\n if not isinstance(b,array.array):\n raise err\n b[:n]=array.array('b',data)\n return n\n \n def write(self,b):\n ''\n\n\n\n\n\n\n \n self._unsupported(\"write\")\n \n def detach(self):\n ''\n\n\n\n\n \n self._unsupported(\"detach\")\n \n \n \n \n \nclass _BufferedIOMixin(BufferedIOBase):\n\n ''\n\n\n\n\n \n \n def __init__(self,raw):\n self._raw=raw\n \n \n \n def seek(self,pos,whence=0):\n new_position=self.raw.seek(pos,whence)\n if new_position <0:\n raise IOError(\"seek() returned an invalid position\")\n return new_position\n \n def tell(self):\n pos=self.raw.tell()\n if pos <0:\n raise IOError(\"tell() returned an invalid position\")\n return pos\n \n def truncate(self,pos=None ):\n \n \n \n self.flush()\n \n if pos is None :\n pos=self.tell()\n \n \n return self.raw.truncate(pos)\n \n \n \n def flush(self):\n if self.closed:\n raise ValueError(\"flush of closed file\")\n self.raw.flush()\n \n def close(self):\n if self.raw is not None and not self.closed:\n try :\n \n self.flush()\n finally :\n self.raw.close()\n \n def detach(self):\n if self.raw is None :\n raise ValueError(\"raw stream already detached\")\n self.flush()\n raw=self._raw\n self._raw=None\n return raw\n \n \n \n def seekable(self):\n return self.raw.seekable()\n \n def readable(self):\n return self.raw.readable()\n \n def writable(self):\n return self.raw.writable()\n \n @property\n def raw(self):\n return self._raw\n \n @property\n def closed(self):\n return self.raw.closed\n \n @property\n def name(self):\n return self.raw.name\n \n @property\n def mode(self):\n return self.raw.mode\n \n def __getstate__(self):\n raise TypeError(\"can not serialize a '{0}' object\"\n .format(self.__class__.__name__))\n \n def __repr__(self):\n clsname=self.__class__.__name__\n try :\n name=self.name\n except AttributeError:\n return\"<_io.{0}>\".format(clsname)\n else :\n return\"<_io.{0} name={1!r}>\".format(clsname,name)\n \n \n \n def fileno(self):\n return self.raw.fileno()\n \n def isatty(self):\n return self.raw.isatty()\n \n \nclass BytesIO(BufferedIOBase):\n\n ''\n \n def __init__(self,initial_bytes=None ):\n buf=bytearray()\n if initial_bytes is not None :\n buf +=initial_bytes\n self._buffer=buf\n self._pos=0\n \n def __getstate__(self):\n if self.closed:\n raise ValueError(\"__getstate__ on closed file\")\n return self.__dict__.copy()\n \n def getvalue(self):\n ''\n \n if self.closed:\n raise ValueError(\"getvalue on closed file\")\n return bytes(self._buffer)\n \n def getbuffer(self):\n ''\n \n return memoryview(self._buffer)\n \n def read(self,n=None ):\n if self.closed:\n raise ValueError(\"read from closed file\")\n if n is None :\n n=-1\n if n <0:\n n=len(self._buffer)\n if len(self._buffer)<=self._pos:\n return b\"\"\n newpos=min(len(self._buffer),self._pos+n)\n b=self._buffer[self._pos:newpos]\n self._pos=newpos\n return bytes(b)\n \n def read1(self,n):\n ''\n \n return self.read(n)\n \n def write(self,b):\n if self.closed:\n raise ValueError(\"write to closed file\")\n if isinstance(b,str):\n raise TypeError(\"can't write str to binary stream\")\n n=len(b)\n if n ==0:\n return 0\n pos=self._pos\n if pos >len(self._buffer):\n \n \n padding=b'\\x00'*(pos -len(self._buffer))\n self._buffer +=padding\n self._buffer[pos:pos+n]=b\n self._pos +=n\n return n\n \n def seek(self,pos,whence=0):\n if self.closed:\n raise ValueError(\"seek on closed file\")\n try :\n pos.__index__\n except AttributeError as err:\n raise TypeError(\"an integer is required\")from err\n if whence ==0:\n if pos <0:\n raise ValueError(\"negative seek position %r\"%(pos,))\n self._pos=pos\n elif whence ==1:\n self._pos=max(0,self._pos+pos)\n elif whence ==2:\n self._pos=max(0,len(self._buffer)+pos)\n else :\n raise ValueError(\"unsupported whence value\")\n return self._pos\n \n def tell(self):\n if self.closed:\n raise ValueError(\"tell on closed file\")\n return self._pos\n \n def truncate(self,pos=None ):\n if self.closed:\n raise ValueError(\"truncate on closed file\")\n if pos is None :\n pos=self._pos\n else :\n try :\n pos.__index__\n except AttributeError as err:\n raise TypeError(\"an integer is required\")from err\n if pos <0:\n raise ValueError(\"negative truncate position %r\"%(pos,))\n del self._buffer[pos:]\n return pos\n \n def readable(self):\n if self.closed:\n raise ValueError(\"I/O operation on closed file.\")\n return True\n \n def writable(self):\n if self.closed:\n raise ValueError(\"I/O operation on closed file.\")\n return True\n \n def seekable(self):\n if self.closed:\n raise ValueError(\"I/O operation on closed file.\")\n return True\n \n \nclass BufferedReader(_BufferedIOMixin):\n\n ''\n\n\n\n\n\n\n \n \n def __init__(self,raw,buffer_size=DEFAULT_BUFFER_SIZE):\n ''\n \n if not raw.readable():\n raise IOError('\"raw\" argument must be readable.')\n \n _BufferedIOMixin.__init__(self,raw)\n if buffer_size <=0:\n raise ValueError(\"invalid buffer size\")\n self.buffer_size=buffer_size\n self._reset_read_buf()\n self._read_lock=Lock()\n \n def _reset_read_buf(self):\n self._read_buf=b\"\"\n self._read_pos=0\n \n def read(self,n=None ):\n ''\n\n\n\n\n\n \n if n is not None and n <-1:\n raise ValueError(\"invalid number of bytes to read\")\n with self._read_lock:\n return self._read_unlocked(n)\n \n def _read_unlocked(self,n=None ):\n nodata_val=b\"\"\n empty_values=(b\"\",None )\n buf=self._read_buf\n pos=self._read_pos\n \n \n if n is None or n ==-1:\n self._reset_read_buf()\n if hasattr(self.raw,'readall'):\n chunk=self.raw.readall()\n if chunk is None :\n return buf[pos:]or None\n else :\n return buf[pos:]+chunk\n chunks=[buf[pos:]]\n current_size=0\n while True :\n \n try :\n chunk=self.raw.read()\n except InterruptedError:\n continue\n if chunk in empty_values:\n nodata_val=chunk\n break\n current_size +=len(chunk)\n chunks.append(chunk)\n return b\"\".join(chunks)or nodata_val\n \n \n avail=len(buf)-pos\n if n <=avail:\n \n self._read_pos +=n\n return buf[pos:pos+n]\n \n \n chunks=[buf[pos:]]\n wanted=max(self.buffer_size,n)\n while avail self.buffer_size:\n \n \n self._flush_unlocked()\n before=len(self._write_buf)\n self._write_buf.extend(b)\n written=len(self._write_buf)-before\n if len(self._write_buf)>self.buffer_size:\n try :\n self._flush_unlocked()\n except BlockingIOError as e:\n if len(self._write_buf)>self.buffer_size:\n \n \n overage=len(self._write_buf)-self.buffer_size\n written -=overage\n self._write_buf=self._write_buf[:self.buffer_size]\n raise BlockingIOError(e.errno,e.strerror,written)\n return written\n \n def truncate(self,pos=None ):\n with self._write_lock:\n self._flush_unlocked()\n if pos is None :\n pos=self.raw.tell()\n return self.raw.truncate(pos)\n \n def flush(self):\n with self._write_lock:\n self._flush_unlocked()\n \n def _flush_unlocked(self):\n if self.closed:\n raise ValueError(\"flush of closed file\")\n while self._write_buf:\n try :\n n=self.raw.write(self._write_buf)\n except InterruptedError:\n continue\n except BlockingIOError:\n raise RuntimeError(\"self.raw should implement RawIOBase: it \"\n \"should not raise BlockingIOError\")\n if n is None :\n raise BlockingIOError(\n errno.EAGAIN,\n \"write could not complete without blocking\",0)\n if n >len(self._write_buf)or n <0:\n raise IOError(\"write() returned incorrect number of bytes\")\n del self._write_buf[:n]\n \n def tell(self):\n return _BufferedIOMixin.tell(self)+len(self._write_buf)\n \n def seek(self,pos,whence=0):\n if whence not in valid_seek_flags:\n raise ValueError(\"invalid whence value\")\n with self._write_lock:\n self._flush_unlocked()\n return _BufferedIOMixin.seek(self,pos,whence)\n \n \nclass BufferedRWPair(BufferedIOBase):\n\n ''\n\n\n\n\n\n\n\n\n \n \n \n \n \n def __init__(self,reader,writer,buffer_size=DEFAULT_BUFFER_SIZE):\n ''\n\n\n \n if not reader.readable():\n raise IOError('\"reader\" argument must be readable.')\n \n if not writer.writable():\n raise IOError('\"writer\" argument must be writable.')\n \n self.reader=BufferedReader(reader,buffer_size)\n self.writer=BufferedWriter(writer,buffer_size)\n \n def read(self,n=None ):\n if n is None :\n n=-1\n return self.reader.read(n)\n \n def readinto(self,b):\n return self.reader.readinto(b)\n \n def write(self,b):\n return self.writer.write(b)\n \n def peek(self,n=0):\n return self.reader.peek(n)\n \n def read1(self,n):\n return self.reader.read1(n)\n \n def readable(self):\n return self.reader.readable()\n \n def writable(self):\n return self.writer.writable()\n \n def flush(self):\n return self.writer.flush()\n \n def close(self):\n self.writer.close()\n self.reader.close()\n \n def isatty(self):\n return self.reader.isatty()or self.writer.isatty()\n \n @property\n def closed(self):\n return self.writer.closed\n \n \nclass BufferedRandom(BufferedWriter,BufferedReader):\n\n ''\n\n\n\n\n \n \n def __init__(self,raw,buffer_size=DEFAULT_BUFFER_SIZE):\n raw._checkSeekable()\n BufferedReader.__init__(self,raw,buffer_size)\n BufferedWriter.__init__(self,raw,buffer_size)\n \n def seek(self,pos,whence=0):\n if whence not in valid_seek_flags:\n raise ValueError(\"invalid whence value\")\n self.flush()\n if self._read_buf:\n \n with self._read_lock:\n self.raw.seek(self._read_pos -len(self._read_buf),1)\n \n \n pos=self.raw.seek(pos,whence)\n with self._read_lock:\n self._reset_read_buf()\n if pos <0:\n raise IOError(\"seek() returned invalid position\")\n return pos\n \n def tell(self):\n if self._write_buf:\n return BufferedWriter.tell(self)\n else :\n return BufferedReader.tell(self)\n \n def truncate(self,pos=None ):\n if pos is None :\n pos=self.tell()\n \n return BufferedWriter.truncate(self,pos)\n \n def read(self,n=None ):\n if n is None :\n n=-1\n self.flush()\n return BufferedReader.read(self,n)\n \n def readinto(self,b):\n self.flush()\n return BufferedReader.readinto(self,b)\n \n def peek(self,n=0):\n self.flush()\n return BufferedReader.peek(self,n)\n \n def read1(self,n):\n self.flush()\n return BufferedReader.read1(self,n)\n \n def write(self,b):\n if self._read_buf:\n \n with self._read_lock:\n self.raw.seek(self._read_pos -len(self._read_buf),1)\n self._reset_read_buf()\n return BufferedWriter.write(self,b)\n \n \nclass TextIOBase(IOBase):\n\n ''\n\n\n\n\n \n \n def read(self,n=-1):\n ''\n\n\n\n\n\n \n self._unsupported(\"read\")\n \n def write(self,s):\n ''\n self._unsupported(\"write\")\n \n def truncate(self,pos=None ):\n ''\n self._unsupported(\"truncate\")\n \n def readline(self):\n ''\n\n\n \n self._unsupported(\"readline\")\n \n def detach(self):\n ''\n\n\n\n\n \n self._unsupported(\"detach\")\n \n @property\n def encoding(self):\n ''\n return None\n \n @property\n def newlines(self):\n ''\n\n\n\n\n \n return None\n \n @property\n def errors(self):\n ''\n\n \n return None\n \n \n \n \n \nclass IncrementalNewlineDecoder(codecs.IncrementalDecoder):\n ''\n\n\n\n\n \n def __init__(self,decoder,translate,errors='strict'):\n codecs.IncrementalDecoder.__init__(self,errors=errors)\n self.translate=translate\n self.decoder=decoder\n self.seennl=0\n self.pendingcr=False\n \n def decode(self,input,final=False ):\n \n if self.decoder is None :\n output=input\n else :\n output=self.decoder.decode(input,final=final)\n if self.pendingcr and (output or final):\n output=\"\\r\"+output\n self.pendingcr=False\n \n \n \n if output.endswith(\"\\r\")and not final:\n output=output[:-1]\n self.pendingcr=True\n \n \n crlf=output.count('\\r\\n')\n cr=output.count('\\r')-crlf\n lf=output.count('\\n')-crlf\n self.seennl |=(lf and self._LF)|(cr and self._CR) |(crlf and self._CRLF)\n \n if self.translate:\n if crlf:\n output=output.replace(\"\\r\\n\",\"\\n\")\n if cr:\n output=output.replace(\"\\r\",\"\\n\")\n \n return output\n \n def getstate(self):\n if self.decoder is None :\n buf=b\"\"\n flag=0\n else :\n buf,flag=self.decoder.getstate()\n flag <<=1\n if self.pendingcr:\n flag |=1\n return buf,flag\n \n def setstate(self,state):\n buf,flag=state\n self.pendingcr=bool(flag&1)\n if self.decoder is not None :\n self.decoder.setstate((buf,flag >>1))\n \n def reset(self):\n self.seennl=0\n self.pendingcr=False\n if self.decoder is not None :\n self.decoder.reset()\n \n _LF=1\n _CR=2\n _CRLF=4\n \n @property\n def newlines(self):\n return (None ,\n \"\\n\",\n \"\\r\",\n (\"\\r\",\"\\n\"),\n \"\\r\\n\",\n (\"\\n\",\"\\r\\n\"),\n (\"\\r\",\"\\r\\n\"),\n (\"\\r\",\"\\n\",\"\\r\\n\")\n )[self.seennl]\n \n \nclass TextIOWrapper(TextIOBase):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n _CHUNK_SIZE=2048\n \n \n \n \n def __init__(self,buffer,encoding=None ,errors=None ,newline=None ,\n line_buffering=False ,write_through=False ):\n if newline is not None and not isinstance(newline,str):\n raise TypeError(\"illegal newline type: %r\"%(type(newline),))\n if newline not in (None ,\"\",\"\\n\",\"\\r\",\"\\r\\n\"):\n raise ValueError(\"illegal newline value: %r\"%(newline,))\n if encoding is None :\n try :\n encoding=os.device_encoding(buffer.fileno())\n except (AttributeError,UnsupportedOperation):\n pass\n if encoding is None :\n try :\n import locale\n except ImportError:\n \n encoding=\"ascii\"\n else :\n encoding=locale.getpreferredencoding(False )\n \n if not isinstance(encoding,str):\n raise ValueError(\"invalid encoding: %r\"%encoding)\n \n if errors is None :\n errors=\"strict\"\n else :\n if not isinstance(errors,str):\n raise ValueError(\"invalid errors: %r\"%errors)\n \n self._buffer=buffer\n self._line_buffering=line_buffering\n self._encoding=encoding\n self._errors=errors\n self._readuniversal=not newline\n self._readtranslate=newline is None\n self._readnl=newline\n self._writetranslate=newline !=''\n self._writenl=newline or os.linesep\n self._encoder=None\n self._decoder=None\n self._decoded_chars=''\n self._decoded_chars_used=0\n self._snapshot=None\n self._seekable=self._telling=self.buffer.seekable()\n self._has_read1=hasattr(self.buffer,'read1')\n self._b2cratio=0.0\n \n if self._seekable and self.writable():\n position=self.buffer.tell()\n if position !=0:\n try :\n self._get_encoder().setstate(0)\n except LookupError:\n \n pass\n \n \n \n \n \n \n \n \n \n \n def __repr__(self):\n result=\"<_io.TextIOWrapper\"\n try :\n name=self.name\n except AttributeError:\n pass\n else :\n result +=\" name={0!r}\".format(name)\n try :\n mode=self.mode\n except AttributeError:\n pass\n else :\n result +=\" mode={0!r}\".format(mode)\n return result+\" encoding={0!r}>\".format(self.encoding)\n \n @property\n def encoding(self):\n return self._encoding\n \n @property\n def errors(self):\n return self._errors\n \n @property\n def line_buffering(self):\n return self._line_buffering\n \n @property\n def buffer(self):\n return self._buffer\n \n def seekable(self):\n if self.closed:\n raise ValueError(\"I/O operation on closed file.\")\n return self._seekable\n \n def readable(self):\n return self.buffer.readable()\n \n def writable(self):\n return self.buffer.writable()\n \n def flush(self):\n self.buffer.flush()\n self._telling=self._seekable\n \n def close(self):\n if self.buffer is not None and not self.closed:\n try :\n self.flush()\n finally :\n self.buffer.close()\n \n @property\n def closed(self):\n return self.buffer.closed\n \n @property\n def name(self):\n return self.buffer.name\n \n def fileno(self):\n return self.buffer.fileno()\n \n def isatty(self):\n return self.buffer.isatty()\n \n def write(self,s):\n ''\n if self.closed:\n raise ValueError(\"write to closed file\")\n if not isinstance(s,str):\n raise TypeError(\"can't write %s to text stream\"%\n s.__class__.__name__)\n length=len(s)\n haslf=(self._writetranslate or self._line_buffering)and\"\\n\"in s\n if haslf and self._writetranslate and self._writenl !=\"\\n\":\n s=s.replace(\"\\n\",self._writenl)\n encoder=self._encoder or self._get_encoder()\n \n b=encoder.encode(s)\n self.buffer.write(b)\n if self._line_buffering and (haslf or\"\\r\"in s):\n self.flush()\n self._snapshot=None\n if self._decoder:\n self._decoder.reset()\n return length\n \n def _get_encoder(self):\n make_encoder=codecs.getincrementalencoder(self._encoding)\n self._encoder=make_encoder(self._errors)\n return self._encoder\n \n def _get_decoder(self):\n make_decoder=codecs.getincrementaldecoder(self._encoding)\n decoder=make_decoder(self._errors)\n if self._readuniversal:\n decoder=IncrementalNewlineDecoder(decoder,self._readtranslate)\n self._decoder=decoder\n return decoder\n \n \n \n \n def _set_decoded_chars(self,chars):\n ''\n self._decoded_chars=chars\n self._decoded_chars_used=0\n \n def _get_decoded_chars(self,n=None ):\n ''\n offset=self._decoded_chars_used\n if n is None :\n chars=self._decoded_chars[offset:]\n else :\n chars=self._decoded_chars[offset:offset+n]\n self._decoded_chars_used +=len(chars)\n return chars\n \n def _rewind_decoded_chars(self,n):\n ''\n if self._decoded_chars_used 0:\n decoder.setstate((b'',dec_flags))\n \n n=len(decoder.decode(next_input[:skip_bytes]))\n if n <=chars_to_skip:\n b,d=decoder.getstate()\n if not b:\n \n dec_flags=d\n chars_to_skip -=n\n break\n \n skip_bytes -=len(b)\n skip_back=1\n else :\n \n skip_bytes -=skip_back\n skip_back=skip_back *2\n else :\n skip_bytes=0\n decoder.setstate((b'',dec_flags))\n \n \n start_pos=position+skip_bytes\n start_flags=dec_flags\n if chars_to_skip ==0:\n \n return self._pack_cookie(start_pos,start_flags)\n \n \n \n \n \n bytes_fed=0\n need_eof=0\n \n chars_decoded=0\n for i in range(skip_bytes,len(next_input)):\n bytes_fed +=1\n chars_decoded +=len(decoder.decode(next_input[i:i+1]))\n dec_buffer,dec_flags=decoder.getstate()\n if not dec_buffer and chars_decoded <=chars_to_skip:\n \n start_pos +=bytes_fed\n chars_to_skip -=chars_decoded\n start_flags,bytes_fed,chars_decoded=dec_flags,0,0\n if chars_decoded >=chars_to_skip:\n break\n else :\n \n chars_decoded +=len(decoder.decode(b'',final=True ))\n need_eof=1\n if chars_decoded =0:\n endpos=pos+1\n break\n else :\n start=len(line)\n \n elif self._readuniversal:\n \n \n \n \n nlpos=line.find(\"\\n\",start)\n crpos=line.find(\"\\r\",start)\n if crpos ==-1:\n if nlpos ==-1:\n \n start=len(line)\n else :\n \n endpos=nlpos+1\n break\n elif nlpos ==-1:\n \n endpos=crpos+1\n break\n elif nlpos =0:\n endpos=pos+len(self._readnl)\n break\n \n if limit >=0 and len(line)>=limit:\n endpos=limit\n break\n \n \n while self._read_chunk():\n if self._decoded_chars:\n break\n if self._decoded_chars:\n line +=self._get_decoded_chars()\n else :\n \n self._set_decoded_chars('')\n self._snapshot=None\n return line\n \n if limit >=0 and endpos >limit:\n endpos=limit\n \n \n self._rewind_decoded_chars(len(line)-endpos)\n return line[:endpos]\n \n @property\n def newlines(self):\n return self._decoder.newlines if self._decoder else None\n \n \nclass StringIO(TextIOWrapper):\n ''\n\n\n\n \n \n def __init__(self,initial_value=\"\",newline=\"\\n\"):\n super(StringIO,self).__init__(BytesIO(),\n encoding=\"utf-8\",\n errors=\"strict\",\n newline=newline)\n \n \n if newline is None :\n self._writetranslate=False\n if initial_value is not None :\n if not isinstance(initial_value,str):\n raise TypeError(\"initial_value must be str or None, not {0}\"\n .format(type(initial_value).__name__))\n initial_value=str(initial_value)\n self.write(initial_value)\n self.seek(0)\n \n def getvalue(self):\n self.flush()\n return self.buffer.getvalue().decode(self._encoding,self._errors)\n \n def __repr__(self):\n \n \n return object.__repr__(self)\n \n @property\n def errors(self):\n return None\n \n @property\n def encoding(self):\n return None\n \n def detach(self):\n \n self._unsupported(\"detach\")\n"], "xml": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"dom\",\"parsers\",\"sax\",\"etree\"]\n", 1], "xml.dom.expatbuilder": [".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\nfrom xml.dom import xmlbuilder,minidom,Node\nfrom xml.dom import EMPTY_NAMESPACE,EMPTY_PREFIX,XMLNS_NAMESPACE\nfrom xml.parsers import expat\nfrom xml.dom.minidom import _append_child,_set_attribute_node\nfrom xml.dom.NodeFilter import NodeFilter\n\nTEXT_NODE=Node.TEXT_NODE\nCDATA_SECTION_NODE=Node.CDATA_SECTION_NODE\nDOCUMENT_NODE=Node.DOCUMENT_NODE\n\nFILTER_ACCEPT=xmlbuilder.DOMBuilderFilter.FILTER_ACCEPT\nFILTER_REJECT=xmlbuilder.DOMBuilderFilter.FILTER_REJECT\nFILTER_SKIP=xmlbuilder.DOMBuilderFilter.FILTER_SKIP\nFILTER_INTERRUPT=xmlbuilder.DOMBuilderFilter.FILTER_INTERRUPT\n\ntheDOMImplementation=minidom.getDOMImplementation()\n\n\n_typeinfo_map={\n\"CDATA\":minidom.TypeInfo(None ,\"cdata\"),\n\"ENUM\":minidom.TypeInfo(None ,\"enumeration\"),\n\"ENTITY\":minidom.TypeInfo(None ,\"entity\"),\n\"ENTITIES\":minidom.TypeInfo(None ,\"entities\"),\n\"ID\":minidom.TypeInfo(None ,\"id\"),\n\"IDREF\":minidom.TypeInfo(None ,\"idref\"),\n\"IDREFS\":minidom.TypeInfo(None ,\"idrefs\"),\n\"NMTOKEN\":minidom.TypeInfo(None ,\"nmtoken\"),\n\"NMTOKENS\":minidom.TypeInfo(None ,\"nmtokens\"),\n}\n\nclass ElementInfo(object):\n __slots__='_attr_info','_model','tagName'\n \n def __init__(self,tagName,model=None ):\n self.tagName=tagName\n self._attr_info=[]\n self._model=model\n \n def __getstate__(self):\n return self._attr_info,self._model,self.tagName\n \n def __setstate__(self,state):\n self._attr_info,self._model,self.tagName=state\n \n def getAttributeType(self,aname):\n for info in self._attr_info:\n if info[1]==aname:\n t=info[-2]\n if t[0]==\"(\":\n return _typeinfo_map[\"ENUM\"]\n else :\n return _typeinfo_map[info[-2]]\n return minidom._no_type\n \n def getAttributeTypeNS(self,namespaceURI,localName):\n return minidom._no_type\n \n def isElementContent(self):\n if self._model:\n type=self._model[0]\n return type not in (expat.model.XML_CTYPE_ANY,\n expat.model.XML_CTYPE_MIXED)\n else :\n return False\n \n def isEmpty(self):\n if self._model:\n return self._model[0]==expat.model.XML_CTYPE_EMPTY\n else :\n return False\n \n def isId(self,aname):\n for info in self._attr_info:\n if info[1]==aname:\n return info[-2]==\"ID\"\n return False\n \n def isIdNS(self,euri,ename,auri,aname):\n \n return self.isId((auri,aname))\n \ndef _intern(builder,s):\n return builder._intern_setdefault(s,s)\n \ndef _parse_ns_name(builder,name):\n assert' 'in name\n parts=name.split(' ')\n intern=builder._intern_setdefault\n if len(parts)==3:\n uri,localname,prefix=parts\n prefix=intern(prefix,prefix)\n qname=\"%s:%s\"%(prefix,localname)\n qname=intern(qname,qname)\n localname=intern(localname,localname)\n else :\n uri,localname=parts\n prefix=EMPTY_PREFIX\n qname=localname=intern(localname,localname)\n return intern(uri,uri),localname,prefix,qname\n \n \nclass ExpatBuilder:\n ''\n \n \n def __init__(self,options=None ):\n if options is None :\n options=xmlbuilder.Options()\n self._options=options\n if self._options.filter is not None :\n self._filter=FilterVisibilityController(self._options.filter)\n else :\n self._filter=None\n \n \n self._finish_start_element=id\n self._parser=None\n self.reset()\n \n def createParser(self):\n ''\n return expat.ParserCreate()\n \n def getParser(self):\n ''\n if not self._parser:\n self._parser=self.createParser()\n self._intern_setdefault=self._parser.intern.setdefault\n self._parser.buffer_text=True\n self._parser.ordered_attributes=True\n self._parser.specified_attributes=True\n self.install(self._parser)\n return self._parser\n \n def reset(self):\n ''\n self.document=theDOMImplementation.createDocument(\n EMPTY_NAMESPACE,None ,None )\n self.curNode=self.document\n self._elem_info=self.document._elem_info\n self._cdata=False\n \n def install(self,parser):\n ''\n \n parser.StartDoctypeDeclHandler=self.start_doctype_decl_handler\n parser.StartElementHandler=self.first_element_handler\n parser.EndElementHandler=self.end_element_handler\n parser.ProcessingInstructionHandler=self.pi_handler\n if self._options.entities:\n parser.EntityDeclHandler=self.entity_decl_handler\n parser.NotationDeclHandler=self.notation_decl_handler\n if self._options.comments:\n parser.CommentHandler=self.comment_handler\n if self._options.cdata_sections:\n parser.StartCdataSectionHandler=self.start_cdata_section_handler\n parser.EndCdataSectionHandler=self.end_cdata_section_handler\n parser.CharacterDataHandler=self.character_data_handler_cdata\n else :\n parser.CharacterDataHandler=self.character_data_handler\n parser.ExternalEntityRefHandler=self.external_entity_ref_handler\n parser.XmlDeclHandler=self.xml_decl_handler\n parser.ElementDeclHandler=self.element_decl_handler\n parser.AttlistDeclHandler=self.attlist_decl_handler\n \n def parseFile(self,file):\n ''\n \n parser=self.getParser()\n first_buffer=True\n try :\n while 1:\n buffer=file.read(16 *1024)\n if not buffer:\n break\n parser.Parse(buffer,0)\n if first_buffer and self.document.documentElement:\n self._setup_subset(buffer)\n first_buffer=False\n parser.Parse(\"\",True )\n except ParseEscape:\n pass\n doc=self.document\n self.reset()\n self._parser=None\n return doc\n \n def parseString(self,string):\n ''\n parser=self.getParser()\n try :\n parser.Parse(string,True )\n self._setup_subset(string)\n except ParseEscape:\n pass\n doc=self.document\n self.reset()\n self._parser=None\n return doc\n \n def _setup_subset(self,buffer):\n ''\n if self.document.doctype:\n extractor=InternalSubsetExtractor()\n extractor.parseString(buffer)\n subset=extractor.getSubset()\n self.document.doctype.internalSubset=subset\n \n def start_doctype_decl_handler(self,doctypeName,systemId,publicId,\n has_internal_subset):\n doctype=self.document.implementation.createDocumentType(\n doctypeName,publicId,systemId)\n doctype.ownerDocument=self.document\n _append_child(self.document,doctype)\n self.document.doctype=doctype\n if self._filter and self._filter.acceptNode(doctype)==FILTER_REJECT:\n self.document.doctype=None\n del self.document.childNodes[-1]\n doctype=None\n self._parser.EntityDeclHandler=None\n self._parser.NotationDeclHandler=None\n if has_internal_subset:\n if doctype is not None :\n doctype.entities._seq=[]\n doctype.notations._seq=[]\n self._parser.CommentHandler=None\n self._parser.ProcessingInstructionHandler=None\n self._parser.EndDoctypeDeclHandler=self.end_doctype_decl_handler\n \n def end_doctype_decl_handler(self):\n if self._options.comments:\n self._parser.CommentHandler=self.comment_handler\n self._parser.ProcessingInstructionHandler=self.pi_handler\n if not (self._elem_info or self._filter):\n self._finish_end_element=id\n \n def pi_handler(self,target,data):\n node=self.document.createProcessingInstruction(target,data)\n _append_child(self.curNode,node)\n if self._filter and self._filter.acceptNode(node)==FILTER_REJECT:\n self.curNode.removeChild(node)\n \n def character_data_handler_cdata(self,data):\n childNodes=self.curNode.childNodes\n if self._cdata:\n if (self._cdata_continue\n and childNodes[-1].nodeType ==CDATA_SECTION_NODE):\n childNodes[-1].appendData(data)\n return\n node=self.document.createCDATASection(data)\n self._cdata_continue=True\n elif childNodes and childNodes[-1].nodeType ==TEXT_NODE:\n node=childNodes[-1]\n value=node.data+data\n node.data=value\n return\n else :\n node=minidom.Text()\n node.data=data\n node.ownerDocument=self.document\n _append_child(self.curNode,node)\n \n def character_data_handler(self,data):\n childNodes=self.curNode.childNodes\n if childNodes and childNodes[-1].nodeType ==TEXT_NODE:\n node=childNodes[-1]\n node.data=node.data+data\n return\n node=minidom.Text()\n node.data=node.data+data\n node.ownerDocument=self.document\n _append_child(self.curNode,node)\n \n def entity_decl_handler(self,entityName,is_parameter_entity,value,\n base,systemId,publicId,notationName):\n if is_parameter_entity:\n \n return\n if not self._options.entities:\n return\n node=self.document._create_entity(entityName,publicId,\n systemId,notationName)\n if value is not None :\n \n \n child=self.document.createTextNode(value)\n node.childNodes.append(child)\n self.document.doctype.entities._seq.append(node)\n if self._filter and self._filter.acceptNode(node)==FILTER_REJECT:\n del self.document.doctype.entities._seq[-1]\n \n def notation_decl_handler(self,notationName,base,systemId,publicId):\n node=self.document._create_notation(notationName,publicId,systemId)\n self.document.doctype.notations._seq.append(node)\n if self._filter and self._filter.acceptNode(node)==FILTER_ACCEPT:\n del self.document.doctype.notations._seq[-1]\n \n def comment_handler(self,data):\n node=self.document.createComment(data)\n _append_child(self.curNode,node)\n if self._filter and self._filter.acceptNode(node)==FILTER_REJECT:\n self.curNode.removeChild(node)\n \n def start_cdata_section_handler(self):\n self._cdata=True\n self._cdata_continue=False\n \n def end_cdata_section_handler(self):\n self._cdata=False\n self._cdata_continue=False\n \n def external_entity_ref_handler(self,context,base,systemId,publicId):\n return 1\n \n def first_element_handler(self,name,attributes):\n if self._filter is None and not self._elem_info:\n self._finish_end_element=id\n self.getParser().StartElementHandler=self.start_element_handler\n self.start_element_handler(name,attributes)\n \n def start_element_handler(self,name,attributes):\n node=self.document.createElement(name)\n _append_child(self.curNode,node)\n self.curNode=node\n \n if attributes:\n for i in range(0,len(attributes),2):\n a=minidom.Attr(attributes[i],EMPTY_NAMESPACE,\n None ,EMPTY_PREFIX)\n value=attributes[i+1]\n a.value=value\n a.ownerDocument=self.document\n _set_attribute_node(node,a)\n \n if node is not self.document.documentElement:\n self._finish_start_element(node)\n \n def _finish_start_element(self,node):\n if self._filter:\n \n \n if node is self.document.documentElement:\n return\n filt=self._filter.startContainer(node)\n if filt ==FILTER_REJECT:\n \n Rejecter(self)\n elif filt ==FILTER_SKIP:\n \n \n Skipper(self)\n else :\n return\n self.curNode=node.parentNode\n node.parentNode.removeChild(node)\n node.unlink()\n \n \n \n \n def end_element_handler(self,name):\n curNode=self.curNode\n self.curNode=curNode.parentNode\n self._finish_end_element(curNode)\n \n def _finish_end_element(self,curNode):\n info=self._elem_info.get(curNode.tagName)\n if info:\n self._handle_white_text_nodes(curNode,info)\n if self._filter:\n if curNode is self.document.documentElement:\n return\n if self._filter.acceptNode(curNode)==FILTER_REJECT:\n self.curNode.removeChild(curNode)\n curNode.unlink()\n \n def _handle_white_text_nodes(self,node,info):\n if (self._options.whitespace_in_element_content\n or not info.isElementContent()):\n return\n \n \n \n \n L=[]\n for child in node.childNodes:\n if child.nodeType ==TEXT_NODE and not child.data.strip():\n L.append(child)\n \n \n for child in L:\n node.removeChild(child)\n \n def element_decl_handler(self,name,model):\n info=self._elem_info.get(name)\n if info is None :\n self._elem_info[name]=ElementInfo(name,model)\n else :\n assert info._model is None\n info._model=model\n \n def attlist_decl_handler(self,elem,name,type,default,required):\n info=self._elem_info.get(elem)\n if info is None :\n info=ElementInfo(elem)\n self._elem_info[elem]=info\n info._attr_info.append(\n [None ,name,None ,None ,default,0,type,required])\n \n def xml_decl_handler(self,version,encoding,standalone):\n self.document.version=version\n self.document.encoding=encoding\n \n if standalone >=0:\n if standalone:\n self.document.standalone=True\n else :\n self.document.standalone=False\n \n \n \n \n_ALLOWED_FILTER_RETURNS=(FILTER_ACCEPT,FILTER_REJECT,FILTER_SKIP)\n\nclass FilterVisibilityController(object):\n ''\n \n \n __slots__='filter',\n \n def __init__(self,filter):\n self.filter=filter\n \n def startContainer(self,node):\n mask=self._nodetype_mask[node.nodeType]\n if self.filter.whatToShow&mask:\n val=self.filter.startContainer(node)\n if val ==FILTER_INTERRUPT:\n raise ParseEscape\n if val not in _ALLOWED_FILTER_RETURNS:\n raise ValueError(\n \"startContainer() returned illegal value: \"+repr(val))\n return val\n else :\n return FILTER_ACCEPT\n \n def acceptNode(self,node):\n mask=self._nodetype_mask[node.nodeType]\n if self.filter.whatToShow&mask:\n val=self.filter.acceptNode(node)\n if val ==FILTER_INTERRUPT:\n raise ParseEscape\n if val ==FILTER_SKIP:\n \n parent=node.parentNode\n for child in node.childNodes[:]:\n parent.appendChild(child)\n \n return FILTER_REJECT\n if val not in _ALLOWED_FILTER_RETURNS:\n raise ValueError(\n \"acceptNode() returned illegal value: \"+repr(val))\n return val\n else :\n return FILTER_ACCEPT\n \n _nodetype_mask={\n Node.ELEMENT_NODE:NodeFilter.SHOW_ELEMENT,\n Node.ATTRIBUTE_NODE:NodeFilter.SHOW_ATTRIBUTE,\n Node.TEXT_NODE:NodeFilter.SHOW_TEXT,\n Node.CDATA_SECTION_NODE:NodeFilter.SHOW_CDATA_SECTION,\n Node.ENTITY_REFERENCE_NODE:NodeFilter.SHOW_ENTITY_REFERENCE,\n Node.ENTITY_NODE:NodeFilter.SHOW_ENTITY,\n Node.PROCESSING_INSTRUCTION_NODE:NodeFilter.SHOW_PROCESSING_INSTRUCTION,\n Node.COMMENT_NODE:NodeFilter.SHOW_COMMENT,\n Node.DOCUMENT_NODE:NodeFilter.SHOW_DOCUMENT,\n Node.DOCUMENT_TYPE_NODE:NodeFilter.SHOW_DOCUMENT_TYPE,\n Node.DOCUMENT_FRAGMENT_NODE:NodeFilter.SHOW_DOCUMENT_FRAGMENT,\n Node.NOTATION_NODE:NodeFilter.SHOW_NOTATION,\n }\n \n \nclass FilterCrutch(object):\n __slots__='_builder','_level','_old_start','_old_end'\n \n def __init__(self,builder):\n self._level=0\n self._builder=builder\n parser=builder._parser\n self._old_start=parser.StartElementHandler\n self._old_end=parser.EndElementHandler\n parser.StartElementHandler=self.start_element_handler\n parser.EndElementHandler=self.end_element_handler\n \nclass Rejecter(FilterCrutch):\n __slots__=()\n \n def __init__(self,builder):\n FilterCrutch.__init__(self,builder)\n parser=builder._parser\n for name in (\"ProcessingInstructionHandler\",\n \"CommentHandler\",\n \"CharacterDataHandler\",\n \"StartCdataSectionHandler\",\n \"EndCdataSectionHandler\",\n \"ExternalEntityRefHandler\",\n ):\n setattr(parser,name,None )\n \n def start_element_handler(self,*args):\n self._level=self._level+1\n \n def end_element_handler(self,*args):\n if self._level ==0:\n \n parser=self._builder._parser\n self._builder.install(parser)\n parser.StartElementHandler=self._old_start\n parser.EndElementHandler=self._old_end\n else :\n self._level=self._level -1\n \nclass Skipper(FilterCrutch):\n __slots__=()\n \n def start_element_handler(self,*args):\n node=self._builder.curNode\n self._old_start(*args)\n if self._builder.curNode is not node:\n self._level=self._level+1\n \n def end_element_handler(self,*args):\n if self._level ==0:\n \n \n self._builder._parser.StartElementHandler=self._old_start\n self._builder._parser.EndElementHandler=self._old_end\n self._builder=None\n else :\n self._level=self._level -1\n self._old_end(*args)\n \n \n \n \n \n_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID=\"http://xml.python.org/entities/fragment-builder/internal\"\n\n_FRAGMENT_BUILDER_TEMPLATE=(\n'''\\\n\n%%s\n]>\n&fragment-builder-internal;'''\n%_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID)\n\n\nclass FragmentBuilder(ExpatBuilder):\n ''\n\n\n\n\n\n \n \n def __init__(self,context,options=None ):\n if context.nodeType ==DOCUMENT_NODE:\n self.originalDocument=context\n self.context=context\n else :\n self.originalDocument=context.ownerDocument\n self.context=context\n ExpatBuilder.__init__(self,options)\n \n def reset(self):\n ExpatBuilder.reset(self)\n self.fragment=None\n \n def parseFile(self,file):\n ''\n \n return self.parseString(file.read())\n \n def parseString(self,string):\n ''\n \n self._source=string\n parser=self.getParser()\n doctype=self.originalDocument.doctype\n ident=\"\"\n if doctype:\n subset=doctype.internalSubset or self._getDeclarations()\n if doctype.publicId:\n ident=('PUBLIC \"%s\" \"%s\"'\n %(doctype.publicId,doctype.systemId))\n elif doctype.systemId:\n ident='SYSTEM \"%s\"'%doctype.systemId\n else :\n subset=\"\"\n nsattrs=self._getNSattrs()\n document=_FRAGMENT_BUILDER_TEMPLATE %(ident,subset,nsattrs)\n try :\n parser.Parse(document,1)\n except :\n self.reset()\n raise\n fragment=self.fragment\n self.reset()\n \n return fragment\n \n def _getDeclarations(self):\n ''\n\n\n\n \n doctype=self.context.ownerDocument.doctype\n s=\"\"\n if doctype:\n for i in range(doctype.notations.length):\n notation=doctype.notations.item(i)\n if s:\n s=s+\"\\n \"\n s=\"%s' %(s,notation.publicId,notation.systemId)\n else :\n s='%s SYSTEM \"%s\">'%(s,notation.systemId)\n for i in range(doctype.entities.length):\n entity=doctype.entities.item(i)\n if s:\n s=s+\"\\n \"\n s=\"%s\"\n return s\n \n def _getNSattrs(self):\n return\"\"\n \n def external_entity_ref_handler(self,context,base,systemId,publicId):\n if systemId ==_FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID:\n \n \n old_document=self.document\n old_cur_node=self.curNode\n parser=self._parser.ExternalEntityParserCreate(context)\n \n self.document=self.originalDocument\n self.fragment=self.document.createDocumentFragment()\n self.curNode=self.fragment\n try :\n parser.Parse(self._source,1)\n finally :\n self.curNode=old_cur_node\n self.document=old_document\n self._source=None\n return -1\n else :\n return ExpatBuilder.external_entity_ref_handler(\n self,context,base,systemId,publicId)\n \n \nclass Namespaces:\n ''\n \n def _initNamespaces(self):\n \n \n self._ns_ordered_prefixes=[]\n \n def createParser(self):\n ''\n parser=expat.ParserCreate(namespace_separator=\" \")\n parser.namespace_prefixes=True\n return parser\n \n def install(self,parser):\n ''\n ExpatBuilder.install(self,parser)\n if self._options.namespace_declarations:\n parser.StartNamespaceDeclHandler=(\n self.start_namespace_decl_handler)\n \n def start_namespace_decl_handler(self,prefix,uri):\n ''\n self._ns_ordered_prefixes.append((prefix,uri))\n \n def start_element_handler(self,name,attributes):\n if' 'in name:\n uri,localname,prefix,qname=_parse_ns_name(self,name)\n else :\n uri=EMPTY_NAMESPACE\n qname=name\n localname=None\n prefix=EMPTY_PREFIX\n node=minidom.Element(qname,uri,prefix,localname)\n node.ownerDocument=self.document\n _append_child(self.curNode,node)\n self.curNode=node\n \n if self._ns_ordered_prefixes:\n for prefix,uri in self._ns_ordered_prefixes:\n if prefix:\n a=minidom.Attr(_intern(self,'xmlns:'+prefix),\n XMLNS_NAMESPACE,prefix,\"xmlns\")\n else :\n a=minidom.Attr(\"xmlns\",XMLNS_NAMESPACE,\n \"xmlns\",EMPTY_PREFIX)\n a.value=uri\n a.ownerDocument=self.document\n _set_attribute_node(node,a)\n del self._ns_ordered_prefixes[:]\n \n if attributes:\n node._ensure_attributes()\n _attrs=node._attrs\n _attrsNS=node._attrsNS\n for i in range(0,len(attributes),2):\n aname=attributes[i]\n value=attributes[i+1]\n if' 'in aname:\n uri,localname,prefix,qname=_parse_ns_name(self,aname)\n a=minidom.Attr(qname,uri,localname,prefix)\n _attrs[qname]=a\n _attrsNS[(uri,localname)]=a\n else :\n a=minidom.Attr(aname,EMPTY_NAMESPACE,\n aname,EMPTY_PREFIX)\n _attrs[aname]=a\n _attrsNS[(EMPTY_NAMESPACE,aname)]=a\n a.ownerDocument=self.document\n a.value=value\n a.ownerElement=node\n \n if __debug__:\n \n \n \n \n \n def end_element_handler(self,name):\n curNode=self.curNode\n if' 'in name:\n uri,localname,prefix,qname=_parse_ns_name(self,name)\n assert (curNode.namespaceURI ==uri\n and curNode.localName ==localname\n and curNode.prefix ==prefix), \"element stack messed up! (namespace)\"\n else :\n assert curNode.nodeName ==name, \"element stack messed up - bad nodeName\"\n assert curNode.namespaceURI ==EMPTY_NAMESPACE, \"element stack messed up - bad namespaceURI\"\n self.curNode=curNode.parentNode\n self._finish_end_element(curNode)\n \n \nclass ExpatBuilderNS(Namespaces,ExpatBuilder):\n ''\n \n def reset(self):\n ExpatBuilder.reset(self)\n self._initNamespaces()\n \n \nclass FragmentBuilderNS(Namespaces,FragmentBuilder):\n ''\n \n def reset(self):\n FragmentBuilder.reset(self)\n self._initNamespaces()\n \n def _getNSattrs(self):\n ''\n \n \n \n \n \n \n attrs=\"\"\n context=self.context\n L=[]\n while context:\n if hasattr(context,'_ns_prefix_uri'):\n for prefix,uri in context._ns_prefix_uri.items():\n \n if prefix in L:\n continue\n L.append(prefix)\n if prefix:\n declname=\"xmlns:\"+prefix\n else :\n declname=\"xmlns\"\n if attrs:\n attrs=\"%s\\n %s='%s'\"%(attrs,declname,uri)\n else :\n attrs=\" %s='%s'\"%(declname,uri)\n context=context.parentNode\n return attrs\n \n \nclass ParseEscape(Exception):\n ''\n pass\n \nclass InternalSubsetExtractor(ExpatBuilder):\n ''\n \n subset=None\n \n def getSubset(self):\n ''\n return self.subset\n \n def parseFile(self,file):\n try :\n ExpatBuilder.parseFile(self,file)\n except ParseEscape:\n pass\n \n def parseString(self,string):\n try :\n ExpatBuilder.parseString(self,string)\n except ParseEscape:\n pass\n \n def install(self,parser):\n parser.StartDoctypeDeclHandler=self.start_doctype_decl_handler\n parser.StartElementHandler=self.start_element_handler\n \n def start_doctype_decl_handler(self,name,publicId,systemId,\n has_internal_subset):\n if has_internal_subset:\n parser=self.getParser()\n self.subset=[]\n parser.DefaultHandler=self.subset.append\n parser.EndDoctypeDeclHandler=self.end_doctype_decl_handler\n else :\n raise ParseEscape()\n \n def end_doctype_decl_handler(self):\n s=''.join(self.subset).replace('\\r\\n','\\n').replace('\\r','\\n')\n self.subset=s\n raise ParseEscape()\n \n def start_element_handler(self,name,attrs):\n raise ParseEscape()\n \n \ndef parse(file,namespaces=True ):\n ''\n\n\n \n if namespaces:\n builder=ExpatBuilderNS()\n else :\n builder=ExpatBuilder()\n \n if isinstance(file,str):\n fp=open(file,'rb')\n try :\n result=builder.parseFile(fp)\n finally :\n fp.close()\n else :\n result=builder.parseFile(file)\n return result\n \n \ndef parseString(string,namespaces=True ):\n ''\n\n \n if namespaces:\n builder=ExpatBuilderNS()\n else :\n builder=ExpatBuilder()\n return builder.parseString(string)\n \n \ndef parseFragment(file,context,namespaces=True ):\n ''\n\n\n\n\n \n if namespaces:\n builder=FragmentBuilderNS(context)\n else :\n builder=FragmentBuilder(context)\n \n if isinstance(file,str):\n fp=open(file,'rb')\n try :\n result=builder.parseFile(fp)\n finally :\n fp.close()\n else :\n result=builder.parseFile(file)\n return result\n \n \ndef parseFragmentString(string,context,namespaces=True ):\n ''\n\n\n \n if namespaces:\n builder=FragmentBuilderNS(context)\n else :\n builder=FragmentBuilder(context)\n return builder.parseString(string)\n \n \ndef makeBuilder(options):\n ''\n if options.namespaces:\n return ExpatBuilderNS(options)\n else :\n return ExpatBuilder(options)\n"], "encodings.tis_620": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='tis-620',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\ufffe'\n'\\u0e01'\n'\\u0e02'\n'\\u0e03'\n'\\u0e04'\n'\\u0e05'\n'\\u0e06'\n'\\u0e07'\n'\\u0e08'\n'\\u0e09'\n'\\u0e0a'\n'\\u0e0b'\n'\\u0e0c'\n'\\u0e0d'\n'\\u0e0e'\n'\\u0e0f'\n'\\u0e10'\n'\\u0e11'\n'\\u0e12'\n'\\u0e13'\n'\\u0e14'\n'\\u0e15'\n'\\u0e16'\n'\\u0e17'\n'\\u0e18'\n'\\u0e19'\n'\\u0e1a'\n'\\u0e1b'\n'\\u0e1c'\n'\\u0e1d'\n'\\u0e1e'\n'\\u0e1f'\n'\\u0e20'\n'\\u0e21'\n'\\u0e22'\n'\\u0e23'\n'\\u0e24'\n'\\u0e25'\n'\\u0e26'\n'\\u0e27'\n'\\u0e28'\n'\\u0e29'\n'\\u0e2a'\n'\\u0e2b'\n'\\u0e2c'\n'\\u0e2d'\n'\\u0e2e'\n'\\u0e2f'\n'\\u0e30'\n'\\u0e31'\n'\\u0e32'\n'\\u0e33'\n'\\u0e34'\n'\\u0e35'\n'\\u0e36'\n'\\u0e37'\n'\\u0e38'\n'\\u0e39'\n'\\u0e3a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u0e3f'\n'\\u0e40'\n'\\u0e41'\n'\\u0e42'\n'\\u0e43'\n'\\u0e44'\n'\\u0e45'\n'\\u0e46'\n'\\u0e47'\n'\\u0e48'\n'\\u0e49'\n'\\u0e4a'\n'\\u0e4b'\n'\\u0e4c'\n'\\u0e4d'\n'\\u0e4e'\n'\\u0e4f'\n'\\u0e50'\n'\\u0e51'\n'\\u0e52'\n'\\u0e53'\n'\\u0e54'\n'\\u0e55'\n'\\u0e56'\n'\\u0e57'\n'\\u0e58'\n'\\u0e59'\n'\\u0e5a'\n'\\u0e5b'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "difflib": [".py", "#! /usr/bin/env python3\n\n\"\"\"\nModule difflib -- helpers for computing deltas between objects.\n\nFunction get_close_matches(word, possibilities, n=3, cutoff=0.6):\n Use SequenceMatcher to return list of the best \"good enough\" matches.\n\nFunction context_diff(a, b):\n For two lists of strings, return a delta in context diff format.\n\nFunction ndiff(a, b):\n Return a delta: the difference between `a` and `b` (lists of strings).\n\nFunction restore(delta, which):\n Return one of the two sequences that generated an ndiff delta.\n\nFunction unified_diff(a, b):\n For two lists of strings, return a delta in unified diff format.\n\nClass SequenceMatcher:\n A flexible class for comparing pairs of sequences of any type.\n\nClass Differ:\n For producing human-readable deltas from sequences of lines of text.\n\nClass HtmlDiff:\n For producing HTML side by side comparison with change highlights.\n\"\"\"\n\n__all__=['get_close_matches','ndiff','restore','SequenceMatcher',\n'Differ','IS_CHARACTER_JUNK','IS_LINE_JUNK','context_diff',\n'unified_diff','HtmlDiff','Match']\n\nimport warnings\nimport heapq\nfrom collections import namedtuple as _namedtuple\n\nMatch=_namedtuple('Match','a b size')\n\ndef _calculate_ratio(matches,length):\n if length:\n return 2.0 *matches /length\n return 1.0\n \nclass SequenceMatcher:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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,isjunk=None ,a='',b='',autojunk=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n self.isjunk=isjunk\n self.a=self.b=None\n self.autojunk=autojunk\n self.set_seqs(a,b)\n \n def set_seqs(self,a,b):\n ''\n\n\n\n\n\n \n \n self.set_seq1(a)\n self.set_seq2(b)\n \n def set_seq1(self,a):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if a is self.a:\n return\n self.a=a\n self.matching_blocks=self.opcodes=None\n \n def set_seq2(self,b):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if b is self.b:\n return\n self.b=b\n self.matching_blocks=self.opcodes=None\n self.fullbcount=None\n self.__chain_b()\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n def __chain_b(self):\n \n \n \n \n \n \n \n \n \n \n b=self.b\n self.b2j=b2j={}\n \n for i,elt in enumerate(b):\n indices=b2j.setdefault(elt,[])\n indices.append(i)\n \n \n self.bjunk=junk=set()\n isjunk=self.isjunk\n if isjunk:\n for elt in b2j.keys():\n if isjunk(elt):\n junk.add(elt)\n for elt in junk:\n del b2j[elt]\n \n \n self.bpopular=popular=set()\n n=len(b)\n if self.autojunk and n >=200:\n ntest=n //100+1\n for elt,idxs in b2j.items():\n if len(idxs)>ntest:\n popular.add(elt)\n for elt in popular:\n del b2j[elt]\n \n def isbjunk(self,item):\n ''\n warnings.warn(\"'SequenceMatcher().isbjunk(item)' is deprecated;\\n\"\n \"use 'item in SMinstance.bjunk' instead.\",\n DeprecationWarning,2)\n return item in self.bjunk\n \n def isbpopular(self,item):\n ''\n warnings.warn(\"'SequenceMatcher().isbpopular(item)' is deprecated;\\n\"\n \"use 'item in SMinstance.bpopular' instead.\",\n DeprecationWarning,2)\n return item in self.bpopular\n \n def find_longest_match(self,alo,ahi,blo,bhi):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n a,b,b2j,isbjunk=self.a,self.b,self.b2j,self.bjunk.__contains__\n besti,bestj,bestsize=alo,blo,0\n \n \n \n j2len={}\n nothing=[]\n for i in range(alo,ahi):\n \n \n j2lenget=j2len.get\n newj2len={}\n for j in b2j.get(a[i],nothing):\n \n if j =bhi:\n break\n k=newj2len[j]=j2lenget(j -1,0)+1\n if k >bestsize:\n besti,bestj,bestsize=i -k+1,j -k+1,k\n j2len=newj2len\n \n \n \n \n \n while besti >alo and bestj >blo and not isbjunk(b[bestj -1])and a[besti -1]==b[bestj -1]:\n besti,bestj,bestsize=besti -1,bestj -1,bestsize+1\n while besti+bestsize alo and bestj >blo and isbjunk(b[bestj -1])and a[besti -1]==b[bestj -1]:\n besti,bestj,bestsize=besti -1,bestj -1,bestsize+1\n while besti+bestsize nn:\n group.append((tag,i1,min(i2,i1+n),j1,min(j2,j1+n)))\n yield group\n group=[]\n i1,j1=max(i1,i2 -n),max(j1,j2 -n)\n group.append((tag,i1,i2,j1,j2))\n if group and not (len(group)==1 and group[0][0]=='equal'):\n yield group\n \n def ratio(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n matches=sum(triple[-1]for triple in self.get_matching_blocks())\n return _calculate_ratio(matches,len(self.a)+len(self.b))\n \n def quick_ratio(self):\n ''\n\n\n\n \n \n \n \n \n if self.fullbcount is None :\n self.fullbcount=fullbcount={}\n for elt in self.b:\n fullbcount[elt]=fullbcount.get(elt,0)+1\n fullbcount=self.fullbcount\n \n \n avail={}\n availhas,matches=avail.__contains__,0\n for elt in self.a:\n if availhas(elt):\n numb=avail[elt]\n else :\n numb=fullbcount.get(elt,0)\n avail[elt]=numb -1\n if numb >0:\n matches=matches+1\n return _calculate_ratio(matches,len(self.a)+len(self.b))\n \n def real_quick_ratio(self):\n ''\n\n\n\n \n \n la,lb=len(self.a),len(self.b)\n \n \n return _calculate_ratio(min(la,lb),la+lb)\n \ndef get_close_matches(word,possibilities,n=3,cutoff=0.6):\n ''\n\n\n\n\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 not n >0:\n raise ValueError(\"n must be > 0: %r\"%(n,))\n if not 0.0 <=cutoff <=1.0:\n raise ValueError(\"cutoff must be in [0.0, 1.0]: %r\"%(cutoff,))\n result=[]\n s=SequenceMatcher()\n s.set_seq2(word)\n for x in possibilities:\n s.set_seq1(x)\n if s.real_quick_ratio()>=cutoff and s.quick_ratio()>=cutoff and s.ratio()>=cutoff:\n result.append((s.ratio(),x))\n \n \n result=heapq.nlargest(n,result)\n \n return [x for score,x in result]\n \ndef _count_leading(line,ch):\n ''\n\n\n\n\n\n\n \n \n i,n=0,len(line)\n while i best_ratio and cruncher.quick_ratio()>best_ratio and cruncher.ratio()>best_ratio:\n best_ratio,best_i,best_j=cruncher.ratio(),i,j\n if best_ratio 0):\n num_blanks_to_yield -=1\n yield ('','\\n'),None ,True\n if s.startswith('X'):\n raise StopIteration\n else :\n yield from_line,to_line,True\n \n def _line_pair_iterator():\n ''\n\n\n\n\n\n\n\n\n\n\n \n line_iterator=_line_iterator()\n fromlines,tolines=[],[]\n while True :\n \n while (len(fromlines)==0 or len(tolines)==0):\n from_line,to_line,found_diff=next(line_iterator)\n if from_line is not None :\n fromlines.append((from_line,found_diff))\n if to_line is not None :\n tolines.append((to_line,found_diff))\n \n from_line,fromDiff=fromlines.pop(0)\n to_line,to_diff=tolines.pop(0)\n yield (from_line,to_line,fromDiff or to_diff)\n \n \n \n line_pair_iterator=_line_pair_iterator()\n if context is None :\n while True :\n yield next(line_pair_iterator)\n \n \n else :\n context +=1\n lines_to_write=0\n while True :\n \n \n \n index,contextLines=0,[None ]*(context)\n found_diff=False\n while (found_diff is False ):\n from_line,to_line,found_diff=next(line_pair_iterator)\n i=index %context\n contextLines[i]=(from_line,to_line,found_diff)\n index +=1\n \n \n if index >context:\n yield None ,None ,None\n lines_to_write=context\n else :\n lines_to_write=index\n index=0\n while (lines_to_write):\n i=index %context\n index +=1\n yield contextLines[i]\n lines_to_write -=1\n \n lines_to_write=context -1\n while (lines_to_write):\n from_line,to_line,found_diff=next(line_pair_iterator)\n \n if found_diff:\n lines_to_write=context -1\n else :\n lines_to_write -=1\n yield from_line,to_line,found_diff\n \n \n_file_template=\"\"\"\n\n\n\n\n\n \n \n \n\n\n\n %(table)s%(legend)s\n\n\n\"\"\"\n\n_styles=\"\"\"\n table.diff {font-family:Courier; border:medium;}\n .diff_header {background-color:#e0e0e0}\n td.diff_header {text-align:right}\n .diff_next {background-color:#c0c0c0}\n .diff_add {background-color:#aaffaa}\n .diff_chg {background-color:#ffff77}\n .diff_sub {background-color:#ffaaaa}\"\"\"\n\n_table_template=\"\"\"\n \n \n \n %(header_row)s\n \n%(data_rows)s \n
\"\"\"\n\n_legend=\"\"\"\n \n \n \n \n
Legends
\n \n \n \n \n
Colors
 Added 
Changed
Deleted
\n \n \n \n \n
Links
(f)irst change
(n)ext change
(t)op
\"\"\"\n\nclass HtmlDiff(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n _file_template=_file_template\n _styles=_styles\n _table_template=_table_template\n _legend=_legend\n _default_prefix=0\n \n def __init__(self,tabsize=8,wrapcolumn=None ,linejunk=None ,\n charjunk=IS_CHARACTER_JUNK):\n ''\n\n\n\n\n\n\n\n\n \n self._tabsize=tabsize\n self._wrapcolumn=wrapcolumn\n self._linejunk=linejunk\n self._charjunk=charjunk\n \n def make_file(self,fromlines,tolines,fromdesc='',todesc='',context=False ,\n numlines=5):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n return self._file_template %dict(\n styles=self._styles,\n legend=self._legend,\n table=self.make_table(fromlines,tolines,fromdesc,todesc,\n context=context,numlines=numlines))\n \n def _tab_newline_replace(self,fromlines,tolines):\n ''\n\n\n\n\n\n\n\n \n def expand_tabs(line):\n \n line=line.replace(' ','\\0')\n \n line=line.expandtabs(self._tabsize)\n \n \n line=line.replace(' ','\\t')\n return line.replace('\\0',' ').rstrip('\\n')\n fromlines=[expand_tabs(line)for line in fromlines]\n tolines=[expand_tabs(line)for line in tolines]\n return fromlines,tolines\n \n def _split_line(self,data_list,line_num,text):\n ''\n\n\n\n\n\n\n \n \n if not line_num:\n data_list.append((line_num,text))\n return\n \n \n size=len(text)\n max=self._wrapcolumn\n if (size <=max)or ((size -(text.count('\\0')*3))<=max):\n data_list.append((line_num,text))\n return\n \n \n \n i=0\n n=0\n mark=''\n while n ',line2)\n \n def _line_wrapper(self,diffs):\n ''\n \n \n for fromdata,todata,flag in diffs:\n \n if flag is None :\n yield fromdata,todata,flag\n continue\n (fromline,fromtext),(toline,totext)=fromdata,todata\n \n \n fromlist,tolist=[],[]\n self._split_line(fromlist,fromline,fromtext)\n self._split_line(tolist,toline,totext)\n \n \n while fromlist or tolist:\n if fromlist:\n fromdata=fromlist.pop(0)\n else :\n fromdata=('',' ')\n if tolist:\n todata=tolist.pop(0)\n else :\n todata=('',' ')\n yield fromdata,todata,flag\n \n def _collect_lines(self,diffs):\n ''\n\n\n\n \n \n fromlist,tolist,flaglist=[],[],[]\n \n for fromdata,todata,flag in diffs:\n try :\n \n fromlist.append(self._format_line(0,flag,*fromdata))\n tolist.append(self._format_line(1,flag,*todata))\n except TypeError:\n \n fromlist.append(None )\n tolist.append(None )\n flaglist.append(flag)\n return fromlist,tolist,flaglist\n \n def _format_line(self,side,flag,linenum,text):\n ''\n\n\n\n\n\n \n try :\n linenum='%d'%linenum\n id=' id=\"%s%s\"'%(self._prefix[side],linenum)\n except TypeError:\n \n id=''\n \n text=text.replace(\"&\",\"&\").replace(\">\",\">\").replace(\"<\",\"<\")\n \n \n text=text.replace(' ',' ').rstrip()\n \n return'%s%s' %(id,linenum,text)\n \n def _make_prefix(self):\n ''\n \n \n \n fromprefix=\"from%d_\"%HtmlDiff._default_prefix\n toprefix=\"to%d_\"%HtmlDiff._default_prefix\n HtmlDiff._default_prefix +=1\n \n self._prefix=[fromprefix,toprefix]\n \n def _convert_flags(self,fromlist,tolist,flaglist,context,numlines):\n ''\n \n \n toprefix=self._prefix[1]\n \n \n next_id=['']*len(flaglist)\n next_href=['']*len(flaglist)\n num_chg,in_change=0,False\n last=0\n for i,flag in enumerate(flaglist):\n if flag:\n if not in_change:\n in_change=True\n last=i\n \n \n \n i=max([0,i -numlines])\n next_id[i]=' id=\"difflib_chg_%s_%d\"'%(toprefix,num_chg)\n \n \n num_chg +=1\n next_href[last]='n'%(\n toprefix,num_chg)\n else :\n in_change=False\n \n if not flaglist:\n flaglist=[False ]\n next_id=['']\n next_href=['']\n last=0\n if context:\n fromlist=[' No Differences Found ']\n tolist=fromlist\n else :\n fromlist=tolist=[' Empty File ']\n \n if not flaglist[0]:\n next_href[0]='f'%toprefix\n \n next_href[last]='t'%(toprefix)\n \n return fromlist,tolist,flaglist,next_href,next_id\n \n def make_table(self,fromlines,tolines,fromdesc='',todesc='',context=False ,\n numlines=5):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n self._make_prefix()\n \n \n \n fromlines,tolines=self._tab_newline_replace(fromlines,tolines)\n \n \n if context:\n context_lines=numlines\n else :\n context_lines=None\n diffs=_mdiff(fromlines,tolines,context_lines,linejunk=self._linejunk,\n charjunk=self._charjunk)\n \n \n if self._wrapcolumn:\n diffs=self._line_wrapper(diffs)\n \n \n fromlist,tolist,flaglist=self._collect_lines(diffs)\n \n \n fromlist,tolist,flaglist,next_href,next_id=self._convert_flags(\n fromlist,tolist,flaglist,context,numlines)\n \n s=[]\n fmt=' %s%s'+ '%s%s\\n'\n for i in range(len(flaglist)):\n if flaglist[i]is None :\n \n \n if i >0:\n s.append(' \\n \\n')\n else :\n s.append(fmt %(next_id[i],next_href[i],fromlist[i],\n next_href[i],tolist[i]))\n if fromdesc or todesc:\n header_row='%s%s%s%s'%(\n '
',\n '%s'%fromdesc,\n '
',\n '%s'%todesc)\n else :\n header_row=''\n \n table=self._table_template %dict(\n data_rows=''.join(s),\n header_row=header_row,\n prefix=self._prefix[1])\n \n return table.replace('\\0+',''). replace('\\0-',''). replace('\\0^',''). replace('\\1',''). replace('\\t',' ')\n \ndel re\n\ndef restore(delta,which):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n tag={1:\"- \",2:\"+ \"}[int(which)]\n except KeyError:\n raise ValueError('unknown delta choice (must be 1 or 2): %r'\n %which)\n prefixes=(\" \",tag)\n for line in delta:\n if line[:2]in prefixes:\n yield line[2:]\n \ndef _test():\n import doctest,difflib\n return doctest.testmod(difflib)\n \nif __name__ ==\"__main__\":\n _test()\n"], "urllib": [".py", "", 1], "calendar": [".py", "''\n\n\n\n\n\n\nimport sys\nimport datetime\nimport locale as _locale\n\n__all__=[\"IllegalMonthError\",\"IllegalWeekdayError\",\"setfirstweekday\",\n\"firstweekday\",\"isleap\",\"leapdays\",\"weekday\",\"monthrange\",\n\"monthcalendar\",\"prmonth\",\"month\",\"prcal\",\"calendar\",\n\"timegm\",\"month_name\",\"month_abbr\",\"day_name\",\"day_abbr\"]\n\n\nerror=ValueError\n\n\nclass IllegalMonthError(ValueError):\n def __init__(self,month):\n self.month=month\n def __str__(self):\n return\"bad month number %r; must be 1-12\"%self.month\n \n \nclass IllegalWeekdayError(ValueError):\n def __init__(self,weekday):\n self.weekday=weekday\n def __str__(self):\n return\"bad weekday number %r; must be 0 (Monday) to 6 (Sunday)\"%self.weekday\n \n \n \nJanuary=1\nFebruary=2\n\n\nmdays=[0,31,28,31,30,31,30,31,31,30,31,30,31]\n\n\n\n\n\n\nclass _localized_month:\n\n _months=[datetime.date(2001,i+1,1).strftime for i in range(12)]\n _months.insert(0,lambda x:\"\")\n \n def __init__(self,format):\n self.format=format\n \n def __getitem__(self,i):\n funcs=self._months[i]\n if isinstance(i,slice):\n return [f(self.format)for f in funcs]\n else :\n return funcs(self.format)\n \n def __len__(self):\n return 13\n \n \nclass _localized_day:\n\n\n _days=[datetime.date(2001,1,i+1).strftime for i in range(7)]\n \n def __init__(self,format):\n self.format=format\n \n def __getitem__(self,i):\n funcs=self._days[i]\n if isinstance(i,slice):\n return [f(self.format)for f in funcs]\n else :\n return funcs(self.format)\n \n def __len__(self):\n return 7\n \n \n \nday_name=_localized_day('%A')\nday_abbr=_localized_day('%a')\n\n\nmonth_name=_localized_month('%B')\nmonth_abbr=_localized_month('%b')\n\n\n(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY)=range(7)\n\n\ndef isleap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \n \ndef leapdays(y1,y2):\n ''\n \n y1 -=1\n y2 -=1\n return (y2 //4 -y1 //4)-(y2 //100 -y1 //100)+(y2 //400 -y1 //400)\n \n \ndef weekday(year,month,day):\n ''\n \n return datetime.date(year,month,day).weekday()\n \n \ndef monthrange(year,month):\n ''\n \n if not 1 <=month <=12:\n raise IllegalMonthError(month)\n day1=weekday(year,month,1)\n ndays=mdays[month]+(month ==February and isleap(year))\n return day1,ndays\n \n \nclass Calendar(object):\n ''\n\n\n \n \n def __init__(self,firstweekday=0):\n self.firstweekday=firstweekday\n \n def getfirstweekday(self):\n return self._firstweekday %7\n \n def setfirstweekday(self,firstweekday):\n self._firstweekday=firstweekday\n \n firstweekday=property(getfirstweekday,setfirstweekday)\n \n def iterweekdays(self):\n ''\n\n\n \n for i in range(self.firstweekday,self.firstweekday+7):\n yield i %7\n \n def itermonthdates(self,year,month):\n ''\n\n\n\n \n date=datetime.date(year,month,1)\n \n days=(date.weekday()-self.firstweekday)%7\n date -=datetime.timedelta(days=days)\n oneday=datetime.timedelta(days=1)\n while True :\n yield date\n try :\n date +=oneday\n except OverflowError:\n \n break\n if date.month !=month and date.weekday()==self.firstweekday:\n break\n \n def itermonthdays2(self,year,month):\n ''\n\n\n \n for date in self.itermonthdates(year,month):\n if date.month !=month:\n yield (0,date.weekday())\n else :\n yield (date.day,date.weekday())\n \n def itermonthdays(self,year,month):\n ''\n\n\n \n for date in self.itermonthdates(year,month):\n if date.month !=month:\n yield 0\n else :\n yield date.day\n \n def monthdatescalendar(self,year,month):\n ''\n\n\n \n dates=list(self.itermonthdates(year,month))\n return [dates[i:i+7]for i in range(0,len(dates),7)]\n \n def monthdays2calendar(self,year,month):\n ''\n\n\n\n\n \n days=list(self.itermonthdays2(year,month))\n return [days[i:i+7]for i in range(0,len(days),7)]\n \n def monthdayscalendar(self,year,month):\n ''\n\n\n \n days=list(self.itermonthdays(year,month))\n return [days[i:i+7]for i in range(0,len(days),7)]\n \n def yeardatescalendar(self,year,width=3):\n ''\n\n\n\n\n \n months=[\n self.monthdatescalendar(year,i)\n for i in range(January,January+12)\n ]\n return [months[i:i+width]for i in range(0,len(months),width)]\n \n def yeardays2calendar(self,year,width=3):\n ''\n\n\n\n\n \n months=[\n self.monthdays2calendar(year,i)\n for i in range(January,January+12)\n ]\n return [months[i:i+width]for i in range(0,len(months),width)]\n \n def yeardayscalendar(self,year,width=3):\n ''\n\n\n\n \n months=[\n self.monthdayscalendar(year,i)\n for i in range(January,January+12)\n ]\n return [months[i:i+width]for i in range(0,len(months),width)]\n \n \nclass TextCalendar(Calendar):\n ''\n\n\n \n \n def prweek(self,theweek,width):\n ''\n\n \n print(self.formatweek(theweek,width),end=' ')\n \n def formatday(self,day,weekday,width):\n ''\n\n \n if day ==0:\n s=''\n else :\n s='%2i'%day\n return s.center(width)\n \n def formatweek(self,theweek,width):\n ''\n\n \n return' '.join(self.formatday(d,wd,width)for (d,wd)in theweek)\n \n def formatweekday(self,day,width):\n ''\n\n \n if width >=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))\n \n \nclass HTMLCalendar(Calendar):\n ''\n\n \n \n \n cssclasses=[\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",\"sun\"]\n \n def formatday(self,day,weekday):\n ''\n\n \n if day ==0:\n return' '\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'%(self.cssclasses[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'%s\n \n def formatmonth(self,theyear,themonth,withyear=True ):\n ''\n\n \n v=[]\n a=v.append\n a('')\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 a('\\n')\n a(''%(width,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('')\n a('
%s
')\n a(self.formatmonth(theyear,m,withyear=False ))\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 optparse\n parser=optparse.OptionParser(usage=\"usage: %prog [options] [year [month]]\")\n parser.add_option(\n \"-w\",\"--width\",\n dest=\"width\",type=\"int\",default=2,\n help=\"width of date column (default 2, text only)\"\n )\n parser.add_option(\n \"-l\",\"--lines\",\n dest=\"lines\",type=\"int\",default=1,\n help=\"number of lines for each week (default 1, text only)\"\n )\n parser.add_option(\n \"-s\",\"--spacing\",\n dest=\"spacing\",type=\"int\",default=6,\n help=\"spacing between months (default 6, text only)\"\n )\n parser.add_option(\n \"-m\",\"--months\",\n dest=\"months\",type=\"int\",default=3,\n help=\"months per row (default 3, text only)\"\n )\n parser.add_option(\n \"-c\",\"--css\",\n dest=\"css\",default=\"calendar.css\",\n help=\"CSS to use for page (html only)\"\n )\n parser.add_option(\n \"-L\",\"--locale\",\n dest=\"locale\",default=None ,\n help=\"locale to be used from month and weekday names\"\n )\n parser.add_option(\n \"-e\",\"--encoding\",\n dest=\"encoding\",default=None ,\n help=\"Encoding to use for output.\"\n )\n parser.add_option(\n \"-t\",\"--type\",\n dest=\"type\",default=\"text\",\n choices=(\"text\",\"html\"),\n help=\"output type (text or html)\"\n )\n \n (options,args)=parser.parse_args(args)\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 len(args)==1:\n write(cal.formatyearpage(datetime.date.today().year,**optdict))\n elif len(args)==2:\n write(cal.formatyearpage(int(args[1]),**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 len(args)!=3:\n optdict[\"c\"]=options.spacing\n optdict[\"m\"]=options.months\n if len(args)==1:\n result=cal.formatyear(datetime.date.today().year,**optdict)\n elif len(args)==2:\n result=cal.formatyear(int(args[1]),**optdict)\n elif len(args)==3:\n result=cal.formatmonth(int(args[1]),int(args[2]),**optdict)\n else :\n parser.error(\"incorrect number of arguments\")\n sys.exit(1)\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"], "genericpath": [".py", "''\n\n\n\n\nimport os\nimport stat\n\n__all__=['commonprefix','exists','getatime','getctime','getmtime',\n'getsize','isdir','isfile']\n\n\n\n\ndef exists(path):\n ''\n try :\n os.stat(path)\n except os.error:\n return False\n return True\n \n \n \n \ndef isfile(path):\n ''\n try :\n st=os.stat(path)\n except os.error:\n return False\n return stat.S_ISREG(st.st_mode)\n \n \n \n \n \ndef isdir(s):\n ''\n try :\n st=os.stat(s)\n except os.error:\n return False\n return stat.S_ISDIR(st.st_mode)\n \n \ndef getsize(filename):\n ''\n return os.stat(filename).st_size\n \n \ndef getmtime(filename):\n ''\n return os.stat(filename).st_mtime\n \n \ndef getatime(filename):\n ''\n return os.stat(filename).st_atime\n \n \ndef getctime(filename):\n ''\n return os.stat(filename).st_ctime\n \n \n \ndef commonprefix(m):\n ''\n if not m:return''\n s1=min(m)\n s2=max(m)\n for i,c in enumerate(s1):\n if c !=s2[i]:\n return s1[:i]\n return s1\n \n \n \n \n \n \n \n \ndef _splitext(p,sep,altsep,extsep):\n ''\n\n\n \n \n \n sepIndex=p.rfind(sep)\n if altsep:\n altsepIndex=p.rfind(altsep)\n sepIndex=max(sepIndex,altsepIndex)\n \n dotIndex=p.rfind(extsep)\n if dotIndex >sepIndex:\n \n filenameIndex=sepIndex+1\n while filenameIndex ',\n'gt':'>',\n'GT;':'>',\n'Gt;':'\\u226b',\n'gt;':'>',\n'gtcc;':'\\u2aa7',\n'gtcir;':'\\u2a7a',\n'gtdot;':'\\u22d7',\n'gtlPar;':'\\u2995',\n'gtquest;':'\\u2a7c',\n'gtrapprox;':'\\u2a86',\n'gtrarr;':'\\u2978',\n'gtrdot;':'\\u22d7',\n'gtreqless;':'\\u22db',\n'gtreqqless;':'\\u2a8c',\n'gtrless;':'\\u2277',\n'gtrsim;':'\\u2273',\n'gvertneqq;':'\\u2269\\ufe00',\n'gvnE;':'\\u2269\\ufe00',\n'Hacek;':'\\u02c7',\n'hairsp;':'\\u200a',\n'half;':'\\xbd',\n'hamilt;':'\\u210b',\n'HARDcy;':'\\u042a',\n'hardcy;':'\\u044a',\n'hArr;':'\\u21d4',\n'harr;':'\\u2194',\n'harrcir;':'\\u2948',\n'harrw;':'\\u21ad',\n'Hat;':'^',\n'hbar;':'\\u210f',\n'Hcirc;':'\\u0124',\n'hcirc;':'\\u0125',\n'hearts;':'\\u2665',\n'heartsuit;':'\\u2665',\n'hellip;':'\\u2026',\n'hercon;':'\\u22b9',\n'Hfr;':'\\u210c',\n'hfr;':'\\U0001d525',\n'HilbertSpace;':'\\u210b',\n'hksearow;':'\\u2925',\n'hkswarow;':'\\u2926',\n'hoarr;':'\\u21ff',\n'homtht;':'\\u223b',\n'hookleftarrow;':'\\u21a9',\n'hookrightarrow;':'\\u21aa',\n'Hopf;':'\\u210d',\n'hopf;':'\\U0001d559',\n'horbar;':'\\u2015',\n'HorizontalLine;':'\\u2500',\n'Hscr;':'\\u210b',\n'hscr;':'\\U0001d4bd',\n'hslash;':'\\u210f',\n'Hstrok;':'\\u0126',\n'hstrok;':'\\u0127',\n'HumpDownHump;':'\\u224e',\n'HumpEqual;':'\\u224f',\n'hybull;':'\\u2043',\n'hyphen;':'\\u2010',\n'Iacute':'\\xcd',\n'iacute':'\\xed',\n'Iacute;':'\\xcd',\n'iacute;':'\\xed',\n'ic;':'\\u2063',\n'Icirc':'\\xce',\n'icirc':'\\xee',\n'Icirc;':'\\xce',\n'icirc;':'\\xee',\n'Icy;':'\\u0418',\n'icy;':'\\u0438',\n'Idot;':'\\u0130',\n'IEcy;':'\\u0415',\n'iecy;':'\\u0435',\n'iexcl':'\\xa1',\n'iexcl;':'\\xa1',\n'iff;':'\\u21d4',\n'Ifr;':'\\u2111',\n'ifr;':'\\U0001d526',\n'Igrave':'\\xcc',\n'igrave':'\\xec',\n'Igrave;':'\\xcc',\n'igrave;':'\\xec',\n'ii;':'\\u2148',\n'iiiint;':'\\u2a0c',\n'iiint;':'\\u222d',\n'iinfin;':'\\u29dc',\n'iiota;':'\\u2129',\n'IJlig;':'\\u0132',\n'ijlig;':'\\u0133',\n'Im;':'\\u2111',\n'Imacr;':'\\u012a',\n'imacr;':'\\u012b',\n'image;':'\\u2111',\n'ImaginaryI;':'\\u2148',\n'imagline;':'\\u2110',\n'imagpart;':'\\u2111',\n'imath;':'\\u0131',\n'imof;':'\\u22b7',\n'imped;':'\\u01b5',\n'Implies;':'\\u21d2',\n'in;':'\\u2208',\n'incare;':'\\u2105',\n'infin;':'\\u221e',\n'infintie;':'\\u29dd',\n'inodot;':'\\u0131',\n'Int;':'\\u222c',\n'int;':'\\u222b',\n'intcal;':'\\u22ba',\n'integers;':'\\u2124',\n'Integral;':'\\u222b',\n'intercal;':'\\u22ba',\n'Intersection;':'\\u22c2',\n'intlarhk;':'\\u2a17',\n'intprod;':'\\u2a3c',\n'InvisibleComma;':'\\u2063',\n'InvisibleTimes;':'\\u2062',\n'IOcy;':'\\u0401',\n'iocy;':'\\u0451',\n'Iogon;':'\\u012e',\n'iogon;':'\\u012f',\n'Iopf;':'\\U0001d540',\n'iopf;':'\\U0001d55a',\n'Iota;':'\\u0399',\n'iota;':'\\u03b9',\n'iprod;':'\\u2a3c',\n'iquest':'\\xbf',\n'iquest;':'\\xbf',\n'Iscr;':'\\u2110',\n'iscr;':'\\U0001d4be',\n'isin;':'\\u2208',\n'isindot;':'\\u22f5',\n'isinE;':'\\u22f9',\n'isins;':'\\u22f4',\n'isinsv;':'\\u22f3',\n'isinv;':'\\u2208',\n'it;':'\\u2062',\n'Itilde;':'\\u0128',\n'itilde;':'\\u0129',\n'Iukcy;':'\\u0406',\n'iukcy;':'\\u0456',\n'Iuml':'\\xcf',\n'iuml':'\\xef',\n'Iuml;':'\\xcf',\n'iuml;':'\\xef',\n'Jcirc;':'\\u0134',\n'jcirc;':'\\u0135',\n'Jcy;':'\\u0419',\n'jcy;':'\\u0439',\n'Jfr;':'\\U0001d50d',\n'jfr;':'\\U0001d527',\n'jmath;':'\\u0237',\n'Jopf;':'\\U0001d541',\n'jopf;':'\\U0001d55b',\n'Jscr;':'\\U0001d4a5',\n'jscr;':'\\U0001d4bf',\n'Jsercy;':'\\u0408',\n'jsercy;':'\\u0458',\n'Jukcy;':'\\u0404',\n'jukcy;':'\\u0454',\n'Kappa;':'\\u039a',\n'kappa;':'\\u03ba',\n'kappav;':'\\u03f0',\n'Kcedil;':'\\u0136',\n'kcedil;':'\\u0137',\n'Kcy;':'\\u041a',\n'kcy;':'\\u043a',\n'Kfr;':'\\U0001d50e',\n'kfr;':'\\U0001d528',\n'kgreen;':'\\u0138',\n'KHcy;':'\\u0425',\n'khcy;':'\\u0445',\n'KJcy;':'\\u040c',\n'kjcy;':'\\u045c',\n'Kopf;':'\\U0001d542',\n'kopf;':'\\U0001d55c',\n'Kscr;':'\\U0001d4a6',\n'kscr;':'\\U0001d4c0',\n'lAarr;':'\\u21da',\n'Lacute;':'\\u0139',\n'lacute;':'\\u013a',\n'laemptyv;':'\\u29b4',\n'lagran;':'\\u2112',\n'Lambda;':'\\u039b',\n'lambda;':'\\u03bb',\n'Lang;':'\\u27ea',\n'lang;':'\\u27e8',\n'langd;':'\\u2991',\n'langle;':'\\u27e8',\n'lap;':'\\u2a85',\n'Laplacetrf;':'\\u2112',\n'laquo':'\\xab',\n'laquo;':'\\xab',\n'Larr;':'\\u219e',\n'lArr;':'\\u21d0',\n'larr;':'\\u2190',\n'larrb;':'\\u21e4',\n'larrbfs;':'\\u291f',\n'larrfs;':'\\u291d',\n'larrhk;':'\\u21a9',\n'larrlp;':'\\u21ab',\n'larrpl;':'\\u2939',\n'larrsim;':'\\u2973',\n'larrtl;':'\\u21a2',\n'lat;':'\\u2aab',\n'lAtail;':'\\u291b',\n'latail;':'\\u2919',\n'late;':'\\u2aad',\n'lates;':'\\u2aad\\ufe00',\n'lBarr;':'\\u290e',\n'lbarr;':'\\u290c',\n'lbbrk;':'\\u2772',\n'lbrace;':'{',\n'lbrack;':'[',\n'lbrke;':'\\u298b',\n'lbrksld;':'\\u298f',\n'lbrkslu;':'\\u298d',\n'Lcaron;':'\\u013d',\n'lcaron;':'\\u013e',\n'Lcedil;':'\\u013b',\n'lcedil;':'\\u013c',\n'lceil;':'\\u2308',\n'lcub;':'{',\n'Lcy;':'\\u041b',\n'lcy;':'\\u043b',\n'ldca;':'\\u2936',\n'ldquo;':'\\u201c',\n'ldquor;':'\\u201e',\n'ldrdhar;':'\\u2967',\n'ldrushar;':'\\u294b',\n'ldsh;':'\\u21b2',\n'lE;':'\\u2266',\n'le;':'\\u2264',\n'LeftAngleBracket;':'\\u27e8',\n'LeftArrow;':'\\u2190',\n'Leftarrow;':'\\u21d0',\n'leftarrow;':'\\u2190',\n'LeftArrowBar;':'\\u21e4',\n'LeftArrowRightArrow;':'\\u21c6',\n'leftarrowtail;':'\\u21a2',\n'LeftCeiling;':'\\u2308',\n'LeftDoubleBracket;':'\\u27e6',\n'LeftDownTeeVector;':'\\u2961',\n'LeftDownVector;':'\\u21c3',\n'LeftDownVectorBar;':'\\u2959',\n'LeftFloor;':'\\u230a',\n'leftharpoondown;':'\\u21bd',\n'leftharpoonup;':'\\u21bc',\n'leftleftarrows;':'\\u21c7',\n'LeftRightArrow;':'\\u2194',\n'Leftrightarrow;':'\\u21d4',\n'leftrightarrow;':'\\u2194',\n'leftrightarrows;':'\\u21c6',\n'leftrightharpoons;':'\\u21cb',\n'leftrightsquigarrow;':'\\u21ad',\n'LeftRightVector;':'\\u294e',\n'LeftTee;':'\\u22a3',\n'LeftTeeArrow;':'\\u21a4',\n'LeftTeeVector;':'\\u295a',\n'leftthreetimes;':'\\u22cb',\n'LeftTriangle;':'\\u22b2',\n'LeftTriangleBar;':'\\u29cf',\n'LeftTriangleEqual;':'\\u22b4',\n'LeftUpDownVector;':'\\u2951',\n'LeftUpTeeVector;':'\\u2960',\n'LeftUpVector;':'\\u21bf',\n'LeftUpVectorBar;':'\\u2958',\n'LeftVector;':'\\u21bc',\n'LeftVectorBar;':'\\u2952',\n'lEg;':'\\u2a8b',\n'leg;':'\\u22da',\n'leq;':'\\u2264',\n'leqq;':'\\u2266',\n'leqslant;':'\\u2a7d',\n'les;':'\\u2a7d',\n'lescc;':'\\u2aa8',\n'lesdot;':'\\u2a7f',\n'lesdoto;':'\\u2a81',\n'lesdotor;':'\\u2a83',\n'lesg;':'\\u22da\\ufe00',\n'lesges;':'\\u2a93',\n'lessapprox;':'\\u2a85',\n'lessdot;':'\\u22d6',\n'lesseqgtr;':'\\u22da',\n'lesseqqgtr;':'\\u2a8b',\n'LessEqualGreater;':'\\u22da',\n'LessFullEqual;':'\\u2266',\n'LessGreater;':'\\u2276',\n'lessgtr;':'\\u2276',\n'LessLess;':'\\u2aa1',\n'lesssim;':'\\u2272',\n'LessSlantEqual;':'\\u2a7d',\n'LessTilde;':'\\u2272',\n'lfisht;':'\\u297c',\n'lfloor;':'\\u230a',\n'Lfr;':'\\U0001d50f',\n'lfr;':'\\U0001d529',\n'lg;':'\\u2276',\n'lgE;':'\\u2a91',\n'lHar;':'\\u2962',\n'lhard;':'\\u21bd',\n'lharu;':'\\u21bc',\n'lharul;':'\\u296a',\n'lhblk;':'\\u2584',\n'LJcy;':'\\u0409',\n'ljcy;':'\\u0459',\n'Ll;':'\\u22d8',\n'll;':'\\u226a',\n'llarr;':'\\u21c7',\n'llcorner;':'\\u231e',\n'Lleftarrow;':'\\u21da',\n'llhard;':'\\u296b',\n'lltri;':'\\u25fa',\n'Lmidot;':'\\u013f',\n'lmidot;':'\\u0140',\n'lmoust;':'\\u23b0',\n'lmoustache;':'\\u23b0',\n'lnap;':'\\u2a89',\n'lnapprox;':'\\u2a89',\n'lnE;':'\\u2268',\n'lne;':'\\u2a87',\n'lneq;':'\\u2a87',\n'lneqq;':'\\u2268',\n'lnsim;':'\\u22e6',\n'loang;':'\\u27ec',\n'loarr;':'\\u21fd',\n'lobrk;':'\\u27e6',\n'LongLeftArrow;':'\\u27f5',\n'Longleftarrow;':'\\u27f8',\n'longleftarrow;':'\\u27f5',\n'LongLeftRightArrow;':'\\u27f7',\n'Longleftrightarrow;':'\\u27fa',\n'longleftrightarrow;':'\\u27f7',\n'longmapsto;':'\\u27fc',\n'LongRightArrow;':'\\u27f6',\n'Longrightarrow;':'\\u27f9',\n'longrightarrow;':'\\u27f6',\n'looparrowleft;':'\\u21ab',\n'looparrowright;':'\\u21ac',\n'lopar;':'\\u2985',\n'Lopf;':'\\U0001d543',\n'lopf;':'\\U0001d55d',\n'loplus;':'\\u2a2d',\n'lotimes;':'\\u2a34',\n'lowast;':'\\u2217',\n'lowbar;':'_',\n'LowerLeftArrow;':'\\u2199',\n'LowerRightArrow;':'\\u2198',\n'loz;':'\\u25ca',\n'lozenge;':'\\u25ca',\n'lozf;':'\\u29eb',\n'lpar;':'(',\n'lparlt;':'\\u2993',\n'lrarr;':'\\u21c6',\n'lrcorner;':'\\u231f',\n'lrhar;':'\\u21cb',\n'lrhard;':'\\u296d',\n'lrm;':'\\u200e',\n'lrtri;':'\\u22bf',\n'lsaquo;':'\\u2039',\n'Lscr;':'\\u2112',\n'lscr;':'\\U0001d4c1',\n'Lsh;':'\\u21b0',\n'lsh;':'\\u21b0',\n'lsim;':'\\u2272',\n'lsime;':'\\u2a8d',\n'lsimg;':'\\u2a8f',\n'lsqb;':'[',\n'lsquo;':'\\u2018',\n'lsquor;':'\\u201a',\n'Lstrok;':'\\u0141',\n'lstrok;':'\\u0142',\n'LT':'<',\n'lt':'<',\n'LT;':'<',\n'Lt;':'\\u226a',\n'lt;':'<',\n'ltcc;':'\\u2aa6',\n'ltcir;':'\\u2a79',\n'ltdot;':'\\u22d6',\n'lthree;':'\\u22cb',\n'ltimes;':'\\u22c9',\n'ltlarr;':'\\u2976',\n'ltquest;':'\\u2a7b',\n'ltri;':'\\u25c3',\n'ltrie;':'\\u22b4',\n'ltrif;':'\\u25c2',\n'ltrPar;':'\\u2996',\n'lurdshar;':'\\u294a',\n'luruhar;':'\\u2966',\n'lvertneqq;':'\\u2268\\ufe00',\n'lvnE;':'\\u2268\\ufe00',\n'macr':'\\xaf',\n'macr;':'\\xaf',\n'male;':'\\u2642',\n'malt;':'\\u2720',\n'maltese;':'\\u2720',\n'Map;':'\\u2905',\n'map;':'\\u21a6',\n'mapsto;':'\\u21a6',\n'mapstodown;':'\\u21a7',\n'mapstoleft;':'\\u21a4',\n'mapstoup;':'\\u21a5',\n'marker;':'\\u25ae',\n'mcomma;':'\\u2a29',\n'Mcy;':'\\u041c',\n'mcy;':'\\u043c',\n'mdash;':'\\u2014',\n'mDDot;':'\\u223a',\n'measuredangle;':'\\u2221',\n'MediumSpace;':'\\u205f',\n'Mellintrf;':'\\u2133',\n'Mfr;':'\\U0001d510',\n'mfr;':'\\U0001d52a',\n'mho;':'\\u2127',\n'micro':'\\xb5',\n'micro;':'\\xb5',\n'mid;':'\\u2223',\n'midast;':'*',\n'midcir;':'\\u2af0',\n'middot':'\\xb7',\n'middot;':'\\xb7',\n'minus;':'\\u2212',\n'minusb;':'\\u229f',\n'minusd;':'\\u2238',\n'minusdu;':'\\u2a2a',\n'MinusPlus;':'\\u2213',\n'mlcp;':'\\u2adb',\n'mldr;':'\\u2026',\n'mnplus;':'\\u2213',\n'models;':'\\u22a7',\n'Mopf;':'\\U0001d544',\n'mopf;':'\\U0001d55e',\n'mp;':'\\u2213',\n'Mscr;':'\\u2133',\n'mscr;':'\\U0001d4c2',\n'mstpos;':'\\u223e',\n'Mu;':'\\u039c',\n'mu;':'\\u03bc',\n'multimap;':'\\u22b8',\n'mumap;':'\\u22b8',\n'nabla;':'\\u2207',\n'Nacute;':'\\u0143',\n'nacute;':'\\u0144',\n'nang;':'\\u2220\\u20d2',\n'nap;':'\\u2249',\n'napE;':'\\u2a70\\u0338',\n'napid;':'\\u224b\\u0338',\n'napos;':'\\u0149',\n'napprox;':'\\u2249',\n'natur;':'\\u266e',\n'natural;':'\\u266e',\n'naturals;':'\\u2115',\n'nbsp':'\\xa0',\n'nbsp;':'\\xa0',\n'nbump;':'\\u224e\\u0338',\n'nbumpe;':'\\u224f\\u0338',\n'ncap;':'\\u2a43',\n'Ncaron;':'\\u0147',\n'ncaron;':'\\u0148',\n'Ncedil;':'\\u0145',\n'ncedil;':'\\u0146',\n'ncong;':'\\u2247',\n'ncongdot;':'\\u2a6d\\u0338',\n'ncup;':'\\u2a42',\n'Ncy;':'\\u041d',\n'ncy;':'\\u043d',\n'ndash;':'\\u2013',\n'ne;':'\\u2260',\n'nearhk;':'\\u2924',\n'neArr;':'\\u21d7',\n'nearr;':'\\u2197',\n'nearrow;':'\\u2197',\n'nedot;':'\\u2250\\u0338',\n'NegativeMediumSpace;':'\\u200b',\n'NegativeThickSpace;':'\\u200b',\n'NegativeThinSpace;':'\\u200b',\n'NegativeVeryThinSpace;':'\\u200b',\n'nequiv;':'\\u2262',\n'nesear;':'\\u2928',\n'nesim;':'\\u2242\\u0338',\n'NestedGreaterGreater;':'\\u226b',\n'NestedLessLess;':'\\u226a',\n'NewLine;':'\\n',\n'nexist;':'\\u2204',\n'nexists;':'\\u2204',\n'Nfr;':'\\U0001d511',\n'nfr;':'\\U0001d52b',\n'ngE;':'\\u2267\\u0338',\n'nge;':'\\u2271',\n'ngeq;':'\\u2271',\n'ngeqq;':'\\u2267\\u0338',\n'ngeqslant;':'\\u2a7e\\u0338',\n'nges;':'\\u2a7e\\u0338',\n'nGg;':'\\u22d9\\u0338',\n'ngsim;':'\\u2275',\n'nGt;':'\\u226b\\u20d2',\n'ngt;':'\\u226f',\n'ngtr;':'\\u226f',\n'nGtv;':'\\u226b\\u0338',\n'nhArr;':'\\u21ce',\n'nharr;':'\\u21ae',\n'nhpar;':'\\u2af2',\n'ni;':'\\u220b',\n'nis;':'\\u22fc',\n'nisd;':'\\u22fa',\n'niv;':'\\u220b',\n'NJcy;':'\\u040a',\n'njcy;':'\\u045a',\n'nlArr;':'\\u21cd',\n'nlarr;':'\\u219a',\n'nldr;':'\\u2025',\n'nlE;':'\\u2266\\u0338',\n'nle;':'\\u2270',\n'nLeftarrow;':'\\u21cd',\n'nleftarrow;':'\\u219a',\n'nLeftrightarrow;':'\\u21ce',\n'nleftrightarrow;':'\\u21ae',\n'nleq;':'\\u2270',\n'nleqq;':'\\u2266\\u0338',\n'nleqslant;':'\\u2a7d\\u0338',\n'nles;':'\\u2a7d\\u0338',\n'nless;':'\\u226e',\n'nLl;':'\\u22d8\\u0338',\n'nlsim;':'\\u2274',\n'nLt;':'\\u226a\\u20d2',\n'nlt;':'\\u226e',\n'nltri;':'\\u22ea',\n'nltrie;':'\\u22ec',\n'nLtv;':'\\u226a\\u0338',\n'nmid;':'\\u2224',\n'NoBreak;':'\\u2060',\n'NonBreakingSpace;':'\\xa0',\n'Nopf;':'\\u2115',\n'nopf;':'\\U0001d55f',\n'not':'\\xac',\n'Not;':'\\u2aec',\n'not;':'\\xac',\n'NotCongruent;':'\\u2262',\n'NotCupCap;':'\\u226d',\n'NotDoubleVerticalBar;':'\\u2226',\n'NotElement;':'\\u2209',\n'NotEqual;':'\\u2260',\n'NotEqualTilde;':'\\u2242\\u0338',\n'NotExists;':'\\u2204',\n'NotGreater;':'\\u226f',\n'NotGreaterEqual;':'\\u2271',\n'NotGreaterFullEqual;':'\\u2267\\u0338',\n'NotGreaterGreater;':'\\u226b\\u0338',\n'NotGreaterLess;':'\\u2279',\n'NotGreaterSlantEqual;':'\\u2a7e\\u0338',\n'NotGreaterTilde;':'\\u2275',\n'NotHumpDownHump;':'\\u224e\\u0338',\n'NotHumpEqual;':'\\u224f\\u0338',\n'notin;':'\\u2209',\n'notindot;':'\\u22f5\\u0338',\n'notinE;':'\\u22f9\\u0338',\n'notinva;':'\\u2209',\n'notinvb;':'\\u22f7',\n'notinvc;':'\\u22f6',\n'NotLeftTriangle;':'\\u22ea',\n'NotLeftTriangleBar;':'\\u29cf\\u0338',\n'NotLeftTriangleEqual;':'\\u22ec',\n'NotLess;':'\\u226e',\n'NotLessEqual;':'\\u2270',\n'NotLessGreater;':'\\u2278',\n'NotLessLess;':'\\u226a\\u0338',\n'NotLessSlantEqual;':'\\u2a7d\\u0338',\n'NotLessTilde;':'\\u2274',\n'NotNestedGreaterGreater;':'\\u2aa2\\u0338',\n'NotNestedLessLess;':'\\u2aa1\\u0338',\n'notni;':'\\u220c',\n'notniva;':'\\u220c',\n'notnivb;':'\\u22fe',\n'notnivc;':'\\u22fd',\n'NotPrecedes;':'\\u2280',\n'NotPrecedesEqual;':'\\u2aaf\\u0338',\n'NotPrecedesSlantEqual;':'\\u22e0',\n'NotReverseElement;':'\\u220c',\n'NotRightTriangle;':'\\u22eb',\n'NotRightTriangleBar;':'\\u29d0\\u0338',\n'NotRightTriangleEqual;':'\\u22ed',\n'NotSquareSubset;':'\\u228f\\u0338',\n'NotSquareSubsetEqual;':'\\u22e2',\n'NotSquareSuperset;':'\\u2290\\u0338',\n'NotSquareSupersetEqual;':'\\u22e3',\n'NotSubset;':'\\u2282\\u20d2',\n'NotSubsetEqual;':'\\u2288',\n'NotSucceeds;':'\\u2281',\n'NotSucceedsEqual;':'\\u2ab0\\u0338',\n'NotSucceedsSlantEqual;':'\\u22e1',\n'NotSucceedsTilde;':'\\u227f\\u0338',\n'NotSuperset;':'\\u2283\\u20d2',\n'NotSupersetEqual;':'\\u2289',\n'NotTilde;':'\\u2241',\n'NotTildeEqual;':'\\u2244',\n'NotTildeFullEqual;':'\\u2247',\n'NotTildeTilde;':'\\u2249',\n'NotVerticalBar;':'\\u2224',\n'npar;':'\\u2226',\n'nparallel;':'\\u2226',\n'nparsl;':'\\u2afd\\u20e5',\n'npart;':'\\u2202\\u0338',\n'npolint;':'\\u2a14',\n'npr;':'\\u2280',\n'nprcue;':'\\u22e0',\n'npre;':'\\u2aaf\\u0338',\n'nprec;':'\\u2280',\n'npreceq;':'\\u2aaf\\u0338',\n'nrArr;':'\\u21cf',\n'nrarr;':'\\u219b',\n'nrarrc;':'\\u2933\\u0338',\n'nrarrw;':'\\u219d\\u0338',\n'nRightarrow;':'\\u21cf',\n'nrightarrow;':'\\u219b',\n'nrtri;':'\\u22eb',\n'nrtrie;':'\\u22ed',\n'nsc;':'\\u2281',\n'nsccue;':'\\u22e1',\n'nsce;':'\\u2ab0\\u0338',\n'Nscr;':'\\U0001d4a9',\n'nscr;':'\\U0001d4c3',\n'nshortmid;':'\\u2224',\n'nshortparallel;':'\\u2226',\n'nsim;':'\\u2241',\n'nsime;':'\\u2244',\n'nsimeq;':'\\u2244',\n'nsmid;':'\\u2224',\n'nspar;':'\\u2226',\n'nsqsube;':'\\u22e2',\n'nsqsupe;':'\\u22e3',\n'nsub;':'\\u2284',\n'nsubE;':'\\u2ac5\\u0338',\n'nsube;':'\\u2288',\n'nsubset;':'\\u2282\\u20d2',\n'nsubseteq;':'\\u2288',\n'nsubseteqq;':'\\u2ac5\\u0338',\n'nsucc;':'\\u2281',\n'nsucceq;':'\\u2ab0\\u0338',\n'nsup;':'\\u2285',\n'nsupE;':'\\u2ac6\\u0338',\n'nsupe;':'\\u2289',\n'nsupset;':'\\u2283\\u20d2',\n'nsupseteq;':'\\u2289',\n'nsupseteqq;':'\\u2ac6\\u0338',\n'ntgl;':'\\u2279',\n'Ntilde':'\\xd1',\n'ntilde':'\\xf1',\n'Ntilde;':'\\xd1',\n'ntilde;':'\\xf1',\n'ntlg;':'\\u2278',\n'ntriangleleft;':'\\u22ea',\n'ntrianglelefteq;':'\\u22ec',\n'ntriangleright;':'\\u22eb',\n'ntrianglerighteq;':'\\u22ed',\n'Nu;':'\\u039d',\n'nu;':'\\u03bd',\n'num;':'#',\n'numero;':'\\u2116',\n'numsp;':'\\u2007',\n'nvap;':'\\u224d\\u20d2',\n'nVDash;':'\\u22af',\n'nVdash;':'\\u22ae',\n'nvDash;':'\\u22ad',\n'nvdash;':'\\u22ac',\n'nvge;':'\\u2265\\u20d2',\n'nvgt;':'>\\u20d2',\n'nvHarr;':'\\u2904',\n'nvinfin;':'\\u29de',\n'nvlArr;':'\\u2902',\n'nvle;':'\\u2264\\u20d2',\n'nvlt;':'<\\u20d2',\n'nvltrie;':'\\u22b4\\u20d2',\n'nvrArr;':'\\u2903',\n'nvrtrie;':'\\u22b5\\u20d2',\n'nvsim;':'\\u223c\\u20d2',\n'nwarhk;':'\\u2923',\n'nwArr;':'\\u21d6',\n'nwarr;':'\\u2196',\n'nwarrow;':'\\u2196',\n'nwnear;':'\\u2927',\n'Oacute':'\\xd3',\n'oacute':'\\xf3',\n'Oacute;':'\\xd3',\n'oacute;':'\\xf3',\n'oast;':'\\u229b',\n'ocir;':'\\u229a',\n'Ocirc':'\\xd4',\n'ocirc':'\\xf4',\n'Ocirc;':'\\xd4',\n'ocirc;':'\\xf4',\n'Ocy;':'\\u041e',\n'ocy;':'\\u043e',\n'odash;':'\\u229d',\n'Odblac;':'\\u0150',\n'odblac;':'\\u0151',\n'odiv;':'\\u2a38',\n'odot;':'\\u2299',\n'odsold;':'\\u29bc',\n'OElig;':'\\u0152',\n'oelig;':'\\u0153',\n'ofcir;':'\\u29bf',\n'Ofr;':'\\U0001d512',\n'ofr;':'\\U0001d52c',\n'ogon;':'\\u02db',\n'Ograve':'\\xd2',\n'ograve':'\\xf2',\n'Ograve;':'\\xd2',\n'ograve;':'\\xf2',\n'ogt;':'\\u29c1',\n'ohbar;':'\\u29b5',\n'ohm;':'\\u03a9',\n'oint;':'\\u222e',\n'olarr;':'\\u21ba',\n'olcir;':'\\u29be',\n'olcross;':'\\u29bb',\n'oline;':'\\u203e',\n'olt;':'\\u29c0',\n'Omacr;':'\\u014c',\n'omacr;':'\\u014d',\n'Omega;':'\\u03a9',\n'omega;':'\\u03c9',\n'Omicron;':'\\u039f',\n'omicron;':'\\u03bf',\n'omid;':'\\u29b6',\n'ominus;':'\\u2296',\n'Oopf;':'\\U0001d546',\n'oopf;':'\\U0001d560',\n'opar;':'\\u29b7',\n'OpenCurlyDoubleQuote;':'\\u201c',\n'OpenCurlyQuote;':'\\u2018',\n'operp;':'\\u29b9',\n'oplus;':'\\u2295',\n'Or;':'\\u2a54',\n'or;':'\\u2228',\n'orarr;':'\\u21bb',\n'ord;':'\\u2a5d',\n'order;':'\\u2134',\n'orderof;':'\\u2134',\n'ordf':'\\xaa',\n'ordf;':'\\xaa',\n'ordm':'\\xba',\n'ordm;':'\\xba',\n'origof;':'\\u22b6',\n'oror;':'\\u2a56',\n'orslope;':'\\u2a57',\n'orv;':'\\u2a5b',\n'oS;':'\\u24c8',\n'Oscr;':'\\U0001d4aa',\n'oscr;':'\\u2134',\n'Oslash':'\\xd8',\n'oslash':'\\xf8',\n'Oslash;':'\\xd8',\n'oslash;':'\\xf8',\n'osol;':'\\u2298',\n'Otilde':'\\xd5',\n'otilde':'\\xf5',\n'Otilde;':'\\xd5',\n'otilde;':'\\xf5',\n'Otimes;':'\\u2a37',\n'otimes;':'\\u2297',\n'otimesas;':'\\u2a36',\n'Ouml':'\\xd6',\n'ouml':'\\xf6',\n'Ouml;':'\\xd6',\n'ouml;':'\\xf6',\n'ovbar;':'\\u233d',\n'OverBar;':'\\u203e',\n'OverBrace;':'\\u23de',\n'OverBracket;':'\\u23b4',\n'OverParenthesis;':'\\u23dc',\n'par;':'\\u2225',\n'para':'\\xb6',\n'para;':'\\xb6',\n'parallel;':'\\u2225',\n'parsim;':'\\u2af3',\n'parsl;':'\\u2afd',\n'part;':'\\u2202',\n'PartialD;':'\\u2202',\n'Pcy;':'\\u041f',\n'pcy;':'\\u043f',\n'percnt;':'%',\n'period;':'.',\n'permil;':'\\u2030',\n'perp;':'\\u22a5',\n'pertenk;':'\\u2031',\n'Pfr;':'\\U0001d513',\n'pfr;':'\\U0001d52d',\n'Phi;':'\\u03a6',\n'phi;':'\\u03c6',\n'phiv;':'\\u03d5',\n'phmmat;':'\\u2133',\n'phone;':'\\u260e',\n'Pi;':'\\u03a0',\n'pi;':'\\u03c0',\n'pitchfork;':'\\u22d4',\n'piv;':'\\u03d6',\n'planck;':'\\u210f',\n'planckh;':'\\u210e',\n'plankv;':'\\u210f',\n'plus;':'+',\n'plusacir;':'\\u2a23',\n'plusb;':'\\u229e',\n'pluscir;':'\\u2a22',\n'plusdo;':'\\u2214',\n'plusdu;':'\\u2a25',\n'pluse;':'\\u2a72',\n'PlusMinus;':'\\xb1',\n'plusmn':'\\xb1',\n'plusmn;':'\\xb1',\n'plussim;':'\\u2a26',\n'plustwo;':'\\u2a27',\n'pm;':'\\xb1',\n'Poincareplane;':'\\u210c',\n'pointint;':'\\u2a15',\n'Popf;':'\\u2119',\n'popf;':'\\U0001d561',\n'pound':'\\xa3',\n'pound;':'\\xa3',\n'Pr;':'\\u2abb',\n'pr;':'\\u227a',\n'prap;':'\\u2ab7',\n'prcue;':'\\u227c',\n'prE;':'\\u2ab3',\n'pre;':'\\u2aaf',\n'prec;':'\\u227a',\n'precapprox;':'\\u2ab7',\n'preccurlyeq;':'\\u227c',\n'Precedes;':'\\u227a',\n'PrecedesEqual;':'\\u2aaf',\n'PrecedesSlantEqual;':'\\u227c',\n'PrecedesTilde;':'\\u227e',\n'preceq;':'\\u2aaf',\n'precnapprox;':'\\u2ab9',\n'precneqq;':'\\u2ab5',\n'precnsim;':'\\u22e8',\n'precsim;':'\\u227e',\n'Prime;':'\\u2033',\n'prime;':'\\u2032',\n'primes;':'\\u2119',\n'prnap;':'\\u2ab9',\n'prnE;':'\\u2ab5',\n'prnsim;':'\\u22e8',\n'prod;':'\\u220f',\n'Product;':'\\u220f',\n'profalar;':'\\u232e',\n'profline;':'\\u2312',\n'profsurf;':'\\u2313',\n'prop;':'\\u221d',\n'Proportion;':'\\u2237',\n'Proportional;':'\\u221d',\n'propto;':'\\u221d',\n'prsim;':'\\u227e',\n'prurel;':'\\u22b0',\n'Pscr;':'\\U0001d4ab',\n'pscr;':'\\U0001d4c5',\n'Psi;':'\\u03a8',\n'psi;':'\\u03c8',\n'puncsp;':'\\u2008',\n'Qfr;':'\\U0001d514',\n'qfr;':'\\U0001d52e',\n'qint;':'\\u2a0c',\n'Qopf;':'\\u211a',\n'qopf;':'\\U0001d562',\n'qprime;':'\\u2057',\n'Qscr;':'\\U0001d4ac',\n'qscr;':'\\U0001d4c6',\n'quaternions;':'\\u210d',\n'quatint;':'\\u2a16',\n'quest;':'?',\n'questeq;':'\\u225f',\n'QUOT':'\"',\n'quot':'\"',\n'QUOT;':'\"',\n'quot;':'\"',\n'rAarr;':'\\u21db',\n'race;':'\\u223d\\u0331',\n'Racute;':'\\u0154',\n'racute;':'\\u0155',\n'radic;':'\\u221a',\n'raemptyv;':'\\u29b3',\n'Rang;':'\\u27eb',\n'rang;':'\\u27e9',\n'rangd;':'\\u2992',\n'range;':'\\u29a5',\n'rangle;':'\\u27e9',\n'raquo':'\\xbb',\n'raquo;':'\\xbb',\n'Rarr;':'\\u21a0',\n'rArr;':'\\u21d2',\n'rarr;':'\\u2192',\n'rarrap;':'\\u2975',\n'rarrb;':'\\u21e5',\n'rarrbfs;':'\\u2920',\n'rarrc;':'\\u2933',\n'rarrfs;':'\\u291e',\n'rarrhk;':'\\u21aa',\n'rarrlp;':'\\u21ac',\n'rarrpl;':'\\u2945',\n'rarrsim;':'\\u2974',\n'Rarrtl;':'\\u2916',\n'rarrtl;':'\\u21a3',\n'rarrw;':'\\u219d',\n'rAtail;':'\\u291c',\n'ratail;':'\\u291a',\n'ratio;':'\\u2236',\n'rationals;':'\\u211a',\n'RBarr;':'\\u2910',\n'rBarr;':'\\u290f',\n'rbarr;':'\\u290d',\n'rbbrk;':'\\u2773',\n'rbrace;':'}',\n'rbrack;':']',\n'rbrke;':'\\u298c',\n'rbrksld;':'\\u298e',\n'rbrkslu;':'\\u2990',\n'Rcaron;':'\\u0158',\n'rcaron;':'\\u0159',\n'Rcedil;':'\\u0156',\n'rcedil;':'\\u0157',\n'rceil;':'\\u2309',\n'rcub;':'}',\n'Rcy;':'\\u0420',\n'rcy;':'\\u0440',\n'rdca;':'\\u2937',\n'rdldhar;':'\\u2969',\n'rdquo;':'\\u201d',\n'rdquor;':'\\u201d',\n'rdsh;':'\\u21b3',\n'Re;':'\\u211c',\n'real;':'\\u211c',\n'realine;':'\\u211b',\n'realpart;':'\\u211c',\n'reals;':'\\u211d',\n'rect;':'\\u25ad',\n'REG':'\\xae',\n'reg':'\\xae',\n'REG;':'\\xae',\n'reg;':'\\xae',\n'ReverseElement;':'\\u220b',\n'ReverseEquilibrium;':'\\u21cb',\n'ReverseUpEquilibrium;':'\\u296f',\n'rfisht;':'\\u297d',\n'rfloor;':'\\u230b',\n'Rfr;':'\\u211c',\n'rfr;':'\\U0001d52f',\n'rHar;':'\\u2964',\n'rhard;':'\\u21c1',\n'rharu;':'\\u21c0',\n'rharul;':'\\u296c',\n'Rho;':'\\u03a1',\n'rho;':'\\u03c1',\n'rhov;':'\\u03f1',\n'RightAngleBracket;':'\\u27e9',\n'RightArrow;':'\\u2192',\n'Rightarrow;':'\\u21d2',\n'rightarrow;':'\\u2192',\n'RightArrowBar;':'\\u21e5',\n'RightArrowLeftArrow;':'\\u21c4',\n'rightarrowtail;':'\\u21a3',\n'RightCeiling;':'\\u2309',\n'RightDoubleBracket;':'\\u27e7',\n'RightDownTeeVector;':'\\u295d',\n'RightDownVector;':'\\u21c2',\n'RightDownVectorBar;':'\\u2955',\n'RightFloor;':'\\u230b',\n'rightharpoondown;':'\\u21c1',\n'rightharpoonup;':'\\u21c0',\n'rightleftarrows;':'\\u21c4',\n'rightleftharpoons;':'\\u21cc',\n'rightrightarrows;':'\\u21c9',\n'rightsquigarrow;':'\\u219d',\n'RightTee;':'\\u22a2',\n'RightTeeArrow;':'\\u21a6',\n'RightTeeVector;':'\\u295b',\n'rightthreetimes;':'\\u22cc',\n'RightTriangle;':'\\u22b3',\n'RightTriangleBar;':'\\u29d0',\n'RightTriangleEqual;':'\\u22b5',\n'RightUpDownVector;':'\\u294f',\n'RightUpTeeVector;':'\\u295c',\n'RightUpVector;':'\\u21be',\n'RightUpVectorBar;':'\\u2954',\n'RightVector;':'\\u21c0',\n'RightVectorBar;':'\\u2953',\n'ring;':'\\u02da',\n'risingdotseq;':'\\u2253',\n'rlarr;':'\\u21c4',\n'rlhar;':'\\u21cc',\n'rlm;':'\\u200f',\n'rmoust;':'\\u23b1',\n'rmoustache;':'\\u23b1',\n'rnmid;':'\\u2aee',\n'roang;':'\\u27ed',\n'roarr;':'\\u21fe',\n'robrk;':'\\u27e7',\n'ropar;':'\\u2986',\n'Ropf;':'\\u211d',\n'ropf;':'\\U0001d563',\n'roplus;':'\\u2a2e',\n'rotimes;':'\\u2a35',\n'RoundImplies;':'\\u2970',\n'rpar;':')',\n'rpargt;':'\\u2994',\n'rppolint;':'\\u2a12',\n'rrarr;':'\\u21c9',\n'Rrightarrow;':'\\u21db',\n'rsaquo;':'\\u203a',\n'Rscr;':'\\u211b',\n'rscr;':'\\U0001d4c7',\n'Rsh;':'\\u21b1',\n'rsh;':'\\u21b1',\n'rsqb;':']',\n'rsquo;':'\\u2019',\n'rsquor;':'\\u2019',\n'rthree;':'\\u22cc',\n'rtimes;':'\\u22ca',\n'rtri;':'\\u25b9',\n'rtrie;':'\\u22b5',\n'rtrif;':'\\u25b8',\n'rtriltri;':'\\u29ce',\n'RuleDelayed;':'\\u29f4',\n'ruluhar;':'\\u2968',\n'rx;':'\\u211e',\n'Sacute;':'\\u015a',\n'sacute;':'\\u015b',\n'sbquo;':'\\u201a',\n'Sc;':'\\u2abc',\n'sc;':'\\u227b',\n'scap;':'\\u2ab8',\n'Scaron;':'\\u0160',\n'scaron;':'\\u0161',\n'sccue;':'\\u227d',\n'scE;':'\\u2ab4',\n'sce;':'\\u2ab0',\n'Scedil;':'\\u015e',\n'scedil;':'\\u015f',\n'Scirc;':'\\u015c',\n'scirc;':'\\u015d',\n'scnap;':'\\u2aba',\n'scnE;':'\\u2ab6',\n'scnsim;':'\\u22e9',\n'scpolint;':'\\u2a13',\n'scsim;':'\\u227f',\n'Scy;':'\\u0421',\n'scy;':'\\u0441',\n'sdot;':'\\u22c5',\n'sdotb;':'\\u22a1',\n'sdote;':'\\u2a66',\n'searhk;':'\\u2925',\n'seArr;':'\\u21d8',\n'searr;':'\\u2198',\n'searrow;':'\\u2198',\n'sect':'\\xa7',\n'sect;':'\\xa7',\n'semi;':';',\n'seswar;':'\\u2929',\n'setminus;':'\\u2216',\n'setmn;':'\\u2216',\n'sext;':'\\u2736',\n'Sfr;':'\\U0001d516',\n'sfr;':'\\U0001d530',\n'sfrown;':'\\u2322',\n'sharp;':'\\u266f',\n'SHCHcy;':'\\u0429',\n'shchcy;':'\\u0449',\n'SHcy;':'\\u0428',\n'shcy;':'\\u0448',\n'ShortDownArrow;':'\\u2193',\n'ShortLeftArrow;':'\\u2190',\n'shortmid;':'\\u2223',\n'shortparallel;':'\\u2225',\n'ShortRightArrow;':'\\u2192',\n'ShortUpArrow;':'\\u2191',\n'shy':'\\xad',\n'shy;':'\\xad',\n'Sigma;':'\\u03a3',\n'sigma;':'\\u03c3',\n'sigmaf;':'\\u03c2',\n'sigmav;':'\\u03c2',\n'sim;':'\\u223c',\n'simdot;':'\\u2a6a',\n'sime;':'\\u2243',\n'simeq;':'\\u2243',\n'simg;':'\\u2a9e',\n'simgE;':'\\u2aa0',\n'siml;':'\\u2a9d',\n'simlE;':'\\u2a9f',\n'simne;':'\\u2246',\n'simplus;':'\\u2a24',\n'simrarr;':'\\u2972',\n'slarr;':'\\u2190',\n'SmallCircle;':'\\u2218',\n'smallsetminus;':'\\u2216',\n'smashp;':'\\u2a33',\n'smeparsl;':'\\u29e4',\n'smid;':'\\u2223',\n'smile;':'\\u2323',\n'smt;':'\\u2aaa',\n'smte;':'\\u2aac',\n'smtes;':'\\u2aac\\ufe00',\n'SOFTcy;':'\\u042c',\n'softcy;':'\\u044c',\n'sol;':'/',\n'solb;':'\\u29c4',\n'solbar;':'\\u233f',\n'Sopf;':'\\U0001d54a',\n'sopf;':'\\U0001d564',\n'spades;':'\\u2660',\n'spadesuit;':'\\u2660',\n'spar;':'\\u2225',\n'sqcap;':'\\u2293',\n'sqcaps;':'\\u2293\\ufe00',\n'sqcup;':'\\u2294',\n'sqcups;':'\\u2294\\ufe00',\n'Sqrt;':'\\u221a',\n'sqsub;':'\\u228f',\n'sqsube;':'\\u2291',\n'sqsubset;':'\\u228f',\n'sqsubseteq;':'\\u2291',\n'sqsup;':'\\u2290',\n'sqsupe;':'\\u2292',\n'sqsupset;':'\\u2290',\n'sqsupseteq;':'\\u2292',\n'squ;':'\\u25a1',\n'Square;':'\\u25a1',\n'square;':'\\u25a1',\n'SquareIntersection;':'\\u2293',\n'SquareSubset;':'\\u228f',\n'SquareSubsetEqual;':'\\u2291',\n'SquareSuperset;':'\\u2290',\n'SquareSupersetEqual;':'\\u2292',\n'SquareUnion;':'\\u2294',\n'squarf;':'\\u25aa',\n'squf;':'\\u25aa',\n'srarr;':'\\u2192',\n'Sscr;':'\\U0001d4ae',\n'sscr;':'\\U0001d4c8',\n'ssetmn;':'\\u2216',\n'ssmile;':'\\u2323',\n'sstarf;':'\\u22c6',\n'Star;':'\\u22c6',\n'star;':'\\u2606',\n'starf;':'\\u2605',\n'straightepsilon;':'\\u03f5',\n'straightphi;':'\\u03d5',\n'strns;':'\\xaf',\n'Sub;':'\\u22d0',\n'sub;':'\\u2282',\n'subdot;':'\\u2abd',\n'subE;':'\\u2ac5',\n'sube;':'\\u2286',\n'subedot;':'\\u2ac3',\n'submult;':'\\u2ac1',\n'subnE;':'\\u2acb',\n'subne;':'\\u228a',\n'subplus;':'\\u2abf',\n'subrarr;':'\\u2979',\n'Subset;':'\\u22d0',\n'subset;':'\\u2282',\n'subseteq;':'\\u2286',\n'subseteqq;':'\\u2ac5',\n'SubsetEqual;':'\\u2286',\n'subsetneq;':'\\u228a',\n'subsetneqq;':'\\u2acb',\n'subsim;':'\\u2ac7',\n'subsub;':'\\u2ad5',\n'subsup;':'\\u2ad3',\n'succ;':'\\u227b',\n'succapprox;':'\\u2ab8',\n'succcurlyeq;':'\\u227d',\n'Succeeds;':'\\u227b',\n'SucceedsEqual;':'\\u2ab0',\n'SucceedsSlantEqual;':'\\u227d',\n'SucceedsTilde;':'\\u227f',\n'succeq;':'\\u2ab0',\n'succnapprox;':'\\u2aba',\n'succneqq;':'\\u2ab6',\n'succnsim;':'\\u22e9',\n'succsim;':'\\u227f',\n'SuchThat;':'\\u220b',\n'Sum;':'\\u2211',\n'sum;':'\\u2211',\n'sung;':'\\u266a',\n'sup1':'\\xb9',\n'sup1;':'\\xb9',\n'sup2':'\\xb2',\n'sup2;':'\\xb2',\n'sup3':'\\xb3',\n'sup3;':'\\xb3',\n'Sup;':'\\u22d1',\n'sup;':'\\u2283',\n'supdot;':'\\u2abe',\n'supdsub;':'\\u2ad8',\n'supE;':'\\u2ac6',\n'supe;':'\\u2287',\n'supedot;':'\\u2ac4',\n'Superset;':'\\u2283',\n'SupersetEqual;':'\\u2287',\n'suphsol;':'\\u27c9',\n'suphsub;':'\\u2ad7',\n'suplarr;':'\\u297b',\n'supmult;':'\\u2ac2',\n'supnE;':'\\u2acc',\n'supne;':'\\u228b',\n'supplus;':'\\u2ac0',\n'Supset;':'\\u22d1',\n'supset;':'\\u2283',\n'supseteq;':'\\u2287',\n'supseteqq;':'\\u2ac6',\n'supsetneq;':'\\u228b',\n'supsetneqq;':'\\u2acc',\n'supsim;':'\\u2ac8',\n'supsub;':'\\u2ad4',\n'supsup;':'\\u2ad6',\n'swarhk;':'\\u2926',\n'swArr;':'\\u21d9',\n'swarr;':'\\u2199',\n'swarrow;':'\\u2199',\n'swnwar;':'\\u292a',\n'szlig':'\\xdf',\n'szlig;':'\\xdf',\n'Tab;':'\\t',\n'target;':'\\u2316',\n'Tau;':'\\u03a4',\n'tau;':'\\u03c4',\n'tbrk;':'\\u23b4',\n'Tcaron;':'\\u0164',\n'tcaron;':'\\u0165',\n'Tcedil;':'\\u0162',\n'tcedil;':'\\u0163',\n'Tcy;':'\\u0422',\n'tcy;':'\\u0442',\n'tdot;':'\\u20db',\n'telrec;':'\\u2315',\n'Tfr;':'\\U0001d517',\n'tfr;':'\\U0001d531',\n'there4;':'\\u2234',\n'Therefore;':'\\u2234',\n'therefore;':'\\u2234',\n'Theta;':'\\u0398',\n'theta;':'\\u03b8',\n'thetasym;':'\\u03d1',\n'thetav;':'\\u03d1',\n'thickapprox;':'\\u2248',\n'thicksim;':'\\u223c',\n'ThickSpace;':'\\u205f\\u200a',\n'thinsp;':'\\u2009',\n'ThinSpace;':'\\u2009',\n'thkap;':'\\u2248',\n'thksim;':'\\u223c',\n'THORN':'\\xde',\n'thorn':'\\xfe',\n'THORN;':'\\xde',\n'thorn;':'\\xfe',\n'Tilde;':'\\u223c',\n'tilde;':'\\u02dc',\n'TildeEqual;':'\\u2243',\n'TildeFullEqual;':'\\u2245',\n'TildeTilde;':'\\u2248',\n'times':'\\xd7',\n'times;':'\\xd7',\n'timesb;':'\\u22a0',\n'timesbar;':'\\u2a31',\n'timesd;':'\\u2a30',\n'tint;':'\\u222d',\n'toea;':'\\u2928',\n'top;':'\\u22a4',\n'topbot;':'\\u2336',\n'topcir;':'\\u2af1',\n'Topf;':'\\U0001d54b',\n'topf;':'\\U0001d565',\n'topfork;':'\\u2ada',\n'tosa;':'\\u2929',\n'tprime;':'\\u2034',\n'TRADE;':'\\u2122',\n'trade;':'\\u2122',\n'triangle;':'\\u25b5',\n'triangledown;':'\\u25bf',\n'triangleleft;':'\\u25c3',\n'trianglelefteq;':'\\u22b4',\n'triangleq;':'\\u225c',\n'triangleright;':'\\u25b9',\n'trianglerighteq;':'\\u22b5',\n'tridot;':'\\u25ec',\n'trie;':'\\u225c',\n'triminus;':'\\u2a3a',\n'TripleDot;':'\\u20db',\n'triplus;':'\\u2a39',\n'trisb;':'\\u29cd',\n'tritime;':'\\u2a3b',\n'trpezium;':'\\u23e2',\n'Tscr;':'\\U0001d4af',\n'tscr;':'\\U0001d4c9',\n'TScy;':'\\u0426',\n'tscy;':'\\u0446',\n'TSHcy;':'\\u040b',\n'tshcy;':'\\u045b',\n'Tstrok;':'\\u0166',\n'tstrok;':'\\u0167',\n'twixt;':'\\u226c',\n'twoheadleftarrow;':'\\u219e',\n'twoheadrightarrow;':'\\u21a0',\n'Uacute':'\\xda',\n'uacute':'\\xfa',\n'Uacute;':'\\xda',\n'uacute;':'\\xfa',\n'Uarr;':'\\u219f',\n'uArr;':'\\u21d1',\n'uarr;':'\\u2191',\n'Uarrocir;':'\\u2949',\n'Ubrcy;':'\\u040e',\n'ubrcy;':'\\u045e',\n'Ubreve;':'\\u016c',\n'ubreve;':'\\u016d',\n'Ucirc':'\\xdb',\n'ucirc':'\\xfb',\n'Ucirc;':'\\xdb',\n'ucirc;':'\\xfb',\n'Ucy;':'\\u0423',\n'ucy;':'\\u0443',\n'udarr;':'\\u21c5',\n'Udblac;':'\\u0170',\n'udblac;':'\\u0171',\n'udhar;':'\\u296e',\n'ufisht;':'\\u297e',\n'Ufr;':'\\U0001d518',\n'ufr;':'\\U0001d532',\n'Ugrave':'\\xd9',\n'ugrave':'\\xf9',\n'Ugrave;':'\\xd9',\n'ugrave;':'\\xf9',\n'uHar;':'\\u2963',\n'uharl;':'\\u21bf',\n'uharr;':'\\u21be',\n'uhblk;':'\\u2580',\n'ulcorn;':'\\u231c',\n'ulcorner;':'\\u231c',\n'ulcrop;':'\\u230f',\n'ultri;':'\\u25f8',\n'Umacr;':'\\u016a',\n'umacr;':'\\u016b',\n'uml':'\\xa8',\n'uml;':'\\xa8',\n'UnderBar;':'_',\n'UnderBrace;':'\\u23df',\n'UnderBracket;':'\\u23b5',\n'UnderParenthesis;':'\\u23dd',\n'Union;':'\\u22c3',\n'UnionPlus;':'\\u228e',\n'Uogon;':'\\u0172',\n'uogon;':'\\u0173',\n'Uopf;':'\\U0001d54c',\n'uopf;':'\\U0001d566',\n'UpArrow;':'\\u2191',\n'Uparrow;':'\\u21d1',\n'uparrow;':'\\u2191',\n'UpArrowBar;':'\\u2912',\n'UpArrowDownArrow;':'\\u21c5',\n'UpDownArrow;':'\\u2195',\n'Updownarrow;':'\\u21d5',\n'updownarrow;':'\\u2195',\n'UpEquilibrium;':'\\u296e',\n'upharpoonleft;':'\\u21bf',\n'upharpoonright;':'\\u21be',\n'uplus;':'\\u228e',\n'UpperLeftArrow;':'\\u2196',\n'UpperRightArrow;':'\\u2197',\n'Upsi;':'\\u03d2',\n'upsi;':'\\u03c5',\n'upsih;':'\\u03d2',\n'Upsilon;':'\\u03a5',\n'upsilon;':'\\u03c5',\n'UpTee;':'\\u22a5',\n'UpTeeArrow;':'\\u21a5',\n'upuparrows;':'\\u21c8',\n'urcorn;':'\\u231d',\n'urcorner;':'\\u231d',\n'urcrop;':'\\u230e',\n'Uring;':'\\u016e',\n'uring;':'\\u016f',\n'urtri;':'\\u25f9',\n'Uscr;':'\\U0001d4b0',\n'uscr;':'\\U0001d4ca',\n'utdot;':'\\u22f0',\n'Utilde;':'\\u0168',\n'utilde;':'\\u0169',\n'utri;':'\\u25b5',\n'utrif;':'\\u25b4',\n'uuarr;':'\\u21c8',\n'Uuml':'\\xdc',\n'uuml':'\\xfc',\n'Uuml;':'\\xdc',\n'uuml;':'\\xfc',\n'uwangle;':'\\u29a7',\n'vangrt;':'\\u299c',\n'varepsilon;':'\\u03f5',\n'varkappa;':'\\u03f0',\n'varnothing;':'\\u2205',\n'varphi;':'\\u03d5',\n'varpi;':'\\u03d6',\n'varpropto;':'\\u221d',\n'vArr;':'\\u21d5',\n'varr;':'\\u2195',\n'varrho;':'\\u03f1',\n'varsigma;':'\\u03c2',\n'varsubsetneq;':'\\u228a\\ufe00',\n'varsubsetneqq;':'\\u2acb\\ufe00',\n'varsupsetneq;':'\\u228b\\ufe00',\n'varsupsetneqq;':'\\u2acc\\ufe00',\n'vartheta;':'\\u03d1',\n'vartriangleleft;':'\\u22b2',\n'vartriangleright;':'\\u22b3',\n'Vbar;':'\\u2aeb',\n'vBar;':'\\u2ae8',\n'vBarv;':'\\u2ae9',\n'Vcy;':'\\u0412',\n'vcy;':'\\u0432',\n'VDash;':'\\u22ab',\n'Vdash;':'\\u22a9',\n'vDash;':'\\u22a8',\n'vdash;':'\\u22a2',\n'Vdashl;':'\\u2ae6',\n'Vee;':'\\u22c1',\n'vee;':'\\u2228',\n'veebar;':'\\u22bb',\n'veeeq;':'\\u225a',\n'vellip;':'\\u22ee',\n'Verbar;':'\\u2016',\n'verbar;':'|',\n'Vert;':'\\u2016',\n'vert;':'|',\n'VerticalBar;':'\\u2223',\n'VerticalLine;':'|',\n'VerticalSeparator;':'\\u2758',\n'VerticalTilde;':'\\u2240',\n'VeryThinSpace;':'\\u200a',\n'Vfr;':'\\U0001d519',\n'vfr;':'\\U0001d533',\n'vltri;':'\\u22b2',\n'vnsub;':'\\u2282\\u20d2',\n'vnsup;':'\\u2283\\u20d2',\n'Vopf;':'\\U0001d54d',\n'vopf;':'\\U0001d567',\n'vprop;':'\\u221d',\n'vrtri;':'\\u22b3',\n'Vscr;':'\\U0001d4b1',\n'vscr;':'\\U0001d4cb',\n'vsubnE;':'\\u2acb\\ufe00',\n'vsubne;':'\\u228a\\ufe00',\n'vsupnE;':'\\u2acc\\ufe00',\n'vsupne;':'\\u228b\\ufe00',\n'Vvdash;':'\\u22aa',\n'vzigzag;':'\\u299a',\n'Wcirc;':'\\u0174',\n'wcirc;':'\\u0175',\n'wedbar;':'\\u2a5f',\n'Wedge;':'\\u22c0',\n'wedge;':'\\u2227',\n'wedgeq;':'\\u2259',\n'weierp;':'\\u2118',\n'Wfr;':'\\U0001d51a',\n'wfr;':'\\U0001d534',\n'Wopf;':'\\U0001d54e',\n'wopf;':'\\U0001d568',\n'wp;':'\\u2118',\n'wr;':'\\u2240',\n'wreath;':'\\u2240',\n'Wscr;':'\\U0001d4b2',\n'wscr;':'\\U0001d4cc',\n'xcap;':'\\u22c2',\n'xcirc;':'\\u25ef',\n'xcup;':'\\u22c3',\n'xdtri;':'\\u25bd',\n'Xfr;':'\\U0001d51b',\n'xfr;':'\\U0001d535',\n'xhArr;':'\\u27fa',\n'xharr;':'\\u27f7',\n'Xi;':'\\u039e',\n'xi;':'\\u03be',\n'xlArr;':'\\u27f8',\n'xlarr;':'\\u27f5',\n'xmap;':'\\u27fc',\n'xnis;':'\\u22fb',\n'xodot;':'\\u2a00',\n'Xopf;':'\\U0001d54f',\n'xopf;':'\\U0001d569',\n'xoplus;':'\\u2a01',\n'xotime;':'\\u2a02',\n'xrArr;':'\\u27f9',\n'xrarr;':'\\u27f6',\n'Xscr;':'\\U0001d4b3',\n'xscr;':'\\U0001d4cd',\n'xsqcup;':'\\u2a06',\n'xuplus;':'\\u2a04',\n'xutri;':'\\u25b3',\n'xvee;':'\\u22c1',\n'xwedge;':'\\u22c0',\n'Yacute':'\\xdd',\n'yacute':'\\xfd',\n'Yacute;':'\\xdd',\n'yacute;':'\\xfd',\n'YAcy;':'\\u042f',\n'yacy;':'\\u044f',\n'Ycirc;':'\\u0176',\n'ycirc;':'\\u0177',\n'Ycy;':'\\u042b',\n'ycy;':'\\u044b',\n'yen':'\\xa5',\n'yen;':'\\xa5',\n'Yfr;':'\\U0001d51c',\n'yfr;':'\\U0001d536',\n'YIcy;':'\\u0407',\n'yicy;':'\\u0457',\n'Yopf;':'\\U0001d550',\n'yopf;':'\\U0001d56a',\n'Yscr;':'\\U0001d4b4',\n'yscr;':'\\U0001d4ce',\n'YUcy;':'\\u042e',\n'yucy;':'\\u044e',\n'yuml':'\\xff',\n'Yuml;':'\\u0178',\n'yuml;':'\\xff',\n'Zacute;':'\\u0179',\n'zacute;':'\\u017a',\n'Zcaron;':'\\u017d',\n'zcaron;':'\\u017e',\n'Zcy;':'\\u0417',\n'zcy;':'\\u0437',\n'Zdot;':'\\u017b',\n'zdot;':'\\u017c',\n'zeetrf;':'\\u2128',\n'ZeroWidthSpace;':'\\u200b',\n'Zeta;':'\\u0396',\n'zeta;':'\\u03b6',\n'Zfr;':'\\u2128',\n'zfr;':'\\U0001d537',\n'ZHcy;':'\\u0416',\n'zhcy;':'\\u0436',\n'zigrarr;':'\\u21dd',\n'Zopf;':'\\u2124',\n'zopf;':'\\U0001d56b',\n'Zscr;':'\\U0001d4b5',\n'zscr;':'\\U0001d4cf',\n'zwj;':'\\u200d',\n'zwnj;':'\\u200c',\n}\n\n\ncodepoint2name={}\n\n\n\nentitydefs={}\n\nfor (name,codepoint)in name2codepoint.items():\n codepoint2name[codepoint]=name\n entitydefs[name]=chr(codepoint)\n \ndel name,codepoint\n"], "browser.local_storage": [".py", "\nimport sys\nfrom javascript import JSObject\nfrom browser import window,console\n\nhas_local_storage=hasattr(window,'localStorage')\n\nclass __UnProvided():\n pass\n \nclass LocalStorage():\n storage_type=\"local_storage\"\n \n def __init__(self):\n if not has_local_storage:\n raise EnvironmentError(\"LocalStorage not available\")\n self.store=JSObject(window.localStorage)\n \n def __delitem__(self,key):\n if (not isinstance(key,str)):\n raise TypeError(\"key must be string\")\n if key not in self:\n raise KeyError(key)\n self.store.removeItem(key)\n \n def __getitem__(self,key):\n if (not isinstance(key,str)):\n raise TypeError(\"key must be string\")\n res=__BRYTHON__.JSObject(self.store.getItem(key))\n if res is not None :\n return res\n raise KeyError(key)\n \n def __setitem__(self,key,value):\n if (not isinstance(key,str)):\n raise TypeError(\"key must be string\")\n if (not isinstance(value,str)):\n raise TypeError(\"value must be string\")\n self.store.setItem(key,value)\n \n \n def __contains__(self,key):\n if (not isinstance(key,str)):\n raise TypeError(\"key must be string\")\n res=__BRYTHON__.JSObject(self.store.getItem(key))\n if res is None :\n return False\n return True\n \n def __iter__(self):\n keys=self.keys()\n return keys.__iter__()\n \n def get(self,key,default=None ):\n if (not isinstance(key,str)):\n raise TypeError(\"key must be string\")\n return __BRYTHON__.JSObject(self.store.getItem(key))or default\n \n def pop(self,key,default=__UnProvided()):\n if (not isinstance(key,str)):\n raise TypeError(\"key must be string\")\n if type(default)is __UnProvided:\n ret=self.get(key)\n del self[key]\n return ret\n else :\n if key in self:\n ret=self.get(key)\n del self[key]\n return ret\n else :\n return default\n \n \n \n def keys(self):\n return [__BRYTHON__.JSObject(self.store.key(i))for i in range(self.store.length)]\n \n def values(self):\n return [__BRYTHON__.JSObject(self.__getitem__(k))for k in self.keys()]\n \n def items(self):\n return list(zip(self.keys(),self.values()))\n \n def clear(self):\n self.store.clear()\n \n def __len__(self):\n return self.store.length\n \nif has_local_storage:\n storage=LocalStorage()\n"], "gc": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDEBUG_COLLECTABLE=2\n\nDEBUG_LEAK=38\n\nDEBUG_SAVEALL=32\n\nDEBUG_STATS=1\n\nDEBUG_UNCOLLECTABLE=4\n\nclass __loader__:\n pass\n \ncallbacks=[]\n\ndef collect(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef disable(*args,**kw):\n ''\n\n \n pass\n \ndef enable(*args,**kw):\n ''\n\n \n pass\n \ngarbage=[]\n\ndef get_count(*args,**kw):\n ''\n\n \n pass\n \ndef get_debug(*args,**kw):\n ''\n\n \n pass\n \ndef get_objects(*args,**kw):\n ''\n\n\n \n pass\n \ndef get_referents(*args,**kw):\n ''\n pass\n \ndef get_referrers(*args,**kw):\n ''\n pass\n \ndef get_threshold(*args,**kw):\n ''\n\n \n pass\n \ndef is_tracked(*args,**kw):\n ''\n\n\n \n pass\n \ndef isenabled(*args,**kw):\n ''\n\n \n pass\n \ndef set_debug(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef set_threshold(*args,**kw):\n ''\n\n\n \n pass\n"], "encodings.cp864": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp864',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0025:0x066a,\n0x0080:0x00b0,\n0x0081:0x00b7,\n0x0082:0x2219,\n0x0083:0x221a,\n0x0084:0x2592,\n0x0085:0x2500,\n0x0086:0x2502,\n0x0087:0x253c,\n0x0088:0x2524,\n0x0089:0x252c,\n0x008a:0x251c,\n0x008b:0x2534,\n0x008c:0x2510,\n0x008d:0x250c,\n0x008e:0x2514,\n0x008f:0x2518,\n0x0090:0x03b2,\n0x0091:0x221e,\n0x0092:0x03c6,\n0x0093:0x00b1,\n0x0094:0x00bd,\n0x0095:0x00bc,\n0x0096:0x2248,\n0x0097:0x00ab,\n0x0098:0x00bb,\n0x0099:0xfef7,\n0x009a:0xfef8,\n0x009b:None ,\n0x009c:None ,\n0x009d:0xfefb,\n0x009e:0xfefc,\n0x009f:None ,\n0x00a1:0x00ad,\n0x00a2:0xfe82,\n0x00a5:0xfe84,\n0x00a6:None ,\n0x00a7:None ,\n0x00a8:0xfe8e,\n0x00a9:0xfe8f,\n0x00aa:0xfe95,\n0x00ab:0xfe99,\n0x00ac:0x060c,\n0x00ad:0xfe9d,\n0x00ae:0xfea1,\n0x00af:0xfea5,\n0x00b0:0x0660,\n0x00b1:0x0661,\n0x00b2:0x0662,\n0x00b3:0x0663,\n0x00b4:0x0664,\n0x00b5:0x0665,\n0x00b6:0x0666,\n0x00b7:0x0667,\n0x00b8:0x0668,\n0x00b9:0x0669,\n0x00ba:0xfed1,\n0x00bb:0x061b,\n0x00bc:0xfeb1,\n0x00bd:0xfeb5,\n0x00be:0xfeb9,\n0x00bf:0x061f,\n0x00c0:0x00a2,\n0x00c1:0xfe80,\n0x00c2:0xfe81,\n0x00c3:0xfe83,\n0x00c4:0xfe85,\n0x00c5:0xfeca,\n0x00c6:0xfe8b,\n0x00c7:0xfe8d,\n0x00c8:0xfe91,\n0x00c9:0xfe93,\n0x00ca:0xfe97,\n0x00cb:0xfe9b,\n0x00cc:0xfe9f,\n0x00cd:0xfea3,\n0x00ce:0xfea7,\n0x00cf:0xfea9,\n0x00d0:0xfeab,\n0x00d1:0xfead,\n0x00d2:0xfeaf,\n0x00d3:0xfeb3,\n0x00d4:0xfeb7,\n0x00d5:0xfebb,\n0x00d6:0xfebf,\n0x00d7:0xfec1,\n0x00d8:0xfec5,\n0x00d9:0xfecb,\n0x00da:0xfecf,\n0x00db:0x00a6,\n0x00dc:0x00ac,\n0x00dd:0x00f7,\n0x00de:0x00d7,\n0x00df:0xfec9,\n0x00e0:0x0640,\n0x00e1:0xfed3,\n0x00e2:0xfed7,\n0x00e3:0xfedb,\n0x00e4:0xfedf,\n0x00e5:0xfee3,\n0x00e6:0xfee7,\n0x00e7:0xfeeb,\n0x00e8:0xfeed,\n0x00e9:0xfeef,\n0x00ea:0xfef3,\n0x00eb:0xfebd,\n0x00ec:0xfecc,\n0x00ed:0xfece,\n0x00ee:0xfecd,\n0x00ef:0xfee1,\n0x00f0:0xfe7d,\n0x00f1:0x0651,\n0x00f2:0xfee5,\n0x00f3:0xfee9,\n0x00f4:0xfeec,\n0x00f5:0xfef0,\n0x00f6:0xfef2,\n0x00f7:0xfed0,\n0x00f8:0xfed5,\n0x00f9:0xfef5,\n0x00fa:0xfef6,\n0x00fb:0xfedd,\n0x00fc:0xfed9,\n0x00fd:0xfef1,\n0x00fe:0x25a0,\n0x00ff:None ,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'\\u066a'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xb0'\n'\\xb7'\n'\\u2219'\n'\\u221a'\n'\\u2592'\n'\\u2500'\n'\\u2502'\n'\\u253c'\n'\\u2524'\n'\\u252c'\n'\\u251c'\n'\\u2534'\n'\\u2510'\n'\\u250c'\n'\\u2514'\n'\\u2518'\n'\\u03b2'\n'\\u221e'\n'\\u03c6'\n'\\xb1'\n'\\xbd'\n'\\xbc'\n'\\u2248'\n'\\xab'\n'\\xbb'\n'\\ufef7'\n'\\ufef8'\n'\\ufffe'\n'\\ufffe'\n'\\ufefb'\n'\\ufefc'\n'\\ufffe'\n'\\xa0'\n'\\xad'\n'\\ufe82'\n'\\xa3'\n'\\xa4'\n'\\ufe84'\n'\\ufffe'\n'\\ufffe'\n'\\ufe8e'\n'\\ufe8f'\n'\\ufe95'\n'\\ufe99'\n'\\u060c'\n'\\ufe9d'\n'\\ufea1'\n'\\ufea5'\n'\\u0660'\n'\\u0661'\n'\\u0662'\n'\\u0663'\n'\\u0664'\n'\\u0665'\n'\\u0666'\n'\\u0667'\n'\\u0668'\n'\\u0669'\n'\\ufed1'\n'\\u061b'\n'\\ufeb1'\n'\\ufeb5'\n'\\ufeb9'\n'\\u061f'\n'\\xa2'\n'\\ufe80'\n'\\ufe81'\n'\\ufe83'\n'\\ufe85'\n'\\ufeca'\n'\\ufe8b'\n'\\ufe8d'\n'\\ufe91'\n'\\ufe93'\n'\\ufe97'\n'\\ufe9b'\n'\\ufe9f'\n'\\ufea3'\n'\\ufea7'\n'\\ufea9'\n'\\ufeab'\n'\\ufead'\n'\\ufeaf'\n'\\ufeb3'\n'\\ufeb7'\n'\\ufebb'\n'\\ufebf'\n'\\ufec1'\n'\\ufec5'\n'\\ufecb'\n'\\ufecf'\n'\\xa6'\n'\\xac'\n'\\xf7'\n'\\xd7'\n'\\ufec9'\n'\\u0640'\n'\\ufed3'\n'\\ufed7'\n'\\ufedb'\n'\\ufedf'\n'\\ufee3'\n'\\ufee7'\n'\\ufeeb'\n'\\ufeed'\n'\\ufeef'\n'\\ufef3'\n'\\ufebd'\n'\\ufecc'\n'\\ufece'\n'\\ufecd'\n'\\ufee1'\n'\\ufe7d'\n'\\u0651'\n'\\ufee5'\n'\\ufee9'\n'\\ufeec'\n'\\ufef0'\n'\\ufef2'\n'\\ufed0'\n'\\ufed5'\n'\\ufef5'\n'\\ufef6'\n'\\ufedd'\n'\\ufed9'\n'\\ufef1'\n'\\u25a0'\n'\\ufffe'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00a0,\n0x00a2:0x00c0,\n0x00a3:0x00a3,\n0x00a4:0x00a4,\n0x00a6:0x00db,\n0x00ab:0x0097,\n0x00ac:0x00dc,\n0x00ad:0x00a1,\n0x00b0:0x0080,\n0x00b1:0x0093,\n0x00b7:0x0081,\n0x00bb:0x0098,\n0x00bc:0x0095,\n0x00bd:0x0094,\n0x00d7:0x00de,\n0x00f7:0x00dd,\n0x03b2:0x0090,\n0x03c6:0x0092,\n0x060c:0x00ac,\n0x061b:0x00bb,\n0x061f:0x00bf,\n0x0640:0x00e0,\n0x0651:0x00f1,\n0x0660:0x00b0,\n0x0661:0x00b1,\n0x0662:0x00b2,\n0x0663:0x00b3,\n0x0664:0x00b4,\n0x0665:0x00b5,\n0x0666:0x00b6,\n0x0667:0x00b7,\n0x0668:0x00b8,\n0x0669:0x00b9,\n0x066a:0x0025,\n0x2219:0x0082,\n0x221a:0x0083,\n0x221e:0x0091,\n0x2248:0x0096,\n0x2500:0x0085,\n0x2502:0x0086,\n0x250c:0x008d,\n0x2510:0x008c,\n0x2514:0x008e,\n0x2518:0x008f,\n0x251c:0x008a,\n0x2524:0x0088,\n0x252c:0x0089,\n0x2534:0x008b,\n0x253c:0x0087,\n0x2592:0x0084,\n0x25a0:0x00fe,\n0xfe7d:0x00f0,\n0xfe80:0x00c1,\n0xfe81:0x00c2,\n0xfe82:0x00a2,\n0xfe83:0x00c3,\n0xfe84:0x00a5,\n0xfe85:0x00c4,\n0xfe8b:0x00c6,\n0xfe8d:0x00c7,\n0xfe8e:0x00a8,\n0xfe8f:0x00a9,\n0xfe91:0x00c8,\n0xfe93:0x00c9,\n0xfe95:0x00aa,\n0xfe97:0x00ca,\n0xfe99:0x00ab,\n0xfe9b:0x00cb,\n0xfe9d:0x00ad,\n0xfe9f:0x00cc,\n0xfea1:0x00ae,\n0xfea3:0x00cd,\n0xfea5:0x00af,\n0xfea7:0x00ce,\n0xfea9:0x00cf,\n0xfeab:0x00d0,\n0xfead:0x00d1,\n0xfeaf:0x00d2,\n0xfeb1:0x00bc,\n0xfeb3:0x00d3,\n0xfeb5:0x00bd,\n0xfeb7:0x00d4,\n0xfeb9:0x00be,\n0xfebb:0x00d5,\n0xfebd:0x00eb,\n0xfebf:0x00d6,\n0xfec1:0x00d7,\n0xfec5:0x00d8,\n0xfec9:0x00df,\n0xfeca:0x00c5,\n0xfecb:0x00d9,\n0xfecc:0x00ec,\n0xfecd:0x00ee,\n0xfece:0x00ed,\n0xfecf:0x00da,\n0xfed0:0x00f7,\n0xfed1:0x00ba,\n0xfed3:0x00e1,\n0xfed5:0x00f8,\n0xfed7:0x00e2,\n0xfed9:0x00fc,\n0xfedb:0x00e3,\n0xfedd:0x00fb,\n0xfedf:0x00e4,\n0xfee1:0x00ef,\n0xfee3:0x00e5,\n0xfee5:0x00f2,\n0xfee7:0x00e6,\n0xfee9:0x00f3,\n0xfeeb:0x00e7,\n0xfeec:0x00f4,\n0xfeed:0x00e8,\n0xfeef:0x00e9,\n0xfef0:0x00f5,\n0xfef1:0x00fd,\n0xfef2:0x00f6,\n0xfef3:0x00ea,\n0xfef5:0x00f9,\n0xfef6:0x00fa,\n0xfef7:0x0099,\n0xfef8:0x009a,\n0xfefb:0x009d,\n0xfefc:0x009e,\n}\n"], "reprlib": [".py", "''\n\n__all__=[\"Repr\",\"repr\",\"recursive_repr\"]\n\nimport builtins\nfrom itertools import islice\ntry :\n from _thread import get_ident\nexcept ImportError:\n from _dummy_thread import get_ident\n \ndef recursive_repr(fillvalue='...'):\n ''\n \n def decorating_function(user_function):\n repr_running=set()\n \n def wrapper(self):\n key=id(self),get_ident()\n if key in repr_running:\n return fillvalue\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n \n \n wrapper.__module__=getattr(user_function,'__module__')\n wrapper.__doc__=getattr(user_function,'__doc__')\n wrapper.__name__=getattr(user_function,'__name__')\n wrapper.__annotations__=getattr(user_function,'__annotations__',{})\n return wrapper\n \n return decorating_function\n \nclass Repr:\n\n def __init__(self):\n self.maxlevel=6\n self.maxtuple=6\n self.maxlist=6\n self.maxarray=5\n self.maxdict=4\n self.maxset=6\n self.maxfrozenset=6\n self.maxdeque=6\n self.maxstring=30\n self.maxlong=40\n self.maxother=30\n \n def repr(self,x):\n return self.repr1(x,self.maxlevel)\n \n def repr1(self,x,level):\n typename=type(x).__name__\n if' 'in typename:\n parts=typename.split()\n typename='_'.join(parts)\n if hasattr(self,'repr_'+typename):\n return getattr(self,'repr_'+typename)(x,level)\n else :\n return self.repr_instance(x,level)\n \n def _repr_iterable(self,x,level,left,right,maxiter,trail=''):\n n=len(x)\n if level <=0 and n:\n s='...'\n else :\n newlevel=level -1\n repr1=self.repr1\n pieces=[repr1(elem,newlevel)for elem in islice(x,maxiter)]\n if n >maxiter:pieces.append('...')\n s=', '.join(pieces)\n if n ==1 and trail:right=trail+right\n return'%s%s%s'%(left,s,right)\n \n def repr_tuple(self,x,level):\n return self._repr_iterable(x,level,'(',')',self.maxtuple,',')\n \n def repr_list(self,x,level):\n return self._repr_iterable(x,level,'[',']',self.maxlist)\n \n def repr_array(self,x,level):\n header=\"array('%s', [\"%x.typecode\n return self._repr_iterable(x,level,header,'])',self.maxarray)\n \n def repr_set(self,x,level):\n x=_possibly_sorted(x)\n return self._repr_iterable(x,level,'set([','])',self.maxset)\n \n def repr_frozenset(self,x,level):\n x=_possibly_sorted(x)\n return self._repr_iterable(x,level,'frozenset([','])',\n self.maxfrozenset)\n \n def repr_deque(self,x,level):\n return self._repr_iterable(x,level,'deque([','])',self.maxdeque)\n \n def repr_dict(self,x,level):\n n=len(x)\n if n ==0:return'{}'\n if level <=0:return'{...}'\n newlevel=level -1\n repr1=self.repr1\n pieces=[]\n for key in islice(_possibly_sorted(x),self.maxdict):\n keyrepr=repr1(key,newlevel)\n valrepr=repr1(x[key],newlevel)\n pieces.append('%s: %s'%(keyrepr,valrepr))\n if n >self.maxdict:pieces.append('...')\n s=', '.join(pieces)\n return'{%s}'%(s,)\n \n def repr_str(self,x,level):\n s=builtins.repr(x[:self.maxstring])\n if len(s)>self.maxstring:\n i=max(0,(self.maxstring -3)//2)\n j=max(0,self.maxstring -3 -i)\n s=builtins.repr(x[:i]+x[len(x)-j:])\n s=s[:i]+'...'+s[len(s)-j:]\n return s\n \n def repr_int(self,x,level):\n s=builtins.repr(x)\n if len(s)>self.maxlong:\n i=max(0,(self.maxlong -3)//2)\n j=max(0,self.maxlong -3 -i)\n s=s[:i]+'...'+s[len(s)-j:]\n return s\n \n def repr_instance(self,x,level):\n try :\n s=builtins.repr(x)\n \n \n except Exception:\n return'<%s instance at %x>'%(x.__class__.__name__,id(x))\n if len(s)>self.maxother:\n i=max(0,(self.maxother -3)//2)\n j=max(0,self.maxother -3 -i)\n s=s[:i]+'...'+s[len(s)-j:]\n return s\n \n \ndef _possibly_sorted(x):\n\n\n\n try :\n return sorted(x)\n except Exception:\n return list(x)\n \naRepr=Repr()\nrepr=aRepr.repr\n"], "xml.dom": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Node:\n ''\n __slots__=()\n \n \n \n \n \n \n \n \n ELEMENT_NODE=1\n ATTRIBUTE_NODE=2\n TEXT_NODE=3\n CDATA_SECTION_NODE=4\n ENTITY_REFERENCE_NODE=5\n ENTITY_NODE=6\n PROCESSING_INSTRUCTION_NODE=7\n COMMENT_NODE=8\n DOCUMENT_NODE=9\n DOCUMENT_TYPE_NODE=10\n DOCUMENT_FRAGMENT_NODE=11\n NOTATION_NODE=12\n \n \n \nINDEX_SIZE_ERR=1\nDOMSTRING_SIZE_ERR=2\nHIERARCHY_REQUEST_ERR=3\nWRONG_DOCUMENT_ERR=4\nINVALID_CHARACTER_ERR=5\nNO_DATA_ALLOWED_ERR=6\nNO_MODIFICATION_ALLOWED_ERR=7\nNOT_FOUND_ERR=8\nNOT_SUPPORTED_ERR=9\nINUSE_ATTRIBUTE_ERR=10\nINVALID_STATE_ERR=11\nSYNTAX_ERR=12\nINVALID_MODIFICATION_ERR=13\nNAMESPACE_ERR=14\nINVALID_ACCESS_ERR=15\nVALIDATION_ERR=16\n\n\nclass DOMException(Exception):\n ''\n \n \n def __init__(self,*args,**kw):\n if self.__class__ is DOMException:\n raise RuntimeError(\n \"DOMException should not be instantiated directly\")\n Exception.__init__(self,*args,**kw)\n \n def _get_code(self):\n return self.code\n \n \nclass IndexSizeErr(DOMException):\n code=INDEX_SIZE_ERR\n \nclass DomstringSizeErr(DOMException):\n code=DOMSTRING_SIZE_ERR\n \nclass HierarchyRequestErr(DOMException):\n code=HIERARCHY_REQUEST_ERR\n \nclass WrongDocumentErr(DOMException):\n code=WRONG_DOCUMENT_ERR\n \nclass InvalidCharacterErr(DOMException):\n code=INVALID_CHARACTER_ERR\n \nclass NoDataAllowedErr(DOMException):\n code=NO_DATA_ALLOWED_ERR\n \nclass NoModificationAllowedErr(DOMException):\n code=NO_MODIFICATION_ALLOWED_ERR\n \nclass NotFoundErr(DOMException):\n code=NOT_FOUND_ERR\n \nclass NotSupportedErr(DOMException):\n code=NOT_SUPPORTED_ERR\n \nclass InuseAttributeErr(DOMException):\n code=INUSE_ATTRIBUTE_ERR\n \nclass InvalidStateErr(DOMException):\n code=INVALID_STATE_ERR\n \nclass SyntaxErr(DOMException):\n code=SYNTAX_ERR\n \nclass InvalidModificationErr(DOMException):\n code=INVALID_MODIFICATION_ERR\n \nclass NamespaceErr(DOMException):\n code=NAMESPACE_ERR\n \nclass InvalidAccessErr(DOMException):\n code=INVALID_ACCESS_ERR\n \nclass ValidationErr(DOMException):\n code=VALIDATION_ERR\n \nclass UserDataHandler:\n ''\n \n \n \n NODE_CLONED=1\n NODE_IMPORTED=2\n NODE_DELETED=3\n NODE_RENAMED=4\n \nXML_NAMESPACE=\"http://www.w3.org/XML/1998/namespace\"\nXMLNS_NAMESPACE=\"http://www.w3.org/2000/xmlns/\"\nXHTML_NAMESPACE=\"http://www.w3.org/1999/xhtml\"\nEMPTY_NAMESPACE=None\nEMPTY_PREFIX=None\n\nfrom .domreg import getDOMImplementation,registerDOMImplementation\n", 1], "textwrap": [".py", "''\n\n\n\n\n\n\nimport re\n\n__all__=['TextWrapper','wrap','fill','dedent','indent']\n\n\n\n\n\n\n\n\n\n_whitespace='\\t\\n\\x0b\\x0c\\r '\n\nclass TextWrapper:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n unicode_whitespace_trans={}\n uspace=ord(' ')\n for x in _whitespace:\n unicode_whitespace_trans[ord(x)]=uspace\n \n \n \n \n \n \n \n wordsep_re=re.compile(\n r'(\\s+|'\n r'[^\\s\\w]*\\w+[^0-9\\W]-(?=\\w+[^0-9\\W])|'\n r'(?<=[\\w\\!\\\"\\'\\&\\.\\,\\?])-{2,}(?=\\w))')\n \n \n \n \n \n wordsep_simple_re=re.compile(r'(\\s+)')\n \n \n \n sentence_end_re=re.compile(r'[a-z]'\n r'[\\.\\!\\?]'\n r'[\\\"\\']?'\n r'\\Z')\n \n \n def __init__(self,\n width=70,\n initial_indent=\"\",\n subsequent_indent=\"\",\n expand_tabs=True ,\n replace_whitespace=True ,\n fix_sentence_endings=False ,\n break_long_words=True ,\n drop_whitespace=True ,\n break_on_hyphens=True ,\n tabsize=8):\n self.width=width\n self.initial_indent=initial_indent\n self.subsequent_indent=subsequent_indent\n self.expand_tabs=expand_tabs\n self.replace_whitespace=replace_whitespace\n self.fix_sentence_endings=fix_sentence_endings\n self.break_long_words=break_long_words\n self.drop_whitespace=drop_whitespace\n self.break_on_hyphens=break_on_hyphens\n self.tabsize=tabsize\n \n \n \n \n \n def _munge_whitespace(self,text):\n ''\n\n\n\n\n \n if self.expand_tabs:\n text=text.expandtabs(self.tabsize)\n if self.replace_whitespace:\n text=text.translate(self.unicode_whitespace_trans)\n return text\n \n \n def _split(self,text):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self.break_on_hyphens is True :\n chunks=self.wordsep_re.split(text)\n else :\n chunks=self.wordsep_simple_re.split(text)\n chunks=[c for c in chunks if c]\n return chunks\n \n def _fix_sentence_endings(self,chunks):\n ''\n\n\n\n\n\n\n \n i=0\n patsearch=self.sentence_end_re.search\n while i 0)\"%self.width)\n \n \n \n chunks.reverse()\n \n while chunks:\n \n \n \n cur_line=[]\n cur_len=0\n \n \n if lines:\n indent=self.subsequent_indent\n else :\n indent=self.initial_indent\n \n \n width=self.width -len(indent)\n \n \n \n if self.drop_whitespace and chunks[-1].strip()==''and lines:\n del chunks[-1]\n \n while chunks:\n l=len(chunks[-1])\n \n \n if cur_len+l <=width:\n cur_line.append(chunks.pop())\n cur_len +=l\n \n \n else :\n break\n \n \n \n if chunks and len(chunks[-1])>width:\n self._handle_long_word(chunks,cur_line,cur_len,width)\n \n \n if self.drop_whitespace and cur_line and cur_line[-1].strip()=='':\n del cur_line[-1]\n \n \n \n if cur_line:\n lines.append(indent+''.join(cur_line))\n \n return lines\n \n \n \n \n def wrap(self,text):\n ''\n\n\n\n\n\n\n \n text=self._munge_whitespace(text)\n chunks=self._split(text)\n if self.fix_sentence_endings:\n self._fix_sentence_endings(chunks)\n return self._wrap_chunks(chunks)\n \n def fill(self,text):\n ''\n\n\n\n\n \n return\"\\n\".join(self.wrap(text))\n \n \n \n \ndef wrap(text,width=70,**kwargs):\n ''\n\n\n\n\n\n\n\n \n w=TextWrapper(width=width,**kwargs)\n return w.wrap(text)\n \ndef fill(text,width=70,**kwargs):\n ''\n\n\n\n\n\n\n \n w=TextWrapper(width=width,**kwargs)\n return w.fill(text)\n \n \n \n \n_whitespace_only_re=re.compile('^[ \\t]+$',re.MULTILINE)\n_leading_whitespace_re=re.compile('(^[ \\t]*)(?:[^ \\t\\n])',re.MULTILINE)\n\ndef dedent(text):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n \n margin=None\n text=_whitespace_only_re.sub('',text)\n indents=_leading_whitespace_re.findall(text)\n for indent in indents:\n if margin is None :\n margin=indent\n \n \n \n elif indent.startswith(margin):\n pass\n \n \n \n elif margin.startswith(indent):\n margin=indent\n \n \n \n else :\n margin=\"\"\n break\n \n \n if 0 and margin:\n for line in text.split(\"\\n\"):\n assert not line or line.startswith(margin), \"line = %r, margin = %r\"%(line,margin)\n \n if margin:\n text=re.sub(r'(?m)^'+margin,'',text)\n return text\n \n \ndef indent(text,prefix,predicate=None ):\n ''\n\n\n\n\n\n \n if predicate is None :\n def predicate(line):\n return line.strip()\n \n def prefixed_lines():\n for line in text.splitlines(True ):\n yield (prefix+line if predicate(line)else line)\n return''.join(prefixed_lines())\n \n \nif __name__ ==\"__main__\":\n\n\n print(dedent(\"Hello there.\\n This is indented.\"))\n"], "pdb": [".py", "#! /usr/bin/env python3\n\n\"\"\"\nThe Python Debugger Pdb\n=======================\n\nTo use the debugger in its simplest form:\n\n >>> import pdb\n >>> pdb.run('')\n\nThe debugger's prompt is '(Pdb) '. This will stop in the first\nfunction call in .\n\nAlternatively, if a statement terminated with an unhandled exception,\nyou can use pdb's post-mortem facility to inspect the contents of the\ntraceback:\n\n >>> \n \n >>> import pdb\n >>> pdb.pm()\n\nThe commands recognized by the debugger are listed in the next\nsection. Most can be abbreviated as indicated; e.g., h(elp) means\nthat 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel',\nnor as 'H' or 'Help' or 'HELP'). Optional arguments are enclosed in\nsquare brackets. Alternatives in the command syntax are separated\nby a vertical bar (|).\n\nA blank line repeats the previous command literally, except for\n'list', where it lists the next 11 lines.\n\nCommands that the debugger doesn't recognize are assumed to be Python\nstatements and are executed in the context of the program being\ndebugged. Python statements can also be prefixed with an exclamation\npoint ('!'). This is a powerful way to inspect the program being\ndebugged; it is even possible to change variables or call functions.\nWhen an exception occurs in such a statement, the exception name is\nprinted but the debugger's state is not changed.\n\nThe debugger supports aliases, which can save typing. And aliases can\nhave parameters (see the alias help entry) which allows one a certain\nlevel of adaptability to the context under examination.\n\nMultiple commands may be entered on a single line, separated by the\npair ';;'. No intelligence is applied to separating the commands; the\ninput is split at the first ';;', even if it is in the middle of a\nquoted string.\n\nIf a file \".pdbrc\" exists in your home directory or in the current\ndirectory, it is read in and executed as if it had been typed at the\ndebugger prompt. This is particularly useful for aliases. If both\nfiles exist, the one in the home directory is read first and aliases\ndefined there can be overriden by the local file.\n\nAside from aliases, the debugger is not directly programmable; but it\nis implemented as a class from which you can derive your own debugger\nclass, which you can make as fancy as you like.\n\n\nDebugger commands\n=================\n\n\"\"\"\n\n\n\nimport os\nimport re\nimport sys\nimport cmd\nimport bdb\nimport dis\nimport code\nimport glob\nimport pprint\nimport signal\nimport inspect\nimport traceback\nimport linecache\n\n\nclass Restart(Exception):\n ''\n pass\n \n__all__=[\"run\",\"pm\",\"Pdb\",\"runeval\",\"runctx\",\"runcall\",\"set_trace\",\n\"post_mortem\",\"help\"]\n\ndef find_function(funcname,filename):\n cre=re.compile(r'def\\s+%s\\s*[(]'%re.escape(funcname))\n try :\n fp=open(filename)\n except OSError:\n return None\n \n with fp:\n for lineno,line in enumerate(fp,start=1):\n if cre.match(line):\n return funcname,filename,lineno\n return None\n \ndef getsourcelines(obj):\n lines,lineno=inspect.findsource(obj)\n if inspect.isframe(obj)and obj.f_globals is obj.f_locals:\n \n return lines,1\n elif inspect.ismodule(obj):\n return lines,1\n return inspect.getblock(lines[lineno:]),lineno+1\n \ndef lasti2lineno(code,lasti):\n linestarts=list(dis.findlinestarts(code))\n linestarts.reverse()\n for i,lineno in linestarts:\n if lasti >=i:\n return lineno\n return 0\n \n \nclass _rstr(str):\n ''\n def __repr__(self):\n return self\n \n \n \n \n \n \n \nline_prefix='\\n-> '\n\nclass Pdb(bdb.Bdb,cmd.Cmd):\n\n def __init__(self,completekey='tab',stdin=None ,stdout=None ,skip=None ,\n nosigint=False ):\n bdb.Bdb.__init__(self,skip=skip)\n cmd.Cmd.__init__(self,completekey,stdin,stdout)\n if stdout:\n self.use_rawinput=0\n self.prompt='(Pdb) '\n self.aliases={}\n self.displaying={}\n self.mainpyfile=''\n self._wait_for_mainpyfile=False\n self.tb_lineno={}\n \n try :\n import readline\n \n readline.set_completer_delims(' \\t\\n`@#$%^&*()=+[{]}\\\\|;:\\'\",<>?')\n except ImportError:\n pass\n self.allow_kbdint=False\n self.nosigint=nosigint\n \n \n self.rcLines=[]\n if'HOME'in os.environ:\n envHome=os.environ['HOME']\n try :\n with open(os.path.join(envHome,\".pdbrc\"))as rcFile:\n self.rcLines.extend(rcFile)\n except OSError:\n pass\n try :\n with open(\".pdbrc\")as rcFile:\n self.rcLines.extend(rcFile)\n except OSError:\n pass\n \n self.commands={}\n self.commands_doprompt={}\n \n self.commands_silent={}\n \n self.commands_defining=False\n \n self.commands_bnum=None\n \n \n def sigint_handler(self,signum,frame):\n if self.allow_kbdint:\n raise KeyboardInterrupt\n self.message(\"\\nProgram interrupted. (Use 'cont' to resume).\")\n self.set_step()\n self.set_trace(frame)\n \n signal.signal(signal.SIGINT,self._previous_sigint_handler)\n \n def reset(self):\n bdb.Bdb.reset(self)\n self.forget()\n \n def forget(self):\n self.lineno=None\n self.stack=[]\n self.curindex=0\n self.curframe=None\n self.tb_lineno.clear()\n \n def setup(self,f,tb):\n self.forget()\n self.stack,self.curindex=self.get_stack(f,tb)\n while tb:\n \n \n \n lineno=lasti2lineno(tb.tb_frame.f_code,tb.tb_lasti)\n self.tb_lineno[tb.tb_frame]=lineno\n tb=tb.tb_next\n self.curframe=self.stack[self.curindex][0]\n \n \n \n self.curframe_locals=self.curframe.f_locals\n return self.execRcLines()\n \n \n def execRcLines(self):\n if not self.rcLines:\n return\n \n rcLines=self.rcLines\n rcLines.reverse()\n \n self.rcLines=[]\n while rcLines:\n line=rcLines.pop().strip()\n if line and line[0]!='#':\n if self.onecmd(line):\n \n \n \n self.rcLines +=reversed(rcLines)\n return True\n \n \n \n def user_call(self,frame,argument_list):\n ''\n \n if self._wait_for_mainpyfile:\n return\n if self.stop_here(frame):\n self.message('--Call--')\n self.interaction(frame,None )\n \n def user_line(self,frame):\n ''\n if self._wait_for_mainpyfile:\n if (self.mainpyfile !=self.canonic(frame.f_code.co_filename)\n or frame.f_lineno <=0):\n return\n self._wait_for_mainpyfile=False\n if self.bp_commands(frame):\n self.interaction(frame,None )\n \n def bp_commands(self,frame):\n ''\n\n\n\n \n \n if getattr(self,\"currentbp\",False )and self.currentbp in self.commands:\n currentbp=self.currentbp\n self.currentbp=0\n lastcmd_back=self.lastcmd\n self.setup(frame,None )\n for line in self.commands[currentbp]:\n self.onecmd(line)\n self.lastcmd=lastcmd_back\n if not self.commands_silent[currentbp]:\n self.print_stack_entry(self.stack[self.curindex])\n if self.commands_doprompt[currentbp]:\n self._cmdloop()\n self.forget()\n return\n return 1\n \n def user_return(self,frame,return_value):\n ''\n if self._wait_for_mainpyfile:\n return\n frame.f_locals['__return__']=return_value\n self.message('--Return--')\n self.interaction(frame,None )\n \n def user_exception(self,frame,exc_info):\n ''\n \n if self._wait_for_mainpyfile:\n return\n exc_type,exc_value,exc_traceback=exc_info\n frame.f_locals['__exception__']=exc_type,exc_value\n \n \n \n \n \n \n prefix='Internal 'if (not exc_traceback\n and exc_type is StopIteration)else''\n self.message('%s%s'%(prefix,\n traceback.format_exception_only(exc_type,exc_value)[-1].strip()))\n self.interaction(frame,exc_traceback)\n \n \n def _cmdloop(self):\n while True :\n try :\n \n \n self.allow_kbdint=True\n self.cmdloop()\n self.allow_kbdint=False\n break\n except KeyboardInterrupt:\n self.message('--KeyboardInterrupt--')\n \n \n def preloop(self):\n displaying=self.displaying.get(self.curframe)\n if displaying:\n for expr,oldvalue in displaying.items():\n newvalue=self._getval_except(expr)\n \n \n \n if newvalue is not oldvalue and newvalue !=oldvalue:\n displaying[expr]=newvalue\n self.message('display %s: %r [old: %r]'%\n (expr,newvalue,oldvalue))\n \n def interaction(self,frame,traceback):\n if self.setup(frame,traceback):\n \n \n self.forget()\n return\n self.print_stack_entry(self.stack[self.curindex])\n self._cmdloop()\n self.forget()\n \n def displayhook(self,obj):\n ''\n\n \n \n if obj is not None :\n self.message(repr(obj))\n \n def default(self,line):\n if line[:1]=='!':line=line[1:]\n locals=self.curframe_locals\n globals=self.curframe.f_globals\n try :\n code=compile(line+'\\n','','single')\n save_stdout=sys.stdout\n save_stdin=sys.stdin\n save_displayhook=sys.displayhook\n try :\n sys.stdin=self.stdin\n sys.stdout=self.stdout\n sys.displayhook=self.displayhook\n exec(code,globals,locals)\n finally :\n sys.stdout=save_stdout\n sys.stdin=save_stdin\n sys.displayhook=save_displayhook\n except :\n exc_info=sys.exc_info()[:2]\n self.error(traceback.format_exception_only(*exc_info)[-1].strip())\n \n def precmd(self,line):\n ''\n if not line.strip():\n return line\n args=line.split()\n while args[0]in self.aliases:\n line=self.aliases[args[0]]\n ii=1\n for tmpArg in args[1:]:\n line=line.replace(\"%\"+str(ii),\n tmpArg)\n ii +=1\n line=line.replace(\"%*\",' '.join(args[1:]))\n args=line.split()\n \n \n if args[0]!='alias':\n marker=line.find(';;')\n if marker >=0:\n \n next=line[marker+2:].lstrip()\n self.cmdqueue.append(next)\n line=line[:marker].rstrip()\n return line\n \n def onecmd(self,line):\n ''\n\n\n\n\n \n if not self.commands_defining:\n return cmd.Cmd.onecmd(self,line)\n else :\n return self.handle_command_def(line)\n \n def handle_command_def(self,line):\n ''\n cmd,arg,line=self.parseline(line)\n if not cmd:\n return\n if cmd =='silent':\n self.commands_silent[self.commands_bnum]=True\n return\n elif cmd =='end':\n self.cmdqueue=[]\n return 1\n cmdlist=self.commands[self.commands_bnum]\n if arg:\n cmdlist.append(cmd+' '+arg)\n else :\n cmdlist.append(cmd)\n \n try :\n func=getattr(self,'do_'+cmd)\n except AttributeError:\n func=self.default\n \n if func.__name__ in self.commands_resuming:\n self.commands_doprompt[self.commands_bnum]=False\n self.cmdqueue=[]\n return 1\n return\n \n \n \n def message(self,msg):\n print(msg,file=self.stdout)\n \n def error(self,msg):\n print('***',msg,file=self.stdout)\n \n \n \n \n def _complete_location(self,text,line,begidx,endidx):\n \n if line.strip().endswith((':',',')):\n \n return []\n \n try :\n ret=self._complete_expression(text,line,begidx,endidx)\n except Exception:\n ret=[]\n \n globs=glob.glob(text+'*')\n for fn in globs:\n if os.path.isdir(fn):\n ret.append(fn+'/')\n elif os.path.isfile(fn)and fn.lower().endswith(('.py','.pyw')):\n ret.append(fn+':')\n return ret\n \n def _complete_bpnumber(self,text,line,begidx,endidx):\n \n \n \n return [str(i)for i,bp in enumerate(bdb.Breakpoint.bpbynumber)\n if bp is not None and str(i).startswith(text)]\n \n def _complete_expression(self,text,line,begidx,endidx):\n \n if not self.curframe:\n return []\n \n \n \n ns=self.curframe.f_globals.copy()\n ns.update(self.curframe_locals)\n if'.'in text:\n \n \n \n dotted=text.split('.')\n try :\n obj=ns[dotted[0]]\n for part in dotted[1:-1]:\n obj=getattr(obj,part)\n except (KeyError,AttributeError):\n return []\n prefix='.'.join(dotted[:-1])+'.'\n return [prefix+n for n in dir(obj)if n.startswith(dotted[-1])]\n else :\n \n return [n for n in ns.keys()if n.startswith(text)]\n \n \n \n \n \n def do_commands(self,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\n\n\n\n\n\n\n\n\n\n\n\n \n if not arg:\n bnum=len(bdb.Breakpoint.bpbynumber)-1\n else :\n try :\n bnum=int(arg)\n except :\n self.error(\"Usage: commands [bnum]\\n ...\\n end\")\n return\n self.commands_bnum=bnum\n \n if bnum in self.commands:\n old_command_defs=(self.commands[bnum],\n self.commands_doprompt[bnum],\n self.commands_silent[bnum])\n else :\n old_command_defs=None\n self.commands[bnum]=[]\n self.commands_doprompt[bnum]=True\n self.commands_silent[bnum]=False\n \n prompt_back=self.prompt\n self.prompt='(com) '\n self.commands_defining=True\n try :\n self.cmdloop()\n except KeyboardInterrupt:\n \n if old_command_defs:\n self.commands[bnum]=old_command_defs[0]\n self.commands_doprompt[bnum]=old_command_defs[1]\n self.commands_silent[bnum]=old_command_defs[2]\n else :\n del self.commands[bnum]\n del self.commands_doprompt[bnum]\n del self.commands_silent[bnum]\n self.error('command definition aborted, old commands restored')\n finally :\n self.commands_defining=False\n self.prompt=prompt_back\n \n complete_commands=_complete_bpnumber\n \n def do_break(self,arg,temporary=0):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not arg:\n if self.breaks:\n self.message(\"Num Type Disp Enb Where\")\n for bp in bdb.Breakpoint.bpbynumber:\n if bp:\n self.message(bp.bpformat())\n return\n \n \n filename=None\n lineno=None\n cond=None\n comma=arg.find(',')\n if comma >0:\n \n cond=arg[comma+1:].lstrip()\n arg=arg[:comma].rstrip()\n \n colon=arg.rfind(':')\n funcname=None\n if colon >=0:\n filename=arg[:colon].rstrip()\n f=self.lookupmodule(filename)\n if not f:\n self.error('%r not found from sys.path'%filename)\n return\n else :\n filename=f\n arg=arg[colon+1:].lstrip()\n try :\n lineno=int(arg)\n except ValueError:\n self.error('Bad lineno: %s'%arg)\n return\n else :\n \n try :\n lineno=int(arg)\n except ValueError:\n try :\n func=eval(arg,\n self.curframe.f_globals,\n self.curframe_locals)\n except :\n func=arg\n try :\n if hasattr(func,'__func__'):\n func=func.__func__\n code=func.__code__\n \n \n funcname=code.co_name\n lineno=code.co_firstlineno\n filename=code.co_filename\n except :\n \n (ok,filename,ln)=self.lineinfo(arg)\n if not ok:\n self.error('The specified object %r is not a function '\n 'or was not found along sys.path.'%arg)\n return\n funcname=ok\n lineno=int(ln)\n if not filename:\n filename=self.defaultFile()\n \n line=self.checkline(filename,lineno)\n if line:\n \n err=self.set_break(filename,line,temporary,cond,funcname)\n if err:\n self.error(err)\n else :\n bp=self.get_breaks(filename,line)[-1]\n self.message(\"Breakpoint %d at %s:%d\"%\n (bp.number,bp.file,bp.line))\n \n \n def defaultFile(self):\n ''\n filename=self.curframe.f_code.co_filename\n if filename ==''and self.mainpyfile:\n filename=self.mainpyfile\n return filename\n \n do_b=do_break\n \n complete_break=_complete_location\n complete_b=_complete_location\n \n def do_tbreak(self,arg):\n ''\n\n\n \n self.do_break(arg,1)\n \n complete_tbreak=_complete_location\n \n def lineinfo(self,identifier):\n failed=(None ,None ,None )\n \n idstring=identifier.split(\"'\")\n if len(idstring)==1:\n \n id=idstring[0].strip()\n elif len(idstring)==3:\n \n id=idstring[1].strip()\n else :\n return failed\n if id =='':return failed\n parts=id.split('.')\n \n if parts[0]=='self':\n del parts[0]\n if len(parts)==0:\n return failed\n \n fname=self.defaultFile()\n if len(parts)==1:\n item=parts[0]\n else :\n \n \n f=self.lookupmodule(parts[0])\n if f:\n fname=f\n item=parts[1]\n answer=find_function(item,fname)\n return answer or failed\n \n def checkline(self,filename,lineno):\n ''\n\n\n\n \n \n \n globs=self.curframe.f_globals if hasattr(self,'curframe')else None\n line=linecache.getline(filename,lineno,globs)\n if not line:\n self.message('End of file')\n return 0\n line=line.strip()\n \n if (not line or (line[0]=='#')or\n (line[:3]=='\"\"\"')or line[:3]==\"'''\"):\n self.error('Blank or comment')\n return 0\n return lineno\n \n def do_enable(self,arg):\n ''\n\n\n \n args=arg.split()\n for i in args:\n try :\n bp=self.get_bpbynumber(i)\n except ValueError as err:\n self.error(err)\n else :\n bp.enable()\n self.message('Enabled %s'%bp)\n \n complete_enable=_complete_bpnumber\n \n def do_disable(self,arg):\n ''\n\n\n\n\n\n \n args=arg.split()\n for i in args:\n try :\n bp=self.get_bpbynumber(i)\n except ValueError as err:\n self.error(err)\n else :\n bp.disable()\n self.message('Disabled %s'%bp)\n \n complete_disable=_complete_bpnumber\n \n def do_condition(self,arg):\n ''\n\n\n\n\n \n args=arg.split(' ',1)\n try :\n cond=args[1]\n except IndexError:\n cond=None\n try :\n bp=self.get_bpbynumber(args[0].strip())\n except IndexError:\n self.error('Breakpoint number expected')\n except ValueError as err:\n self.error(err)\n else :\n bp.cond=cond\n if not cond:\n self.message('Breakpoint %d is now unconditional.'%bp.number)\n else :\n self.message('New condition set for breakpoint %d.'%bp.number)\n \n complete_condition=_complete_bpnumber\n \n def do_ignore(self,arg):\n ''\n\n\n\n\n\n\n \n args=arg.split()\n try :\n count=int(args[1].strip())\n except :\n count=0\n try :\n bp=self.get_bpbynumber(args[0].strip())\n except IndexError:\n self.error('Breakpoint number expected')\n except ValueError as err:\n self.error(err)\n else :\n bp.ignore=count\n if count >0:\n if count >1:\n countstr='%d crossings'%count\n else :\n countstr='1 crossing'\n self.message('Will ignore next %s of breakpoint %d.'%\n (countstr,bp.number))\n else :\n self.message('Will stop next time breakpoint %d is reached.'\n %bp.number)\n \n complete_ignore=_complete_bpnumber\n \n def do_clear(self,arg):\n ''\n\n\n\n\n \n if not arg:\n try :\n reply=input('Clear all breaks? ')\n except EOFError:\n reply='no'\n reply=reply.strip().lower()\n if reply in ('y','yes'):\n bplist=[bp for bp in bdb.Breakpoint.bpbynumber if bp]\n self.clear_all_breaks()\n for bp in bplist:\n self.message('Deleted %s'%bp)\n return\n if':'in arg:\n \n i=arg.rfind(':')\n filename=arg[:i]\n arg=arg[i+1:]\n try :\n lineno=int(arg)\n except ValueError:\n err=\"Invalid line number (%s)\"%arg\n else :\n bplist=self.get_breaks(filename,lineno)\n err=self.clear_break(filename,lineno)\n if err:\n self.error(err)\n else :\n for bp in bplist:\n self.message('Deleted %s'%bp)\n return\n numberlist=arg.split()\n for i in numberlist:\n try :\n bp=self.get_bpbynumber(i)\n except ValueError as err:\n self.error(err)\n else :\n self.clear_bpbynumber(i)\n self.message('Deleted %s'%bp)\n do_cl=do_clear\n \n complete_clear=_complete_location\n complete_cl=_complete_location\n \n def do_where(self,arg):\n ''\n\n\n\n \n self.print_stack_trace()\n do_w=do_where\n do_bt=do_where\n \n def _select_frame(self,number):\n assert 0 <=number =2:\n self.error('No help for %r; please do not run Python with -OO '\n 'if you need command help'%arg)\n return\n self.message(command.__doc__.rstrip())\n \n do_h=do_help\n \n def help_exec(self):\n ''\n\n\n\n\n\n\n\n \n self.message((self.help_exec.__doc__ or'').strip())\n \n def help_pdb(self):\n help()\n \n \n \n def lookupmodule(self,filename):\n ''\n\n\n\n \n if os.path.isabs(filename)and os.path.exists(filename):\n return filename\n f=os.path.join(sys.path[0],filename)\n if os.path.exists(f)and self.canonic(f)==self.mainpyfile:\n return f\n root,ext=os.path.splitext(filename)\n if ext =='':\n filename=filename+'.py'\n if os.path.isabs(filename):\n return filename\n for dirname in sys.path:\n while os.path.islink(dirname):\n dirname=os.readlink(dirname)\n fullname=os.path.join(dirname,filename)\n if os.path.exists(fullname):\n return fullname\n return None\n \n def _runscript(self,filename):\n \n \n \n \n \n import __main__\n __main__.__dict__.clear()\n __main__.__dict__.update({\"__name__\":\"__main__\",\n \"__file__\":filename,\n \"__builtins__\":__builtins__,\n })\n \n \n \n \n \n \n self._wait_for_mainpyfile=True\n self.mainpyfile=self.canonic(filename)\n self._user_requested_quit=False\n with open(filename,\"rb\")as fp:\n statement=\"exec(compile(%r, %r, 'exec'))\"% (fp.read(),self.mainpyfile)\n self.run(statement)\n \n \n \nif __doc__ is not None :\n\n _help_order=[\n 'help','where','down','up','break','tbreak','clear','disable',\n 'enable','ignore','condition','commands','step','next','until',\n 'jump','return','retval','run','continue','list','longlist',\n 'args','p','pp','whatis','source','display','undisplay',\n 'interact','alias','unalias','debug','quit',\n ]\n \n for _command in _help_order:\n __doc__ +=getattr(Pdb,'do_'+_command).__doc__.strip()+'\\n\\n'\n __doc__ +=Pdb.help_exec.__doc__\n \n del _help_order,_command\n \n \n \n \ndef run(statement,globals=None ,locals=None ):\n Pdb().run(statement,globals,locals)\n \ndef runeval(expression,globals=None ,locals=None ):\n return Pdb().runeval(expression,globals,locals)\n \ndef runctx(statement,globals,locals):\n\n run(statement,globals,locals)\n \ndef runcall(*args,**kwds):\n return Pdb().runcall(*args,**kwds)\n \ndef set_trace():\n Pdb().set_trace(sys._getframe().f_back)\n \n \n \ndef post_mortem(t=None ):\n\n if t is None :\n \n \n t=sys.exc_info()[2]\n if t is None :\n raise ValueError(\"A valid traceback must be passed if no \"\n \"exception is being handled\")\n \n p=Pdb()\n p.reset()\n p.interaction(None ,t)\n \ndef pm():\n post_mortem(sys.last_traceback)\n \n \n \n \nTESTCMD='import x; x.main()'\n\ndef test():\n run(TESTCMD)\n \n \ndef help():\n import pydoc\n pydoc.pager(__doc__)\n \n_usage=\"\"\"\\\nusage: pdb.py [-c command] ... pyfile [arg] ...\n\nDebug the Python program given by pyfile.\n\nInitial commands are read from .pdbrc files in your home directory\nand in the current directory, if they exist. Commands supplied with\n-c are executed after commands from .pdbrc files.\n\nTo let the script run until an exception occurs, use \"-c continue\".\nTo let the script run up to a given line X in the debugged file, use\n\"-c 'until X'\".\"\"\"\n\ndef main():\n import getopt\n \n opts,args=getopt.getopt(sys.argv[1:],'hc:',['--help','--command='])\n \n if not args:\n print(_usage)\n sys.exit(2)\n \n commands=[]\n for opt,optarg in opts:\n if opt in ['-h','--help']:\n print(_usage)\n sys.exit()\n elif opt in ['-c','--command']:\n commands.append(optarg)\n \n mainpyfile=args[0]\n if not os.path.exists(mainpyfile):\n print('Error:',mainpyfile,'does not exist')\n sys.exit(1)\n \n sys.argv[:]=args\n \n \n sys.path[0]=os.path.dirname(mainpyfile)\n \n \n \n \n \n pdb=Pdb()\n pdb.rcLines.extend(commands)\n while True :\n try :\n pdb._runscript(mainpyfile)\n if pdb._user_requested_quit:\n break\n print(\"The program finished and will be restarted\")\n except Restart:\n print(\"Restarting\",mainpyfile,\"with arguments:\")\n print(\"\\t\"+\" \".join(args))\n except SystemExit:\n \n print(\"The program exited via sys.exit(). Exit status:\",end=' ')\n print(sys.exc_info()[1])\n except :\n traceback.print_exc()\n print(\"Uncaught exception. Entering post mortem debugging\")\n print(\"Running 'cont' or 'step' will restart the program\")\n t=sys.exc_info()[2]\n pdb.interaction(None ,t)\n print(\"Post mortem debugger finished. The \"+mainpyfile+\n \" will be restarted\")\n \n \n \nif __name__ =='__main__':\n import pdb\n pdb.main()\n"], "multiprocessing.pool": [".py", "\n\n\n\n\n\n\n\n\n__all__=['Pool']\n\n\n\n\n\nimport threading\nimport queue\nimport itertools\nimport collections\nimport time\n\nfrom multiprocessing import Process,cpu_count,TimeoutError\nfrom multiprocessing.util import Finalize,debug\n\n\n\n\n\nRUN=0\nCLOSE=1\nTERMINATE=2\n\n\n\n\n\njob_counter=itertools.count()\n\ndef mapstar(args):\n return list(map(*args))\n \ndef starmapstar(args):\n return list(itertools.starmap(args[0],args[1]))\n \n \n \n \n \nclass MaybeEncodingError(Exception):\n ''\n \n \n def __init__(self,exc,value):\n self.exc=repr(exc)\n self.value=repr(value)\n super(MaybeEncodingError,self).__init__(self.exc,self.value)\n \n def __str__(self):\n return\"Error sending result: '%s'. Reason: '%s'\"%(self.value,\n self.exc)\n \n def __repr__(self):\n return\"\"%str(self)\n \n \ndef worker(inqueue,outqueue,initializer=None ,initargs=(),maxtasks=None ):\n assert maxtasks is None or (type(maxtasks)==int and maxtasks >0)\n put=outqueue.put\n get=inqueue.get\n if hasattr(inqueue,'_writer'):\n inqueue._writer.close()\n outqueue._reader.close()\n \n if initializer is not None :\n initializer(*initargs)\n \n completed=0\n while maxtasks is None or (maxtasks and completed 1\n task_batches=Pool._get_tasks(func,iterable,chunksize)\n result=IMapIterator(self._cache)\n self._taskqueue.put((((result._job,i,mapstar,(x,),{})\n for i,x in enumerate(task_batches)),result._set_length))\n return (item for chunk in result for item in chunk)\n \n def imap_unordered(self,func,iterable,chunksize=1):\n ''\n\n \n if self._state !=RUN:\n raise ValueError(\"Pool not running\")\n if chunksize ==1:\n result=IMapUnorderedIterator(self._cache)\n self._taskqueue.put((((result._job,i,func,(x,),{})\n for i,x in enumerate(iterable)),result._set_length))\n return result\n else :\n assert chunksize >1\n task_batches=Pool._get_tasks(func,iterable,chunksize)\n result=IMapUnorderedIterator(self._cache)\n self._taskqueue.put((((result._job,i,mapstar,(x,),{})\n for i,x in enumerate(task_batches)),result._set_length))\n return (item for chunk in result for item in chunk)\n \n def apply_async(self,func,args=(),kwds={},callback=None ,\n error_callback=None ):\n ''\n\n \n if self._state !=RUN:\n raise ValueError(\"Pool not running\")\n result=ApplyResult(self._cache,callback,error_callback)\n self._taskqueue.put(([(result._job,None ,func,args,kwds)],None ))\n return result\n \n def map_async(self,func,iterable,chunksize=None ,callback=None ,\n error_callback=None ):\n ''\n\n \n return self._map_async(func,iterable,mapstar,chunksize,callback,\n error_callback)\n \n def _map_async(self,func,iterable,mapper,chunksize=None ,callback=None ,\n error_callback=None ):\n ''\n\n \n if self._state !=RUN:\n raise ValueError(\"Pool not running\")\n if not hasattr(iterable,'__len__'):\n iterable=list(iterable)\n \n if chunksize is None :\n chunksize,extra=divmod(len(iterable),len(self._pool)*4)\n if extra:\n chunksize +=1\n if len(iterable)==0:\n chunksize=0\n \n task_batches=Pool._get_tasks(func,iterable,chunksize)\n result=MapResult(self._cache,chunksize,len(iterable),callback,\n error_callback=error_callback)\n self._taskqueue.put((((result._job,i,mapper,(x,),{})\n for i,x in enumerate(task_batches)),None ))\n return result\n \n @staticmethod\n def _handle_workers(pool):\n thread=threading.current_thread()\n \n \n \n while thread._state ==RUN or (pool._cache and thread._state !=TERMINATE):\n pool._maintain_pool()\n time.sleep(0.1)\n \n pool._taskqueue.put(None )\n debug('worker handler exiting')\n \n @staticmethod\n def _handle_tasks(taskqueue,put,outqueue,pool):\n thread=threading.current_thread()\n \n for taskseq,set_length in iter(taskqueue.get,None ):\n i=-1\n for i,task in enumerate(taskseq):\n if thread._state:\n debug('task handler found thread._state != RUN')\n break\n try :\n put(task)\n except IOError:\n debug('could not put task on queue')\n break\n else :\n if set_length:\n debug('doing set_length()')\n set_length(i+1)\n continue\n break\n else :\n debug('task handler got sentinel')\n \n \n try :\n \n debug('task handler sending sentinel to result handler')\n outqueue.put(None )\n \n \n debug('task handler sending sentinel to workers')\n for p in pool:\n put(None )\n except IOError:\n debug('task handler got IOError when sending sentinels')\n \n debug('task handler exiting')\n \n @staticmethod\n def _handle_results(outqueue,get,cache):\n thread=threading.current_thread()\n \n while 1:\n try :\n task=get()\n except (IOError,EOFError):\n debug('result handler got EOFError/IOError -- exiting')\n return\n \n if thread._state:\n assert thread._state ==TERMINATE\n debug('result handler found thread._state=TERMINATE')\n break\n \n if task is None :\n debug('result handler got sentinel')\n break\n \n job,i,obj=task\n try :\n cache[job]._set(i,obj)\n except KeyError:\n pass\n \n while cache and thread._state !=TERMINATE:\n try :\n task=get()\n except (IOError,EOFError):\n debug('result handler got EOFError/IOError -- exiting')\n return\n \n if task is None :\n debug('result handler ignoring extra sentinel')\n continue\n job,i,obj=task\n try :\n cache[job]._set(i,obj)\n except KeyError:\n pass\n \n if hasattr(outqueue,'_reader'):\n debug('ensuring that outqueue is not full')\n \n \n \n try :\n for i in range(10):\n if not outqueue._reader.poll():\n break\n get()\n except (IOError,EOFError):\n pass\n \n debug('result handler exiting: len(cache)=%s, thread._state=%s',\n len(cache),thread._state)\n \n @staticmethod\n def _get_tasks(func,it,size):\n it=iter(it)\n while 1:\n x=tuple(itertools.islice(it,size))\n if not x:\n return\n yield (func,x)\n \n def __reduce__(self):\n raise NotImplementedError(\n 'pool objects cannot be passed between processes or pickled'\n )\n \n def close(self):\n debug('closing pool')\n if self._state ==RUN:\n self._state=CLOSE\n self._worker_handler._state=CLOSE\n \n def terminate(self):\n debug('terminating pool')\n self._state=TERMINATE\n self._worker_handler._state=TERMINATE\n self._terminate()\n \n def join(self):\n debug('joining pool')\n assert self._state in (CLOSE,TERMINATE)\n self._worker_handler.join()\n self._task_handler.join()\n self._result_handler.join()\n for p in self._pool:\n p.join()\n \n @staticmethod\n def _help_stuff_finish(inqueue,task_handler,size):\n \n debug('removing tasks from inqueue until task handler finished')\n inqueue._rlock.acquire()\n while task_handler.is_alive()and inqueue._reader.poll():\n inqueue._reader.recv()\n time.sleep(0)\n \n @classmethod\n def _terminate_pool(cls,taskqueue,inqueue,outqueue,pool,\n worker_handler,task_handler,result_handler,cache):\n \n debug('finalizing pool')\n \n worker_handler._state=TERMINATE\n task_handler._state=TERMINATE\n \n debug('helping task handler/workers to finish')\n cls._help_stuff_finish(inqueue,task_handler,len(pool))\n \n assert result_handler.is_alive()or len(cache)==0\n \n result_handler._state=TERMINATE\n outqueue.put(None )\n \n \n \n debug('joining worker handler')\n if threading.current_thread()is not worker_handler:\n worker_handler.join()\n \n \n if pool and hasattr(pool[0],'terminate'):\n debug('terminating workers')\n for p in pool:\n if p.exitcode is None :\n p.terminate()\n \n debug('joining task handler')\n if threading.current_thread()is not task_handler:\n task_handler.join()\n \n debug('joining result handler')\n if threading.current_thread()is not result_handler:\n result_handler.join()\n \n if pool and hasattr(pool[0],'terminate'):\n debug('joining pool workers')\n for p in pool:\n if p.is_alive():\n \n debug('cleaning up worker %d'%p.pid)\n p.join()\n \n def __enter__(self):\n return self\n \n def __exit__(self,exc_type,exc_val,exc_tb):\n self.terminate()\n \n \n \n \n \nclass ApplyResult(object):\n\n def __init__(self,cache,callback,error_callback):\n self._event=threading.Event()\n self._job=next(job_counter)\n self._cache=cache\n self._callback=callback\n self._error_callback=error_callback\n cache[self._job]=self\n \n def ready(self):\n return self._event.is_set()\n \n def successful(self):\n assert self.ready()\n return self._success\n \n def wait(self,timeout=None ):\n self._event.wait(timeout)\n \n def get(self,timeout=None ):\n self.wait(timeout)\n if not self.ready():\n raise TimeoutError\n if self._success:\n return self._value\n else :\n raise self._value\n \n def _set(self,i,obj):\n self._success,self._value=obj\n if self._callback and self._success:\n self._callback(self._value)\n if self._error_callback and not self._success:\n self._error_callback(self._value)\n self._event.set()\n del self._cache[self._job]\n \nAsyncResult=ApplyResult\n\n\n\n\n\nclass MapResult(ApplyResult):\n\n def __init__(self,cache,chunksize,length,callback,error_callback):\n ApplyResult.__init__(self,cache,callback,\n error_callback=error_callback)\n self._success=True\n self._value=[None ]*length\n self._chunksize=chunksize\n if chunksize <=0:\n self._number_left=0\n self._event.set()\n del cache[self._job]\n else :\n self._number_left=length //chunksize+bool(length %chunksize)\n \n def _set(self,i,success_result):\n success,result=success_result\n if success:\n self._value[i *self._chunksize:(i+1)*self._chunksize]=result\n self._number_left -=1\n if self._number_left ==0:\n if self._callback:\n self._callback(self._value)\n del self._cache[self._job]\n self._event.set()\n else :\n self._success=False\n self._value=result\n if self._error_callback:\n self._error_callback(self._value)\n del self._cache[self._job]\n self._event.set()\n \n \n \n \n \nclass IMapIterator(object):\n\n def __init__(self,cache):\n self._cond=threading.Condition(threading.Lock())\n self._job=next(job_counter)\n self._cache=cache\n self._items=collections.deque()\n self._index=0\n self._length=None\n self._unsorted={}\n cache[self._job]=self\n \n def __iter__(self):\n return self\n \n def next(self,timeout=None ):\n self._cond.acquire()\n try :\n try :\n item=self._items.popleft()\n except IndexError:\n if self._index ==self._length:\n raise StopIteration\n self._cond.wait(timeout)\n try :\n item=self._items.popleft()\n except IndexError:\n if self._index ==self._length:\n raise StopIteration\n raise TimeoutError\n finally :\n self._cond.release()\n \n success,value=item\n if success:\n return value\n raise value\n \n __next__=next\n \n def _set(self,i,obj):\n self._cond.acquire()\n try :\n if self._index ==i:\n self._items.append(obj)\n self._index +=1\n while self._index in self._unsorted:\n obj=self._unsorted.pop(self._index)\n self._items.append(obj)\n self._index +=1\n self._cond.notify()\n else :\n self._unsorted[i]=obj\n \n if self._index ==self._length:\n del self._cache[self._job]\n finally :\n self._cond.release()\n \n def _set_length(self,length):\n self._cond.acquire()\n try :\n self._length=length\n if self._index ==self._length:\n self._cond.notify()\n del self._cache[self._job]\n finally :\n self._cond.release()\n \n \n \n \n \nclass IMapUnorderedIterator(IMapIterator):\n\n def _set(self,i,obj):\n self._cond.acquire()\n try :\n self._items.append(obj)\n self._index +=1\n self._cond.notify()\n if self._index ==self._length:\n del self._cache[self._job]\n finally :\n self._cond.release()\n \n \n \n \n \nclass ThreadPool(Pool):\n\n from .dummy import Process\n \n def __init__(self,processes=None ,initializer=None ,initargs=()):\n Pool.__init__(self,processes,initializer,initargs)\n \n def _setup_queues(self):\n self._inqueue=queue.Queue()\n self._outqueue=queue.Queue()\n self._quick_put=self._inqueue.put\n self._quick_get=self._outqueue.get\n \n @staticmethod\n def _help_stuff_finish(inqueue,task_handler,size):\n \n inqueue.not_empty.acquire()\n try :\n inqueue.queue.clear()\n inqueue.queue.extend([None ]*size)\n inqueue.not_empty.notify_all()\n finally :\n inqueue.not_empty.release()\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"], "browser.markdown": [".py", "\n\ntry :\n import _jsre as re\nexcept :\n import re\n \nimport random\nimport time\n\nletters='abcdefghijklmnopqrstuvwxyz'\nletters +=letters.upper()+'0123456789'\n\nclass URL:\n def __init__(self,src):\n elts=src.split(maxsplit=1)\n self.href=elts[0]\n self.alt=''\n if len(elts)==2:\n alt=elts[1]\n if alt[0]=='\"'and alt[-1]=='\"':self.alt=alt[1:-1]\n elif alt[0]==\"'\"and alt[-1]==\"'\":self.alt=alt[1:-1]\n elif alt[0]==\"(\"and alt[-1]==\")\":self.alt=alt[1:-1]\n \nclass CodeBlock:\n def __init__(self,line):\n self.lines=[line]\n if line.startswith(\"```\")and len(line)>3:\n self.info=line[3:]\n else :\n self.info=None\n \n def to_html(self):\n if self.lines[0].startswith(\"`\"):\n self.lines.pop(0)\n res=escape('\\n'.join(self.lines))\n res=unmark(res)\n _class=self.info or\"marked\"\n res='
%s
\\n'%(_class,res)\n return res,[]\n \nclass HtmlBlock:\n\n def __init__(self,src):\n self.src=src\n \n def to_html(self):\n return self.src\n \nclass Marked:\n def __init__(self,line=''):\n self.line=line\n self.children=[]\n \n def to_html(self):\n return apply_markdown(self.line)\n \n \nrefs={}\nref_pattern=r\"^\\[(.*)\\]:\\s+(.*)\"\n\ndef mark(src):\n\n global refs\n t0=time.time()\n refs={}\n \n \n \n \n \n \n \n \n src=src.replace('\\r\\n','\\n')\n \n \n src=re.sub(r'(.*?)\\n=+\\n','\\n# \\\\1\\n',src)\n src=re.sub(r'(.*?)\\n-+\\n','\\n## \\\\1\\n',src)\n \n lines=src.split('\\n')+['']\n \n i=bq=0\n ul=ol=0\n \n while i '):\n nb=1\n while nb ':\n nb +=1\n lines[i]=lines[i][nb:]\n if nb >bq:\n lines.insert(i,'
'*(nb -bq))\n i +=1\n bq=nb\n elif nb '*(bq -nb))\n i +=1\n bq=nb\n elif bq >0:\n lines.insert(i,'
'*bq)\n i +=1\n bq=0\n \n \n if lines[i].strip()and lines[i].lstrip()[0]in'-+*' and len(lines[i].lstrip())>1 and lines[i].lstrip()[1]==' ' and (i ==0 or ul or not lines[i -1].strip()):\n \n nb=1+len(lines[i])-len(lines[i].lstrip())\n lines[i]='
  • '+lines[i][nb:]\n if nb >ul:\n lines.insert(i,'
      '*(nb -ul))\n i +=1\n elif nb '*(ul -nb))\n i +=1\n ul=nb\n elif ul and not lines[i].strip():\n if i 1 and nline[1]==' ':\n pass\n else :\n lines.insert(i,'
    '*ul)\n i +=1\n ul=0\n \n \n mo=re.search(r'^(\\d+\\.)',lines[i])\n if mo:\n if not ol:\n lines.insert(i,'
      ')\n i +=1\n lines[i]='
    1. '+lines[i][len(mo.groups()[0]):]\n ol=1\n elif ol and not lines[i].strip()and i ')\n i +=1\n ol=0\n \n i +=1\n \n if ul:\n lines.append(''*ul)\n if ol:\n lines.append('
    '*ol)\n if bq:\n lines.append(''*bq)\n \n t1=time.time()\n \n sections=[]\n scripts=[]\n section=Marked()\n \n i=0\n while i '):\n scripts.append('\\n'.join(lines[i+1:j]))\n for k in range(i,j+1):\n lines[k]=''\n break\n j +=1\n i=j\n continue\n \n \n elif line.startswith('#'):\n level=1\n line=lines[i]\n while level ','>')\n czone=czone.replace('_','_')\n czone=czone.replace('*','*')\n return czone\n \ndef s_escape(mo):\n\n czone=mo.string[mo.start():mo.end()]\n return escape(czone)\n \ndef unmark(code_zone):\n\n code_zone=code_zone.replace('_','_')\n return code_zone\n \ndef s_unmark(mo):\n\n code_zone=mo.string[mo.start():mo.end()]\n code_zone=code_zone.replace('_','_')\n return code_zone\n \ndef apply_markdown(src):\n\n scripts=[]\n key=None\n \n t0=time.time()\n i=0\n while i -1 and src[start_a:end_a].find('\\n')==-1:\n link=src[start_a:end_a]\n rest=src[end_a+1:].lstrip()\n if rest and rest[0]=='(':\n j=0\n while True :\n end_href=rest.find(')',j)\n if end_href ==-1:\n break\n if rest[end_href -1]=='\\\\':\n j=end_href+1\n else :\n break\n if end_href >-1 and rest[:end_href].find('\\n')==-1:\n tag='
    '+link+''\n src=src[:start_a -1]+tag+rest[end_href+1:]\n i=start_a+len(tag)\n elif rest and rest[0]=='[':\n j=0\n while True :\n end_key=rest.find(']',j)\n if end_key ==-1:\n break\n if rest[end_key -1]=='\\\\':\n j=end_key+1\n else :\n break\n if end_key >-1 and rest[:end_key].find('\\n')==-1:\n if not key:\n key=link\n if key.lower()not in refs:\n raise KeyError('unknown reference %s'%key)\n url=refs[key.lower()]\n tag=''+link+''\n src=src[:start_a -1]+tag+rest[end_key+1:]\n i=start_a+len(tag)\n \n i +=1\n \n t1=time.time()\n \n \n \n \n \n rstr=''.join(random.choice(letters)for i in range(16))\n \n i=0\n state=None\n start=-1\n data=''\n tags=[]\n while i 'and state is None :\n tags.append(src[i:j+1])\n src=src[:i]+rstr+src[j+1:]\n i +=len(rstr)\n break\n elif state =='\"'or state ==\"'\":\n data +=src[j]\n elif src[j]=='\\n':\n \n \n src=src[:i]+'<'+src[i+1:]\n j=i+4\n break\n j +=1\n elif src[i]=='`'and i >0 and src[i -1]!='\\\\':\n \n j=i+1\n while j \\1'%(tag,tag),src)\n \n em_patterns=[('EM',r'\\*(.*?)\\*'),('I',r'\\_(.*?)\\_')]\n for tag,em_pattern in em_patterns:\n src=re.sub(em_pattern,r'<%s>\\1'%(tag,tag),src)\n \n \n code_pattern=r'\\`(.*?)\\`'\n src=re.sub(code_pattern,r'\\1',src)\n \n \n while True :\n pos=src.rfind(rstr)\n if pos ==-1:\n break\n repl=tags.pop()\n src=src[:pos]+repl+src[pos+len(rstr):]\n \n src='

    '+src+'

    '\n \n t3=time.time()\n \n \n return src,scripts\n"], "encodings.koi8_r": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='koi8-r',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u2500'\n'\\u2502'\n'\\u250c'\n'\\u2510'\n'\\u2514'\n'\\u2518'\n'\\u251c'\n'\\u2524'\n'\\u252c'\n'\\u2534'\n'\\u253c'\n'\\u2580'\n'\\u2584'\n'\\u2588'\n'\\u258c'\n'\\u2590'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2320'\n'\\u25a0'\n'\\u2219'\n'\\u221a'\n'\\u2248'\n'\\u2264'\n'\\u2265'\n'\\xa0'\n'\\u2321'\n'\\xb0'\n'\\xb2'\n'\\xb7'\n'\\xf7'\n'\\u2550'\n'\\u2551'\n'\\u2552'\n'\\u0451'\n'\\u2553'\n'\\u2554'\n'\\u2555'\n'\\u2556'\n'\\u2557'\n'\\u2558'\n'\\u2559'\n'\\u255a'\n'\\u255b'\n'\\u255c'\n'\\u255d'\n'\\u255e'\n'\\u255f'\n'\\u2560'\n'\\u2561'\n'\\u0401'\n'\\u2562'\n'\\u2563'\n'\\u2564'\n'\\u2565'\n'\\u2566'\n'\\u2567'\n'\\u2568'\n'\\u2569'\n'\\u256a'\n'\\u256b'\n'\\u256c'\n'\\xa9'\n'\\u044e'\n'\\u0430'\n'\\u0431'\n'\\u0446'\n'\\u0434'\n'\\u0435'\n'\\u0444'\n'\\u0433'\n'\\u0445'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u044f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0436'\n'\\u0432'\n'\\u044c'\n'\\u044b'\n'\\u0437'\n'\\u0448'\n'\\u044d'\n'\\u0449'\n'\\u0447'\n'\\u044a'\n'\\u042e'\n'\\u0410'\n'\\u0411'\n'\\u0426'\n'\\u0414'\n'\\u0415'\n'\\u0424'\n'\\u0413'\n'\\u0425'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u042f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0416'\n'\\u0412'\n'\\u042c'\n'\\u042b'\n'\\u0417'\n'\\u0428'\n'\\u042d'\n'\\u0429'\n'\\u0427'\n'\\u042a'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_posixsubprocess": [".js", "var $module=(function($B){\n\n return {\n cloexec_pipe: function() {} // fixme\n }\n})(__BRYTHON__)\n"], "platform": [".py", "#!/usr/bin/env python3\n\n\"\"\" This module tries to retrieve as much platform-identifying data as\n possible. It makes this information available via function APIs.\n\n If called from the command line, it prints the platform\n information concatenated as single string to stdout. The output\n format is useable as part of a filename.\n\n\"\"\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__copyright__=\"\"\"\n Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info@egenix.com\n\n Permission to use, copy, modify, and distribute this software and its\n documentation for any purpose and without fee or royalty is hereby granted,\n provided that the above copyright notice appear in all copies and that\n both that copyright notice and this permission notice appear in\n supporting documentation or portions thereof, including modifications,\n that you make.\n\n EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO\n THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\n FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,\n INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING\n FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,\n NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION\n WITH THE USE OR PERFORMANCE OF THIS SOFTWARE !\n\n\"\"\"\n\n__version__='1.0.7'\n\nimport collections\nimport sys,os,re,subprocess\n\n\n\n\ntry :\n DEV_NULL=os.devnull\nexcept AttributeError:\n\n\n if sys.platform in ('dos','win32','win16','os2'):\n \n DEV_NULL='NUL'\n else :\n \n DEV_NULL='/dev/null'\n \n \n \n_libc_search=re.compile(b'(__libc_init)'\nb'|'\nb'(GLIBC_([0-9.]+))'\nb'|'\nbr'(libc(_\\w+)?\\.so(?:\\.(\\d[0-9.]*))?)',re.ASCII)\n\ndef libc_ver(executable=sys.executable,lib='',version='',\n\nchunksize=16384):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if hasattr(os.path,'realpath'):\n \n \n \n executable=os.path.realpath(executable)\n f=open(executable,'rb')\n binary=f.read(chunksize)\n pos=0\n while 1:\n if b'libc'in binary or b'GLIBC'in binary:\n m=_libc_search.search(binary,pos)\n else :\n m=None\n if not m:\n binary=f.read(chunksize)\n if not binary:\n break\n pos=0\n continue\n libcinit,glibc,glibcversion,so,threads,soversion=[\n s.decode('latin1')if s is not None else s\n for s in m.groups()]\n if libcinit and not lib:\n lib='libc'\n elif glibc:\n if lib !='glibc':\n lib='glibc'\n version=glibcversion\n elif glibcversion >version:\n version=glibcversion\n elif so:\n if lib !='glibc':\n lib='libc'\n if soversion and soversion >version:\n version=soversion\n if threads and version[-len(threads):]!=threads:\n version=version+threads\n pos=m.end()\n f.close()\n return lib,version\n \ndef _dist_try_harder(distname,version,id):\n\n ''\n\n\n\n\n\n \n if os.path.exists('/var/adm/inst-log/info'):\n \n distname='SuSE'\n for line in open('/var/adm/inst-log/info'):\n tv=line.split()\n if len(tv)==2:\n tag,value=tv\n else :\n continue\n if tag =='MIN_DIST_VERSION':\n version=value.strip()\n elif tag =='DIST_IDENT':\n values=value.split('-')\n id=values[2]\n return distname,version,id\n \n if os.path.exists('/etc/.installed'):\n \n for line in open('/etc/.installed'):\n pkg=line.split('-')\n if len(pkg)>=2 and pkg[0]=='OpenLinux':\n \n \n return'OpenLinux',pkg[1],id\n \n if os.path.isdir('/usr/lib/setup'):\n \n verfiles=os.listdir('/usr/lib/setup')\n for n in range(len(verfiles)-1,-1,-1):\n if verfiles[n][:14]!='slack-version-':\n del verfiles[n]\n if verfiles:\n verfiles.sort()\n distname='slackware'\n version=verfiles[-1][14:]\n return distname,version,id\n \n return distname,version,id\n \n_release_filename=re.compile(r'(\\w+)[-_](release|version)',re.ASCII)\n_lsb_release_version=re.compile(r'(.+)'\n' release '\n'([\\d.]+)'\n'[^(]*(?:\\((.+)\\))?',re.ASCII)\n_release_version=re.compile(r'([^0-9]+)'\n'(?: release )?'\n'([\\d.]+)'\n'[^(]*(?:\\((.+)\\))?',re.ASCII)\n\n\n\n\n\n\n_supported_dists=(\n'SuSE','debian','fedora','redhat','centos',\n'mandrake','mandriva','rocks','slackware','yellowdog','gentoo',\n'UnitedLinux','turbolinux','arch','mageia')\n\ndef _parse_release_file(firstline):\n\n\n\n\n version=''\n id=''\n \n \n m=_lsb_release_version.match(firstline)\n if m is not None :\n \n return tuple(m.groups())\n \n \n m=_release_version.match(firstline)\n if m is not None :\n return tuple(m.groups())\n \n \n l=firstline.strip().split()\n if l:\n version=l[0]\n if len(l)>1:\n id=l[1]\n return'',version,id\n \ndef linux_distribution(distname='',version='',id='',\n\nsupported_dists=_supported_dists,\nfull_distribution_name=1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n etc=os.listdir('/etc')\n except os.error:\n \n return distname,version,id\n etc.sort()\n for file in etc:\n m=_release_filename.match(file)\n if m is not None :\n _distname,dummy=m.groups()\n if _distname in supported_dists:\n distname=_distname\n break\n else :\n return _dist_try_harder(distname,version,id)\n \n \n with open('/etc/'+file,'r')as f:\n firstline=f.readline()\n _distname,_version,_id=_parse_release_file(firstline)\n \n if _distname and full_distribution_name:\n distname=_distname\n if _version:\n version=_version\n if _id:\n id=_id\n return distname,version,id\n \n \n \ndef dist(distname='',version='',id='',\n\nsupported_dists=_supported_dists):\n\n ''\n\n\n\n\n\n\n\n\n \n return linux_distribution(distname,version,id,\n supported_dists=supported_dists,\n full_distribution_name=0)\n \ndef popen(cmd,mode='r',bufsize=-1):\n\n ''\n \n import warnings\n warnings.warn('use os.popen instead',DeprecationWarning,stacklevel=2)\n return os.popen(cmd,mode,bufsize)\n \ndef _norm_version(version,build=''):\n\n ''\n\n \n l=version.split('.')\n if build:\n l.append(build)\n try :\n ints=map(int,l)\n except ValueError:\n strings=l\n else :\n strings=list(map(str,ints))\n version='.'.join(strings[:3])\n return version\n \n_ver_output=re.compile(r'(?:([\\w ]+) ([\\w.]+) '\n'.*'\n'\\[.* ([\\d.]+)\\])')\n\n\n\n\n\n\n\n\n\n\ndef _syscmd_ver(system='',release='',version='',\n\nsupported_platforms=('win32','win16','dos','os2')):\n\n ''\n\n\n\n\n\n\n\n\n \n if sys.platform not in supported_platforms:\n return system,release,version\n \n \n for cmd in ('ver','command /c ver','cmd /c ver'):\n try :\n pipe=popen(cmd)\n info=pipe.read()\n if pipe.close():\n raise os.error('command failed')\n \n \n except os.error as why:\n \n continue\n except IOError as why:\n \n continue\n else :\n break\n else :\n return system,release,version\n \n \n info=info.strip()\n m=_ver_output.match(info)\n if m is not None :\n system,release,version=m.groups()\n \n if release[-1]=='.':\n release=release[:-1]\n if version[-1]=='.':\n version=version[:-1]\n \n \n version=_norm_version(version)\n return system,release,version\n \ndef _win32_getvalue(key,name,default=''):\n\n ''\n\n\n\n \n try :\n \n from win32api import RegQueryValueEx\n except ImportError:\n \n import winreg\n RegQueryValueEx=winreg.QueryValueEx\n try :\n return RegQueryValueEx(key,name)\n except :\n return default\n \ndef win32_ver(release='',version='',csd='',ptype=''):\n\n ''\n\n\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 import win32api\n from win32api import RegQueryValueEx,RegOpenKeyEx, RegCloseKey,GetVersionEx\n from win32con import HKEY_LOCAL_MACHINE,VER_PLATFORM_WIN32_NT, VER_PLATFORM_WIN32_WINDOWS,VER_NT_WORKSTATION\n except ImportError:\n \n try :\n sys.getwindowsversion\n except AttributeError:\n \n return release,version,csd,ptype\n else :\n \n \n import winreg\n GetVersionEx=sys.getwindowsversion\n RegQueryValueEx=winreg.QueryValueEx\n RegOpenKeyEx=winreg.OpenKeyEx\n RegCloseKey=winreg.CloseKey\n HKEY_LOCAL_MACHINE=winreg.HKEY_LOCAL_MACHINE\n VER_PLATFORM_WIN32_WINDOWS=1\n VER_PLATFORM_WIN32_NT=2\n VER_NT_WORKSTATION=1\n VER_NT_SERVER=3\n REG_SZ=1\n \n \n winver=GetVersionEx()\n maj,min,buildno,plat,csd=winver\n version='%i.%i.%i'%(maj,min,buildno&0xFFFF)\n if hasattr(winver,\"service_pack\"):\n if winver.service_pack !=\"\":\n csd='SP%s'%winver.service_pack_major\n else :\n if csd[:13]=='Service Pack ':\n csd='SP'+csd[13:]\n \n if plat ==VER_PLATFORM_WIN32_WINDOWS:\n regkey='SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion'\n \n if maj ==4:\n if min ==0:\n release='95'\n elif min ==10:\n release='98'\n elif min ==90:\n release='Me'\n else :\n release='postMe'\n elif maj ==5:\n release='2000'\n \n elif plat ==VER_PLATFORM_WIN32_NT:\n regkey='SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion'\n if maj <=4:\n release='NT'\n elif maj ==5:\n if min ==0:\n release='2000'\n elif min ==1:\n release='XP'\n elif min ==2:\n release='2003Server'\n else :\n release='post2003'\n elif maj ==6:\n if hasattr(winver,\"product_type\"):\n product_type=winver.product_type\n else :\n product_type=VER_NT_WORKSTATION\n \n \n \n try :\n key=RegOpenKeyEx(HKEY_LOCAL_MACHINE,regkey)\n name,type=RegQueryValueEx(key,\"ProductName\")\n \n if type ==REG_SZ and name.find(\"Server\")!=-1:\n product_type=VER_NT_SERVER\n except WindowsError:\n \n pass\n \n if min ==0:\n if product_type ==VER_NT_WORKSTATION:\n release='Vista'\n else :\n release='2008Server'\n elif min ==1:\n if product_type ==VER_NT_WORKSTATION:\n release='7'\n else :\n release='2008ServerR2'\n elif min ==2:\n if product_type ==VER_NT_WORKSTATION:\n release='8'\n else :\n release='2012Server'\n else :\n release='post2012Server'\n \n else :\n if not release:\n \n release='%i.%i'%(maj,min)\n return release,version,csd,ptype\n \n \n try :\n keyCurVer=RegOpenKeyEx(HKEY_LOCAL_MACHINE,regkey)\n \n RegQueryValueEx(keyCurVer,'SystemRoot')\n except :\n return release,version,csd,ptype\n \n \n \n \n \n \n \n build=_win32_getvalue(keyCurVer,\n 'CurrentBuildNumber',\n ('',1))[0]\n ptype=_win32_getvalue(keyCurVer,\n 'CurrentType',\n (ptype,1))[0]\n \n \n version=_norm_version(version,build)\n \n \n RegCloseKey(keyCurVer)\n return release,version,csd,ptype\n \ndef _mac_ver_lookup(selectors,default=None ):\n\n from _gestalt import gestalt\n l=[]\n append=l.append\n for selector in selectors:\n try :\n append(gestalt(selector))\n except (RuntimeError,OSError):\n append(default)\n return l\n \ndef _bcd2str(bcd):\n\n return hex(bcd)[2:]\n \ndef _mac_ver_gestalt():\n ''\n\n\n\n\n\n \n \n try :\n import _gestalt\n except ImportError:\n return None\n \n sysv,sysa=_mac_ver_lookup(('sysv','sysa'))\n \n if sysv:\n major=(sysv&0xFF00)>>8\n minor=(sysv&0x00F0)>>4\n patch=(sysv&0x000F)\n \n if (major,minor)>=(10,4):\n \n \n \n \n \n major,minor,patch=_mac_ver_lookup(('sys1','sys2','sys3'))\n release='%i.%i.%i'%(major,minor,patch)\n else :\n release='%s.%i.%i'%(_bcd2str(major),minor,patch)\n \n if sysa:\n machine={0x1:'68k',\n 0x2:'PowerPC',\n 0xa:'i386'}.get(sysa,'')\n \n versioninfo=('','','')\n return release,versioninfo,machine\n \ndef _mac_ver_xml():\n fn='/System/Library/CoreServices/SystemVersion.plist'\n if not os.path.exists(fn):\n return None\n \n try :\n import plistlib\n except ImportError:\n return None\n \n pl=plistlib.readPlist(fn)\n release=pl['ProductVersion']\n versioninfo=('','','')\n machine=os.uname().machine\n if machine in ('ppc','Power Macintosh'):\n \n machine='PowerPC'\n \n return release,versioninfo,machine\n \n \ndef mac_ver(release='',versioninfo=('','',''),machine=''):\n\n ''\n\n\n\n\n\n \n \n \n \n info=_mac_ver_xml()\n if info is not None :\n return info\n \n \n \n info=_mac_ver_gestalt()\n if info is not None :\n return info\n \n \n return release,versioninfo,machine\n \ndef _java_getprop(name,default):\n\n from java.lang import System\n try :\n value=System.getProperty(name)\n if value is None :\n return default\n return value\n except AttributeError:\n return default\n \ndef java_ver(release='',vendor='',vminfo=('','',''),osinfo=('','','')):\n\n ''\n\n\n\n\n\n\n\n\n \n \n try :\n import java.lang\n except ImportError:\n return release,vendor,vminfo,osinfo\n \n vendor=_java_getprop('java.vendor',vendor)\n release=_java_getprop('java.version',release)\n vm_name,vm_release,vm_vendor=vminfo\n vm_name=_java_getprop('java.vm.name',vm_name)\n vm_vendor=_java_getprop('java.vm.vendor',vm_vendor)\n vm_release=_java_getprop('java.vm.version',vm_release)\n vminfo=vm_name,vm_release,vm_vendor\n os_name,os_version,os_arch=osinfo\n os_arch=_java_getprop('java.os.arch',os_arch)\n os_name=_java_getprop('java.os.name',os_name)\n os_version=_java_getprop('java.os.version',os_version)\n osinfo=os_name,os_version,os_arch\n \n return release,vendor,vminfo,osinfo\n \n \n \ndef system_alias(system,release,version):\n\n ''\n\n\n\n\n\n \n if system =='Rhapsody':\n \n \n return'MacOS X Server',system+release,version\n \n elif system =='SunOS':\n \n if release <'5':\n \n return system,release,version\n \n l=release.split('.')\n if l:\n try :\n major=int(l[0])\n except ValueError:\n pass\n else :\n major=major -3\n l[0]=str(major)\n release='.'.join(l)\n if release <'6':\n system='Solaris'\n else :\n \n system='Solaris'\n \n elif system =='IRIX64':\n \n \n \n system='IRIX'\n if version:\n version=version+' (64bit)'\n else :\n version='64bit'\n \n elif system in ('win32','win16'):\n \n system='Windows'\n \n return system,release,version\n \n \n \ndef _platform(*args):\n\n ''\n\n \n \n platform='-'.join(x.strip()for x in filter(len,args))\n \n \n platform=platform.replace(' ','_')\n platform=platform.replace('/','-')\n platform=platform.replace('\\\\','-')\n platform=platform.replace(':','-')\n platform=platform.replace(';','-')\n platform=platform.replace('\"','-')\n platform=platform.replace('(','-')\n platform=platform.replace(')','-')\n \n \n platform=platform.replace('unknown','')\n \n \n while 1:\n cleaned=platform.replace('--','-')\n if cleaned ==platform:\n break\n platform=cleaned\n while platform[-1]=='-':\n platform=platform[:-1]\n \n return platform\n \ndef _node(default=''):\n\n ''\n \n try :\n import socket\n except ImportError:\n \n return default\n try :\n return socket.gethostname()\n except socket.error:\n \n return default\n \ndef _follow_symlinks(filepath):\n\n ''\n\n \n filepath=os.path.abspath(filepath)\n while os.path.islink(filepath):\n filepath=os.path.normpath(\n os.path.join(os.path.dirname(filepath),os.readlink(filepath)))\n return filepath\n \ndef _syscmd_uname(option,default=''):\n\n ''\n \n if sys.platform in ('dos','win32','win16','os2'):\n \n return default\n try :\n f=os.popen('uname %s 2> %s'%(option,DEV_NULL))\n except (AttributeError,os.error):\n return default\n output=f.read().strip()\n rc=f.close()\n if not output or rc:\n return default\n else :\n return output\n \ndef _syscmd_file(target,default=''):\n\n ''\n\n\n\n\n\n \n if sys.platform in ('dos','win32','win16','os2'):\n \n return default\n target=_follow_symlinks(target)\n try :\n proc=subprocess.Popen(['file',target],\n stdout=subprocess.PIPE,stderr=subprocess.STDOUT)\n \n except (AttributeError,os.error):\n return default\n output=proc.communicate()[0].decode('latin-1')\n rc=proc.wait()\n if not output or rc:\n return default\n else :\n return output\n \n \n \n \n \n_default_architecture={\n'win32':('','WindowsPE'),\n'win16':('','Windows'),\n'dos':('','MSDOS'),\n}\n\ndef architecture(executable=sys.executable,bits='',linkage=''):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n if not bits:\n import struct\n try :\n size=struct.calcsize('P')\n except struct.error:\n \n size=struct.calcsize('l')\n bits=str(size *8)+'bit'\n \n \n if executable:\n fileout=_syscmd_file(executable,'')\n else :\n fileout=''\n \n if not fileout and executable ==sys.executable:\n \n \n if sys.platform in _default_architecture:\n b,l=_default_architecture[sys.platform]\n if b:\n bits=b\n if l:\n linkage=l\n return bits,linkage\n \n if'executable'not in fileout:\n \n return bits,linkage\n \n \n if'32-bit'in fileout:\n bits='32bit'\n elif'N32'in fileout:\n \n bits='n32bit'\n elif'64-bit'in fileout:\n bits='64bit'\n \n \n if'ELF'in fileout:\n linkage='ELF'\n elif'PE'in fileout:\n \n if'Windows'in fileout:\n linkage='WindowsPE'\n else :\n linkage='PE'\n elif'COFF'in fileout:\n linkage='COFF'\n elif'MS-DOS'in fileout:\n linkage='MSDOS'\n else :\n \n pass\n \n return bits,linkage\n \n \n \nuname_result=collections.namedtuple(\"uname_result\",\n\"system node release version machine processor\")\n\n_uname_cache=None\n\ndef uname():\n\n ''\n\n\n\n\n\n\n\n\n \n global _uname_cache\n no_os_uname=0\n \n if _uname_cache is not None :\n return _uname_cache\n \n processor=''\n \n \n try :\n system,node,release,version,machine=os.uname()\n except AttributeError:\n no_os_uname=1\n \n if no_os_uname or not list(filter(None ,(system,node,release,version,machine))):\n \n \n if no_os_uname:\n system=sys.platform\n release=''\n version=''\n node=_node()\n machine=''\n \n use_syscmd_ver=1\n \n \n if system =='win32':\n release,version,csd,ptype=win32_ver()\n if release and version:\n use_syscmd_ver=0\n \n \n \n \n if not machine:\n \n if\"PROCESSOR_ARCHITEW6432\"in os.environ:\n machine=os.environ.get(\"PROCESSOR_ARCHITEW6432\",'')\n else :\n machine=os.environ.get('PROCESSOR_ARCHITECTURE','')\n if not processor:\n processor=os.environ.get('PROCESSOR_IDENTIFIER',machine)\n \n \n \n if use_syscmd_ver:\n system,release,version=_syscmd_ver(system)\n \n \n if system =='Microsoft Windows':\n system='Windows'\n elif system =='Microsoft'and release =='Windows':\n \n \n \n \n system='Windows'\n if'6.0'==version[:3]:\n release='Vista'\n else :\n release=''\n \n \n \n if system in ('win32','win16'):\n if not version:\n if system =='win32':\n version='32bit'\n else :\n version='16bit'\n system='Windows'\n \n elif system[:4]=='java':\n release,vendor,vminfo,osinfo=java_ver()\n system='Java'\n version=', '.join(vminfo)\n if not version:\n version=vendor\n \n \n if system =='OpenVMS':\n \n if not release or release =='0':\n release=version\n version=''\n \n try :\n import vms_lib\n except ImportError:\n pass\n else :\n csid,cpu_number=vms_lib.getsyi('SYI$_CPU',0)\n if (cpu_number >=128):\n processor='Alpha'\n else :\n processor='VAX'\n if not processor:\n \n processor=_syscmd_uname('-p','')\n \n \n if system =='unknown':\n system=''\n if node =='unknown':\n node=''\n if release =='unknown':\n release=''\n if version =='unknown':\n version=''\n if machine =='unknown':\n machine=''\n if processor =='unknown':\n processor=''\n \n \n if system =='Microsoft'and release =='Windows':\n system='Windows'\n release='Vista'\n \n _uname_cache=uname_result(system,node,release,version,machine,processor)\n return _uname_cache\n \n \n \ndef system():\n\n ''\n\n\n\n \n return uname().system\n \ndef node():\n\n ''\n\n\n\n\n \n return uname().node\n \ndef release():\n\n ''\n\n\n\n \n return uname().release\n \ndef version():\n\n ''\n\n\n\n \n return uname().version\n \ndef machine():\n\n ''\n\n\n\n \n return uname().machine\n \ndef processor():\n\n ''\n\n\n\n\n\n\n \n return uname().processor\n \n \n \n_sys_version_parser=re.compile(\nr'([\\w.+]+)\\s*'\n'\\(#?([^,]+),\\s*([\\w ]+),\\s*([\\w :]+)\\)\\s*'\n'\\[([^\\]]+)\\]?',re.ASCII)\n\n_ironpython_sys_version_parser=re.compile(\nr'IronPython\\s*'\n'([\\d\\.]+)'\n'(?: \\(([\\d\\.]+)\\))?'\n' on (.NET [\\d\\.]+)',re.ASCII)\n\n\n_ironpython26_sys_version_parser=re.compile(\nr'([\\d.]+)\\s*'\n'\\(IronPython\\s*'\n'[\\d.]+\\s*'\n'\\(([\\d.]+)\\) on ([\\w.]+ [\\d.]+(?: \\(\\d+-bit\\))?)\\)'\n)\n\n_pypy_sys_version_parser=re.compile(\nr'([\\w.+]+)\\s*'\n'\\(#?([^,]+),\\s*([\\w ]+),\\s*([\\w :]+)\\)\\s*'\n'\\[PyPy [^\\]]+\\]?')\n\n_sys_version_cache={}\n\ndef _sys_version(sys_version=None ):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if sys_version is None :\n sys_version=sys.version\n \n \n result=_sys_version_cache.get(sys_version,None )\n if result is not None :\n return result\n \n \n \n if'Brython'in sys_version:\n \n name='Brython'\n _parser=re.compile(\"^(\\d+\\.\\d+\\.\\d+)[^[]+\\[(.*)\\]\")\n \n match=_parser.match(sys_version)\n \n if match is None :\n raise ValueError(\n 'failed to parse Brython sys.version: %s'%\n repr(sys_version))\n \n \n version,compiler=match.groups()\n alt_version=''\n buildno=''\n builddate=''\n \n elif'IronPython'in sys_version:\n \n name='IronPython'\n if sys_version.startswith('IronPython'):\n match=_ironpython_sys_version_parser.match(sys_version)\n else :\n match=_ironpython26_sys_version_parser.match(sys_version)\n \n if match is None :\n raise ValueError(\n 'failed to parse IronPython sys.version: %s'%\n repr(sys_version))\n \n version,alt_version,compiler=match.groups()\n buildno=''\n builddate=''\n \n elif sys.platform.startswith('java'):\n \n name='Jython'\n match=_sys_version_parser.match(sys_version)\n if match is None :\n raise ValueError(\n 'failed to parse Jython sys.version: %s'%\n repr(sys_version))\n version,buildno,builddate,buildtime,_=match.groups()\n compiler=sys.platform\n \n elif\"PyPy\"in sys_version:\n \n name=\"PyPy\"\n match=_pypy_sys_version_parser.match(sys_version)\n if match is None :\n raise ValueError(\"failed to parse PyPy sys.version: %s\"%\n repr(sys_version))\n version,buildno,builddate,buildtime=match.groups()\n compiler=\"\"\n \n else :\n \n match=_sys_version_parser.match(sys_version)\n if match is None :\n raise ValueError(\n 'failed to parse CPython sys.version: %s'%\n repr(sys_version))\n version,buildno,builddate,buildtime,compiler= match.groups()\n name='CPython'\n builddate=builddate+' '+buildtime\n \n if hasattr(sys,'_mercurial'):\n _,branch,revision=sys._mercurial\n elif hasattr(sys,'subversion'):\n \n _,branch,revision=sys.subversion\n else :\n branch=''\n revision=''\n \n \n l=version.split('.')\n if len(l)==2:\n l.append('0')\n version='.'.join(l)\n \n \n result=(name,version,branch,revision,buildno,builddate,compiler)\n _sys_version_cache[sys_version]=result\n return result\n \ndef python_implementation():\n\n ''\n\n\n\n\n\n\n\n \n return _sys_version()[0]\n \ndef python_version():\n\n ''\n\n\n\n\n \n return _sys_version()[1]\n \ndef python_version_tuple():\n\n ''\n\n\n\n\n\n \n return tuple(_sys_version()[1].split('.'))\n \ndef python_branch():\n\n ''\n\n\n\n\n\n\n\n \n \n return _sys_version()[2]\n \ndef python_revision():\n\n ''\n\n\n\n\n\n\n\n \n return _sys_version()[3]\n \ndef python_build():\n\n ''\n\n\n \n return _sys_version()[4:6]\n \ndef python_compiler():\n\n ''\n\n\n \n return _sys_version()[6]\n \n \n \n_platform_cache={}\n\ndef platform(aliased=0,terse=0):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n result=_platform_cache.get((aliased,terse),None )\n if result is not None :\n return result\n \n \n \n system,node,release,version,machine,processor=uname()\n if machine ==processor:\n processor=''\n if aliased:\n system,release,version=system_alias(system,release,version)\n \n if system =='Windows':\n \n rel,vers,csd,ptype=win32_ver(version)\n if terse:\n platform=_platform(system,release)\n else :\n platform=_platform(system,release,version,csd)\n \n elif system in ('Linux',):\n \n distname,distversion,distid=dist('')\n if distname and not terse:\n platform=_platform(system,release,machine,processor,\n 'with',\n distname,distversion,distid)\n else :\n \n libcname,libcversion=libc_ver(sys.executable)\n platform=_platform(system,release,machine,processor,\n 'with',\n libcname+libcversion)\n elif system =='Java':\n \n r,v,vminfo,(os_name,os_version,os_arch)=java_ver()\n if terse or not os_name:\n platform=_platform(system,release,version)\n else :\n platform=_platform(system,release,version,\n 'on',\n os_name,os_version,os_arch)\n \n elif system =='MacOS':\n \n if terse:\n platform=_platform(system,release)\n else :\n platform=_platform(system,release,machine)\n \n else :\n \n if terse:\n platform=_platform(system,release)\n else :\n bits,linkage=architecture(sys.executable)\n platform=_platform(system,release,machine,processor,bits,linkage)\n \n _platform_cache[(aliased,terse)]=platform\n return platform\n \n \n \nif __name__ =='__main__':\n\n terse=('terse'in sys.argv or'--terse'in sys.argv)\n aliased=(not'nonaliased'in sys.argv and not'--nonaliased'in sys.argv)\n print(platform(aliased,terse))\n sys.exit(0)\n"], "site": [".py", "import sys\n"], "timeit": [".py", "#! /usr/bin/python3.4\n\n\"\"\"Tool for measuring execution time of small code snippets.\n\nThis module avoids a number of common traps for measuring execution\ntimes. See also Tim Peters' introduction to the Algorithms chapter in\nthe Python Cookbook, published by O'Reilly.\n\nLibrary usage: see the Timer class.\n\nCommand line usage:\n python timeit.py [-n N] [-r N] [-s S] [-t] [-c] [-p] [-h] [--] [statement]\n\nOptions:\n -n/--number N: how many times to execute 'statement' (default: see below)\n -r/--repeat N: how many times to repeat the timer (default 3)\n -s/--setup S: statement to be executed once initially (default 'pass')\n -p/--process: use time.process_time() (default is time.perf_counter())\n -t/--time: use time.time() (deprecated)\n -c/--clock: use time.clock() (deprecated)\n -v/--verbose: print raw timing results; repeat for more digits precision\n -h/--help: print this usage message and exit\n --: separate options from statement, use when statement starts with -\n statement: statement to be timed (default 'pass')\n\nA multi-line statement may be given by specifying each line as a\nseparate argument; indented lines are possible by enclosing an\nargument in quotes and using leading spaces. Multiple -s options are\ntreated similarly.\n\nIf -n is not given, a suitable number of loops is calculated by trying\nsuccessive powers of 10 until the total time is at least 0.2 seconds.\n\nNote: there is a certain baseline overhead associated with executing a\npass statement. It differs between versions. The code here doesn't try\nto hide it, but you should be aware of it. The baseline overhead can be\nmeasured by invoking the program without arguments.\n\nClasses:\n\n Timer\n\nFunctions:\n\n timeit(string, string) -> float\n repeat(string, string) -> list\n default_timer() -> float\n\n\"\"\"\n\nimport gc\nimport sys\nimport time\nimport itertools\n\n__all__=[\"Timer\",\"timeit\",\"repeat\",\"default_timer\"]\n\ndummy_src_name=\"\"\ndefault_number=1000000\ndefault_repeat=3\ndefault_timer=time.perf_counter\n\n\n\n\ntemplate=\"\"\"\ndef inner(_it, _timer):\n {setup}\n _t0 = _timer()\n for _i in _it:\n {stmt}\n _t1 = _timer()\n return _t1 - _t0\n\"\"\"\n\ndef reindent(src,indent):\n ''\n return src.replace(\"\\n\",\"\\n\"+\" \"*indent)\n \ndef _template_func(setup,func):\n ''\n def inner(_it,_timer,_func=func):\n setup()\n _t0=_timer()\n for _i in _it:\n _func()\n _t1=_timer()\n return _t1 -_t0\n return inner\n \nclass Timer:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,stmt=\"pass\",setup=\"pass\",timer=default_timer):\n ''\n self.timer=timer\n ns={}\n if isinstance(stmt,str):\n stmt=reindent(stmt,8)\n if isinstance(setup,str):\n setup=reindent(setup,4)\n src=template.format(stmt=stmt,setup=setup)\n elif callable(setup):\n src=template.format(stmt=stmt,setup='_setup()')\n ns['_setup']=setup\n else :\n raise ValueError(\"setup is neither a string nor callable\")\n self.src=src\n code=compile(src,dummy_src_name,\"exec\")\n exec(code,globals(),ns)\n self.inner=ns[\"inner\"]\n elif callable(stmt):\n self.src=None\n if isinstance(setup,str):\n _setup=setup\n def setup():\n exec(_setup,globals(),ns)\n elif not callable(setup):\n raise ValueError(\"setup is neither a string nor callable\")\n self.inner=_template_func(setup,stmt)\n else :\n raise ValueError(\"stmt is neither a string nor callable\")\n \n def print_exc(self,file=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n import linecache,traceback\n if self.src is not None :\n linecache.cache[dummy_src_name]=(len(self.src),\n None ,\n self.src.split(\"\\n\"),\n dummy_src_name)\n \n \n traceback.print_exc(file=file)\n \n def timeit(self,number=default_number):\n ''\n\n\n\n\n\n\n\n \n it=itertools.repeat(None ,number)\n gcold=gc.isenabled()\n gc.disable()\n try :\n timing=self.inner(it,self.timer)\n finally :\n if gcold:\n gc.enable()\n return timing\n \n def repeat(self,repeat=default_repeat,number=default_number):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n r=[]\n for i in range(repeat):\n t=self.timeit(number)\n r.append(t)\n return r\n \ndef timeit(stmt=\"pass\",setup=\"pass\",timer=default_timer,\nnumber=default_number):\n ''\n return Timer(stmt,setup,timer).timeit(number)\n \ndef repeat(stmt=\"pass\",setup=\"pass\",timer=default_timer,\nrepeat=default_repeat,number=default_number):\n ''\n return Timer(stmt,setup,timer).repeat(repeat,number)\n \ndef main(args=None ,*,_wrap_timer=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if args is None :\n args=sys.argv[1:]\n import getopt\n try :\n opts,args=getopt.getopt(args,\"n:s:r:tcpvh\",\n [\"number=\",\"setup=\",\"repeat=\",\n \"time\",\"clock\",\"process\",\n \"verbose\",\"help\"])\n except getopt.error as err:\n print(err)\n print(\"use -h/--help for command line help\")\n return 2\n timer=default_timer\n stmt=\"\\n\".join(args)or\"pass\"\n number=0\n setup=[]\n repeat=default_repeat\n verbose=0\n precision=3\n for o,a in opts:\n if o in (\"-n\",\"--number\"):\n number=int(a)\n if o in (\"-s\",\"--setup\"):\n setup.append(a)\n if o in (\"-r\",\"--repeat\"):\n repeat=int(a)\n if repeat <=0:\n repeat=1\n if o in (\"-t\",\"--time\"):\n timer=time.time\n if o in (\"-c\",\"--clock\"):\n timer=time.clock\n if o in (\"-p\",\"--process\"):\n timer=time.process_time\n if o in (\"-v\",\"--verbose\"):\n if verbose:\n precision +=1\n verbose +=1\n if o in (\"-h\",\"--help\"):\n print(__doc__,end=' ')\n return 0\n setup=\"\\n\".join(setup)or\"pass\"\n \n \n \n import os\n sys.path.insert(0,os.curdir)\n if _wrap_timer is not None :\n timer=_wrap_timer(timer)\n t=Timer(stmt,setup,timer)\n if number ==0:\n \n for i in range(1,10):\n number=10 **i\n try :\n x=t.timeit(number)\n except :\n t.print_exc()\n return 1\n if verbose:\n print(\"%d loops -> %.*g secs\"%(number,precision,x))\n if x >=0.2:\n break\n try :\n r=t.repeat(repeat,number)\n except :\n t.print_exc()\n return 1\n best=min(r)\n if verbose:\n print(\"raw times:\",\" \".join([\"%.*g\"%(precision,x)for x in r]))\n print(\"%d loops,\"%number,end=' ')\n usec=best *1e6 /number\n if usec <1000:\n print(\"best of %d: %.*g usec per loop\"%(repeat,precision,usec))\n else :\n msec=usec /1000\n if msec <1000:\n print(\"best of %d: %.*g msec per loop\"%(repeat,precision,msec))\n else :\n sec=msec /1000\n print(\"best of %d: %.*g sec per loop\"%(repeat,precision,sec))\n return None\n \nif __name__ ==\"__main__\":\n sys.exit(main())\n"], "builtins": [".js", "var $module = (function(){\n var obj = {__class__:__BRYTHON__.$ModuleDict,__name__:'builtins'}\n var 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 for(var i=0, _len_i = builtin_names.length; i < _len_i;i++){\n try{eval(\"obj['\"+builtin_names[i]+\"']=__BRYTHON__.builtins.\"+builtin_names[i])}\n catch(err){if (__BRYTHON__.$debug) {console.log(err)}}\n }\n return obj\n})()\n"], "stat": [".py", "''\n\n\n\n\n\n\nST_MODE=0\nST_INO=1\nST_DEV=2\nST_NLINK=3\nST_UID=4\nST_GID=5\nST_SIZE=6\nST_ATIME=7\nST_MTIME=8\nST_CTIME=9\n\n\n\ndef S_IMODE(mode):\n ''\n\n \n return mode&0o7777\n \ndef S_IFMT(mode):\n ''\n\n \n return mode&0o170000\n \n \n \n \nS_IFDIR=0o040000\nS_IFCHR=0o020000\nS_IFBLK=0o060000\nS_IFREG=0o100000\nS_IFIFO=0o010000\nS_IFLNK=0o120000\nS_IFSOCK=0o140000\n\n\n\ndef S_ISDIR(mode):\n ''\n return S_IFMT(mode)==S_IFDIR\n \ndef S_ISCHR(mode):\n ''\n return S_IFMT(mode)==S_IFCHR\n \ndef S_ISBLK(mode):\n ''\n return S_IFMT(mode)==S_IFBLK\n \ndef S_ISREG(mode):\n ''\n return S_IFMT(mode)==S_IFREG\n \ndef S_ISFIFO(mode):\n ''\n return S_IFMT(mode)==S_IFIFO\n \ndef S_ISLNK(mode):\n ''\n return S_IFMT(mode)==S_IFLNK\n \ndef S_ISSOCK(mode):\n ''\n return S_IFMT(mode)==S_IFSOCK\n \n \n \nS_ISUID=0o4000\nS_ISGID=0o2000\nS_ENFMT=S_ISGID\nS_ISVTX=0o1000\nS_IREAD=0o0400\nS_IWRITE=0o0200\nS_IEXEC=0o0100\nS_IRWXU=0o0700\nS_IRUSR=0o0400\nS_IWUSR=0o0200\nS_IXUSR=0o0100\nS_IRWXG=0o0070\nS_IRGRP=0o0040\nS_IWGRP=0o0020\nS_IXGRP=0o0010\nS_IRWXO=0o0007\nS_IROTH=0o0004\nS_IWOTH=0o0002\nS_IXOTH=0o0001\n\n\n\nUF_NODUMP=0x00000001\nUF_IMMUTABLE=0x00000002\nUF_APPEND=0x00000004\nUF_OPAQUE=0x00000008\nUF_NOUNLINK=0x00000010\nUF_COMPRESSED=0x00000020\nUF_HIDDEN=0x00008000\nSF_ARCHIVED=0x00010000\nSF_IMMUTABLE=0x00020000\nSF_APPEND=0x00040000\nSF_NOUNLINK=0x00100000\nSF_SNAPSHOT=0x00200000\n\n\n_filemode_table=(\n((S_IFLNK,\"l\"),\n(S_IFREG,\"-\"),\n(S_IFBLK,\"b\"),\n(S_IFDIR,\"d\"),\n(S_IFCHR,\"c\"),\n(S_IFIFO,\"p\")),\n\n((S_IRUSR,\"r\"),),\n((S_IWUSR,\"w\"),),\n((S_IXUSR |S_ISUID,\"s\"),\n(S_ISUID,\"S\"),\n(S_IXUSR,\"x\")),\n\n((S_IRGRP,\"r\"),),\n((S_IWGRP,\"w\"),),\n((S_IXGRP |S_ISGID,\"s\"),\n(S_ISGID,\"S\"),\n(S_IXGRP,\"x\")),\n\n((S_IROTH,\"r\"),),\n((S_IWOTH,\"w\"),),\n((S_IXOTH |S_ISVTX,\"t\"),\n(S_ISVTX,\"T\"),\n(S_IXOTH,\"x\"))\n)\n\ndef filemode(mode):\n ''\n perm=[]\n for table in _filemode_table:\n for bit,char in table:\n if mode&bit ==bit:\n perm.append(char)\n break\n else :\n perm.append(\"-\")\n return\"\".join(perm)\n"], "traceback": [".py", "import sys\nfrom browser import console\n\ndef print_exc(file=sys.stderr):\n exc=__BRYTHON__.current_exception\n if isinstance(exc,SyntaxError):\n file.write('\\n module %s line %s'%(exc.args[1],exc.args[2]))\n offset=exc.args[3]\n file.write('\\n '+exc.args[4])\n file.write('\\n '+offset *' '+'^')\n else :\n file.write(exc.info)\n file.write('\\n'+exc.__name__)\n if exc.args:\n file.write(': %s'%exc.args[0])\n file.write('\\n')\n \ndef format_exc(limit=None ,chain=True ):\n exc=__BRYTHON__.current_exception\n res=exc.info+'\\n'+exc.__name__\n if exc.args:\n res +=': '+exc.args[0]\n return res+'\\n'\n \ndef format_exception(_type,value,tb,limit=None ,chain=True ):\n return ['%s\\n'%_type,'%s\\n'%value]\n \ndef extract_tb(tb,limit=None ):\n return tb"], "_ajax": [".js", "// ajax\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nreturn {\n urlencode: function(params){\n var items = _b_.list(_b_.dict.$dict.items(params)), res=''\n for(var i=0, _len_i = items.length; i < _len_i;i++){\n var key = encodeURIComponent(_b_.str(items[i][0]));\n if (_b_.isinstance(items[i][1],_b_.list)) {\n for (j = 0; j < items[i][1].length; j++) {\n res += key +'=' + encodeURIComponent(_b_.str(items[i][1][j])) + '&'\n }\n } else {\n res += key + '=' + encodeURIComponent(_b_.str(items[i][1])) + '&'\n }\n }\n res = res.substr(0,res.length-1)\n return res\n }\n}\n\n})(__BRYTHON__)\n"], "external_import": [".py", "import os\nfrom browser import doc\nimport urllib.request\n\n\n\n\n\nclass ModuleFinder:\n def __init__(self,path_entry):\n print(\"external_import here..\")\n \n self._module=None\n if path_entry.startswith('http://'):\n self.path_entry=path_entry\n else :\n raise ImportError()\n \n def __str__(self):\n return'<%s for \"%s\">'%(self.__class__.__name__,self.path_entry)\n \n def find_module(self,fullname,path=None ):\n path=path or self.path_entry\n \n for _ext in ['js','pyj','py']:\n _fp,_url,_headers=urllib.request.urlopen(path+'/'+'%s.%s'%(fullname,_ext))\n self._module=_fp.read()\n _fp.close()\n if self._module is not None :\n print(\"module found at %s:%s\"%(path,fullname))\n return ModuleLoader(path,fullname,self._module)\n \n print('module %s not found'%fullname)\n raise ImportError()\n return None\n \nclass ModuleLoader:\n ''\n \n def __init__(self,filepath,name,module_source):\n self._filepath=filepath\n self._name=name\n self._module_source=module_source\n \n def get_source(self):\n return self._module_source\n \n def is_package(self):\n return'.'in self._name\n \n def load_module(self):\n if self._name in sys.modules:\n \n mod=sys.modules[self._name]\n return mod\n \n _src=self.get_source()\n if self._filepath.endswith('.js'):\n mod=JSObject(import_js_module(_src,self._filepath,self._name))\n elif self._filepath.endswith('.py'):\n mod=JSObject(import_py_module(_src,self._filepath,self._name))\n elif self._filepath.endswith('.pyj'):\n mod=JSObject(import_pyj_module(_src,self._filepath,self._name))\n else :\n raise ImportError('Invalid Module: %s'%self._filepath)\n \n \n mod.__file__=self._filepath\n mod.__name__=self._name\n mod.__path__=os.path.abspath(self._filepath)\n mod.__loader__=self\n mod.__package__='.'.join(self._name.split('.')[:-1])\n \n if self.is_package():\n print('adding path for package')\n \n \n mod.__path__=[self._filepath]\n else :\n print('imported as regular module')\n \n print('creating a new module object for \"%s\"'%self._name)\n sys.modules.setdefault(self._name,mod)\n JSObject(__BRYTHON__.imported)[self._name]=mod\n \n return mod\n"], "importlib.basehook": [".py", "from javascript import JSObject\nfrom browser import window\nimport urllib.request\n\nclass TempMod:\n def __init__(self,name):\n self.name=name\n \n \nclass BaseHook:\n def __init__(self,fullname=None ,path=None ):\n self._fullname=fullname\n self._path=path\n self._modpath=''\n self._module=''\n \n def find_module(self,name=None ,path=None ):\n if name is None :\n name=self._fullname\n \n for _i in ('libs/%s.js'%name,'Lib/%s.py'%name,\n 'Lib/%s/__init__.py'%name):\n _path=\"%s%s\"%(__BRYTHON__.brython_path,_i)\n try :\n _fp,_,_headers=urllib.request.urlopen(_path)\n if _headers['status']!=200:\n continue\n self._module=_fp.read()\n self._modpath=_path\n return self\n except urllib.error.HTTPError as e:\n self._modpath=''\n self._module=''\n \n raise ImportError\n \n def is_package(self):\n return'.'in self._fullname\n \n def load_module(self,name):\n if name is None :\n name=self._fullname\n window.eval('__BRYTHON__.imported[\"%s\"]={}'%name)\n return JSObject(__BRYTHON__.run_py)(self._module,\n self._modpath,TempMod(name))\n"], "csv": [".py", "\n\"\"\"\ncsv.py - read/write/investigate CSV files\n\"\"\"\n\nimport re\nfrom _csv import Error,__version__,writer,reader,register_dialect,unregister_dialect,get_dialect,list_dialects,field_size_limit,QUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONNUMERIC,QUOTE_NONE,__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\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 self.writerow(header)\n \n def _dict_to_list(self,rowdict):\n if self.extrasaction ==\"raise\":\n wrong_fields=[k for k in rowdict if k not in self.fieldnames]\n if wrong_fields:\n raise ValueError(\"dict contains fields not in fieldnames: \"\n +\", \".join(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 rows=[]\n for rowdict in rowdicts:\n rows.append(self._dict_to_list(rowdict))\n return self.writer.writerows(rows)\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= 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 ('(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?P=delim)',\n '(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?P[^\\w\\n\"\\'])(?P ?)',\n '(?P>[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?:$|\\n)',\n '(?:^|\\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 for m in matches:\n n=regexp.groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=regexp.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=regexp.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)|$)\"% {'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,min(chunkLength,len(data))\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(chunkLength *iteration)\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"], "encodings.cp1026": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1026',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x9c'\n'\\t'\n'\\x86'\n'\\x7f'\n'\\x97'\n'\\x8d'\n'\\x8e'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x9d'\n'\\x85'\n'\\x08'\n'\\x87'\n'\\x18'\n'\\x19'\n'\\x92'\n'\\x8f'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\n'\n'\\x17'\n'\\x1b'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x90'\n'\\x91'\n'\\x16'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x04'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x14'\n'\\x15'\n'\\x9e'\n'\\x1a'\n' '\n'\\xa0'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe1'\n'\\xe3'\n'\\xe5'\n'{'\n'\\xf1'\n'\\xc7'\n'.'\n'<'\n'('\n'+'\n'!'\n'&'\n'\\xe9'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xed'\n'\\xee'\n'\\xef'\n'\\xec'\n'\\xdf'\n'\\u011e'\n'\\u0130'\n'*'\n')'\n';'\n'^'\n'-'\n'/'\n'\\xc2'\n'\\xc4'\n'\\xc0'\n'\\xc1'\n'\\xc3'\n'\\xc5'\n'['\n'\\xd1'\n'\\u015f'\n','\n'%'\n'_'\n'>'\n'?'\n'\\xf8'\n'\\xc9'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\xcc'\n'\\u0131'\n':'\n'\\xd6'\n'\\u015e'\n\"'\"\n'='\n'\\xdc'\n'\\xd8'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'\\xab'\n'\\xbb'\n'}'\n'`'\n'\\xa6'\n'\\xb1'\n'\\xb0'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n'\\xaa'\n'\\xba'\n'\\xe6'\n'\\xb8'\n'\\xc6'\n'\\xa4'\n'\\xb5'\n'\\xf6'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'\\xa1'\n'\\xbf'\n']'\n'$'\n'@'\n'\\xae'\n'\\xa2'\n'\\xa3'\n'\\xa5'\n'\\xb7'\n'\\xa9'\n'\\xa7'\n'\\xb6'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xac'\n'|'\n'\\xaf'\n'\\xa8'\n'\\xb4'\n'\\xd7'\n'\\xe7'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'\\xad'\n'\\xf4'\n'~'\n'\\xf2'\n'\\xf3'\n'\\xf5'\n'\\u011f'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'\\xb9'\n'\\xfb'\n'\\\\'\n'\\xf9'\n'\\xfa'\n'\\xff'\n'\\xfc'\n'\\xf7'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'\\xb2'\n'\\xd4'\n'#'\n'\\xd2'\n'\\xd3'\n'\\xd5'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n'\\xb3'\n'\\xdb'\n'\"'\n'\\xd9'\n'\\xda'\n'\\x9f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "multiprocessing.util": [".py", "\n\n\n\n\n\n\n\n\nimport sys\nimport functools\nimport os\nimport itertools\nimport weakref\nimport atexit\nimport threading\n\nfrom subprocess import _args_from_interpreter_flags\n\nfrom multiprocessing.process import current_process,active_children\n\n__all__=[\n'sub_debug','debug','info','sub_warning','get_logger',\n'log_to_stderr','get_temp_dir','register_after_fork',\n'is_exiting','Finalize','ForkAwareThreadLock','ForkAwareLocal',\n'SUBDEBUG','SUBWARNING',\n]\n\n\n\n\n\nNOTSET=0\nSUBDEBUG=5\nDEBUG=10\nINFO=20\nSUBWARNING=25\n\nLOGGER_NAME='multiprocessing'\nDEFAULT_LOGGING_FORMAT='[%(levelname)s/%(processName)s] %(message)s'\n\n_logger=None\n_log_to_stderr=False\n\ndef sub_debug(msg,*args):\n if _logger:\n _logger.log(SUBDEBUG,msg,*args)\n \ndef debug(msg,*args):\n if _logger:\n _logger.log(DEBUG,msg,*args)\n \ndef info(msg,*args):\n if _logger:\n _logger.log(INFO,msg,*args)\n \ndef sub_warning(msg,*args):\n if _logger:\n _logger.log(SUBWARNING,msg,*args)\n \ndef get_logger():\n ''\n\n \n global _logger\n import logging\n \n logging._acquireLock()\n try :\n if not _logger:\n \n _logger=logging.getLogger(LOGGER_NAME)\n _logger.propagate=0\n logging.addLevelName(SUBDEBUG,'SUBDEBUG')\n logging.addLevelName(SUBWARNING,'SUBWARNING')\n \n \n if hasattr(atexit,'unregister'):\n atexit.unregister(_exit_function)\n atexit.register(_exit_function)\n else :\n atexit._exithandlers.remove((_exit_function,(),{}))\n atexit._exithandlers.append((_exit_function,(),{}))\n \n finally :\n logging._releaseLock()\n \n return _logger\n \ndef log_to_stderr(level=None ):\n ''\n\n \n global _log_to_stderr\n import logging\n \n logger=get_logger()\n formatter=logging.Formatter(DEFAULT_LOGGING_FORMAT)\n handler=logging.StreamHandler()\n handler.setFormatter(formatter)\n logger.addHandler(handler)\n \n if level:\n logger.setLevel(level)\n _log_to_stderr=True\n return _logger\n \n \n \n \n \ndef get_temp_dir():\n\n if current_process()._tempdir is None :\n import shutil,tempfile\n tempdir=tempfile.mkdtemp(prefix='pymp-')\n info('created temp directory %s',tempdir)\n Finalize(None ,shutil.rmtree,args=[tempdir],exitpriority=-100)\n current_process()._tempdir=tempdir\n return current_process()._tempdir\n \n \n \n \n \n_afterfork_registry=weakref.WeakValueDictionary()\n_afterfork_counter=itertools.count()\n\ndef _run_after_forkers():\n items=list(_afterfork_registry.items())\n items.sort()\n for (index,ident,func),obj in items:\n try :\n func(obj)\n except Exception as e:\n info('after forker raised exception %s',e)\n \ndef register_after_fork(obj,func):\n _afterfork_registry[(next(_afterfork_counter),id(obj),func)]=obj\n \n \n \n \n \n_finalizer_registry={}\n_finalizer_counter=itertools.count()\n\n\nclass Finalize(object):\n ''\n\n \n def __init__(self,obj,callback,args=(),kwargs=None ,exitpriority=None ):\n assert exitpriority is None or type(exitpriority)is int\n \n if obj is not None :\n self._weakref=weakref.ref(obj,self)\n else :\n assert exitpriority is not None\n \n self._callback=callback\n self._args=args\n self._kwargs=kwargs or {}\n self._key=(exitpriority,next(_finalizer_counter))\n self._pid=os.getpid()\n \n _finalizer_registry[self._key]=self\n \n def __call__(self,wr=None ,\n \n \n _finalizer_registry=_finalizer_registry,\n sub_debug=sub_debug,getpid=os.getpid):\n ''\n\n \n try :\n del _finalizer_registry[self._key]\n except KeyError:\n sub_debug('finalizer no longer registered')\n else :\n if self._pid !=getpid():\n sub_debug('finalizer ignored because different process')\n res=None\n else :\n sub_debug('finalizer calling %s with args %s and kwargs %s',\n self._callback,self._args,self._kwargs)\n res=self._callback(*self._args,**self._kwargs)\n self._weakref=self._callback=self._args= self._kwargs=self._key=None\n return res\n \n def cancel(self):\n ''\n\n \n try :\n del _finalizer_registry[self._key]\n except KeyError:\n pass\n else :\n self._weakref=self._callback=self._args= self._kwargs=self._key=None\n \n def still_active(self):\n ''\n\n \n return self._key in _finalizer_registry\n \n def __repr__(self):\n try :\n obj=self._weakref()\n except (AttributeError,TypeError):\n obj=None\n \n if obj is None :\n return''\n \n x=''\n \n \ndef _run_finalizers(minpriority=None ):\n ''\n\n\n\n\n \n if _finalizer_registry is None :\n \n \n \n return\n \n if minpriority is None :\n f=lambda p:p[0][0]is not None\n else :\n f=lambda p:p[0][0]is not None and p[0][0]>=minpriority\n \n items=[x for x in list(_finalizer_registry.items())if f(x)]\n items.sort(reverse=True )\n \n for key,finalizer in items:\n sub_debug('calling %s',finalizer)\n try :\n finalizer()\n except Exception:\n import traceback\n traceback.print_exc()\n \n if minpriority is None :\n _finalizer_registry.clear()\n \n \n \n \n \ndef is_exiting():\n ''\n\n \n return _exiting or _exiting is None\n \n_exiting=False\n\ndef _exit_function(info=info,debug=debug,_run_finalizers=_run_finalizers,\nactive_children=active_children,\ncurrent_process=current_process):\n\n\n\n\n global _exiting\n \n if not _exiting:\n _exiting=True\n \n info('process shutting down')\n debug('running all \"atexit\" finalizers with priority >= 0')\n _run_finalizers(0)\n \n if current_process()is not None :\n \n \n \n \n \n \n \n \n \n \n \n \n \n for p in active_children():\n if p._daemonic:\n info('calling terminate() for daemon %s',p.name)\n p._popen.terminate()\n \n for p in active_children():\n info('calling join() for process %s',p.name)\n p.join()\n \n debug('running the remaining \"atexit\" finalizers')\n _run_finalizers()\n \natexit.register(_exit_function)\n\n\n\n\n\nclass ForkAwareThreadLock(object):\n def __init__(self):\n self._reset()\n register_after_fork(self,ForkAwareThreadLock._reset)\n \n def _reset(self):\n self._lock=threading.Lock()\n self.acquire=self._lock.acquire\n self.release=self._lock.release\n \nclass ForkAwareLocal(threading.local):\n def __init__(self):\n register_after_fork(self,lambda obj:obj.__dict__.clear())\n def __reduce__(self):\n return type(self),()\n"], "heapq": [".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__about__=\"\"\"Heap queues\n\n[explanation by Fran\u00e7ois Pinard]\n\nHeaps are arrays for which a[k] <= a[2*k+1] and a[k] <= a[2*k+2] for\nall k, counting elements from 0. For the sake of comparison,\nnon-existing elements are considered to be infinite. The interesting\nproperty of a heap is that a[0] is always its smallest element.\n\nThe strange invariant above is meant to be an efficient memory\nrepresentation for a tournament. The numbers below are `k', not a[k]:\n\n 0\n\n 1 2\n\n 3 4 5 6\n\n 7 8 9 10 11 12 13 14\n\n 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30\n\n\nIn the tree above, each cell `k' is topping `2*k+1' and `2*k+2'. In\nan usual binary tournament we see in sports, each cell is the winner\nover the two cells it tops, and we can trace the winner down the tree\nto see all opponents s/he had. However, in many computer applications\nof such tournaments, we do not need to trace the history of a winner.\nTo be more memory efficient, when a winner is promoted, we try to\nreplace it by something else at a lower level, and the rule becomes\nthat a cell and the two cells it tops contain three different items,\nbut the top cell \"wins\" over the two topped cells.\n\nIf this heap invariant is protected at all time, index 0 is clearly\nthe overall winner. The simplest algorithmic way to remove it and\nfind the \"next\" winner is to move some loser (let's say cell 30 in the\ndiagram above) into the 0 position, and then percolate this new 0 down\nthe tree, exchanging values, until the invariant is re-established.\nThis is clearly logarithmic on the total number of items in the tree.\nBy iterating over all items, you get an O(n ln n) sort.\n\nA nice feature of this sort is that you can efficiently insert new\nitems while the sort is going on, provided that the inserted items are\nnot \"better\" than the last 0'th element you extracted. This is\nespecially useful in simulation contexts, where the tree holds all\nincoming events, and the \"win\" condition means the smallest scheduled\ntime. When an event schedule other events for execution, they are\nscheduled into the future, so they can easily go into the heap. So, a\nheap is a good structure for implementing schedulers (this is what I\nused for my MIDI sequencer :-).\n\nVarious structures for implementing schedulers have been extensively\nstudied, and heaps are good for this, as they are reasonably speedy,\nthe speed is almost constant, and the worst case is not much different\nthan the average case. However, there are other representations which\nare more efficient overall, yet the worst cases might be terrible.\n\nHeaps are also very useful in big disk sorts. You most probably all\nknow that a big sort implies producing \"runs\" (which are pre-sorted\nsequences, which size is usually related to the amount of CPU memory),\nfollowed by a merging passes for these runs, which merging is often\nvery cleverly organised[1]. It is very important that the initial\nsort produces the longest runs possible. Tournaments are a good way\nto that. If, using all the memory available to hold a tournament, you\nreplace and percolate items that happen to fit the current run, you'll\nproduce runs which are twice the size of the memory for random input,\nand much better for input fuzzily ordered.\n\nMoreover, if you output the 0'th item on disk and get an input which\nmay not fit in the current tournament (because the value \"wins\" over\nthe last output value), it cannot fit in the heap, so the size of the\nheap decreases. The freed memory could be cleverly reused immediately\nfor progressively building a second heap, which grows at exactly the\nsame rate the first heap is melting. When the first heap completely\nvanishes, you switch heaps and start a new run. Clever and quite\neffective!\n\nIn a word, heaps are useful memory structures to know. I use them in\na few applications, and I think it is good to keep a `heap' module\naround. :-)\n\n--------------------\n[1] The disk balancing algorithms which are current, nowadays, are\nmore annoying than clever, and this is a consequence of the seeking\ncapabilities of the disks. On devices which cannot seek, like big\ntape drives, the story was quite different, and one had to be very\nclever to ensure (far in advance) that each tape movement will be the\nmost effective possible (that is, will best participate at\n\"progressing\" the merge). Some tapes were even able to read\nbackwards, and this was also used to avoid the rewinding time.\nBelieve me, real good tape sorts were quite spectacular to watch!\nFrom all times, sorting has always been a Great Art! :-)\n\"\"\"\n\n__all__=['heappush','heappop','heapify','heapreplace','merge',\n'nlargest','nsmallest','heappushpop']\n\nfrom itertools import islice,count,tee,chain\n\ndef heappush(heap,item):\n ''\n heap.append(item)\n _siftdown(heap,0,len(heap)-1)\n \ndef heappop(heap):\n ''\n lastelt=heap.pop()\n if heap:\n returnitem=heap[0]\n heap[0]=lastelt\n _siftup(heap,0)\n else :\n returnitem=lastelt\n return returnitem\n \ndef heapreplace(heap,item):\n ''\n\n\n\n\n\n\n\n\n \n returnitem=heap[0]\n heap[0]=item\n _siftup(heap,0)\n return returnitem\n \ndef heappushpop(heap,item):\n ''\n if heap and heap[0]startpos:\n parentpos=(pos -1)>>1\n parent=heap[parentpos]\n if newitem startpos:\n parentpos=(pos -1)>>1\n parent=heap[parentpos]\n if parent 1:\n try :\n while True :\n v,itnum,next=s=h[0]\n yield v\n s[0]=next()\n _heapreplace(h,s)\n except _StopIteration:\n _heappop(h)\n if h:\n \n v,itnum,next=h[0]\n yield v\n yield from next.__self__\n \n \n_nsmallest=nsmallest\ndef nsmallest(n,iterable,key=None ):\n ''\n\n\n \n \n if n ==1:\n it=iter(iterable)\n head=list(islice(it,1))\n if not head:\n return []\n if key is None :\n return [min(chain(head,it))]\n return [min(chain(head,it),key=key)]\n \n \n try :\n size=len(iterable)\n except (TypeError,AttributeError):\n pass\n else :\n if n >=size:\n return sorted(iterable,key=key)[:n]\n \n \n if key is None :\n it=zip(iterable,count())\n result=_nsmallest(n,it)\n return [r[0]for r in result]\n \n \n in1,in2=tee(iterable)\n it=zip(map(key,in1),count(),in2)\n result=_nsmallest(n,it)\n return [r[2]for r in result]\n \n_nlargest=nlargest\ndef nlargest(n,iterable,key=None ):\n ''\n\n\n \n \n \n if n ==1:\n it=iter(iterable)\n head=list(islice(it,1))\n if not head:\n return []\n if key is None :\n return [max(chain(head,it))]\n return [max(chain(head,it),key=key)]\n \n \n try :\n size=len(iterable)\n except (TypeError,AttributeError):\n pass\n else :\n if n >=size:\n return sorted(iterable,key=key,reverse=True )[:n]\n \n \n if key is None :\n it=zip(iterable,count(0,-1))\n result=_nlargest(n,it)\n return [r[0]for r in result]\n \n \n in1,in2=tee(iterable)\n it=zip(map(key,in1),count(0,-1),in2)\n result=_nlargest(n,it)\n return [r[2]for r in result]\n \nif __name__ ==\"__main__\":\n\n heap=[]\n data=[1,3,5,7,9,2,4,6,8,0]\n for item in data:\n heappush(heap,item)\n sort=[]\n while heap:\n sort.append(heappop(heap))\n print(sort)\n \n import doctest\n doctest.testmod()\n"], "posix": [".py", "''\n\n\n\n\nimport datetime\n\nfrom browser import window\n\ndef _randint(a,b):\n return int(window.Math.random()*(b -a+1)+a)\n \nF_OK=0\n\nO_APPEND=8\n\nO_BINARY=32768\n\nO_CREAT=256\n\nO_EXCL=1024\n\nO_NOINHERIT=128\n\nO_RANDOM=16\n\nO_RDONLY=0\n\nO_RDWR=2\n\nO_SEQUENTIAL=32\n\nO_SHORT_LIVED=4096\n\nO_TEMPORARY=64\n\nO_TEXT=16384\n\nO_TRUNC=512\n\nO_WRONLY=1\n\nP_DETACH=4\n\nP_NOWAIT=1\n\nP_NOWAITO=3\n\nP_OVERLAY=2\n\nP_WAIT=0\n\nR_OK=4\n\nTMP_MAX=32767\n\nW_OK=2\n\nX_OK=1\n\nclass __loader__:\n pass\n \ndef _exit(*args,**kw):\n ''\n \n pass\n \ndef _getdiskusage(*args,**kw):\n ''\n \n pass\n \ndef _getfileinformation(*args,**kw):\n pass\n \ndef _getfinalpathname(*args,**kw):\n pass\n \ndef _getfullpathname(*args,**kw):\n pass\n \n_have_functions=['MS_WINDOWS']\n\ndef _isdir(*args,**kw):\n ''\n pass\n \ndef abort(*args,**kw):\n ''\n\n \n pass\n \ndef access(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef chdir(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef chmod(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef close(*args,**kw):\n ''\n \n pass\n \ndef closerange(*args,**kw):\n ''\n \n pass\n \ndef device_encoding(*args,**kw):\n ''\n\n \n pass\n \ndef dup(*args,**kw):\n ''\n \n pass\n \ndef dup2(*args,**kw):\n ''\n \n pass\n \nenviron={'PYTHONUSERBASE':' '}\n\nerror=OSError\n\ndef execv(*args,**kw):\n ''\n\n\n\n \n pass\n \ndef execve(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n \n pass\n \ndef fstat(*args,**kw):\n ''\n\n \n pass\n \ndef fsync(*args,**kw):\n ''\n \n pass\n \ndef get_terminal_size(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef getcwd(*args,**kw):\n ''\n \n return __BRYTHON__.brython_path\n \ndef getcwdb(*args,**kw):\n ''\n \n pass\n \ndef getlogin(*args,**kw):\n ''\n \n pass\n \ndef getpid(*args,**kw):\n ''\n \n return 0\n \ndef getppid(*args,**kw):\n ''\n\n\n \n pass\n \ndef isatty(*args,**kw):\n ''\n\n \n pass\n \ndef kill(*args,**kw):\n ''\n \n pass\n \ndef link(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef listdir(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef lseek(*args,**kw):\n ''\n\n \n pass\n \ndef lstat(*args,**kw):\n ''\n\n \n return stat_result()\n \ndef mkdir(*args,**kw):\n ''\n\n\n\n\n\n\n\n \n pass\n \ndef open(path,flags,mode=0o777,*args,dir_fd=None ):\n ''\n\n\n\n\n\n \n \n \n from browser.local_storage import storage\n \n class mystorage:\n def __init__(self,path,flags):\n self._path=path\n self._pos=0\n self._flags=flags\n \n if self._flags&O_RDONLY ==O_RDONLY:\n self._data=storage.get(self._path,None )\n if self._data is None :\n raise FileNotFoundError(\"%s not found\"%self._path)\n elif self._flags&O_WRONLY ==O_WRONLY:\n storage[self._path]=''\n \n def seek(self,pos):\n self._pos=pos\n \n def read(self,size=None ):\n if size is None :\n _result=self._data[self._pos:]\n self._pos=len(self._data)\n return _result\n \n assert size <=len(self._data)-self._pos\n _result=self._data[self._pos:self._pos+size]\n self._pos +=size\n return _result\n \n def write(self,data):\n storage[self._path]+=str(data)\n \n def close(self):\n pass\n \n return mystorage(path,flags)\n \ndef pipe(*args,**kw):\n ''\n \n pass\n \ndef putenv(*args,**kw):\n ''\n \n pass\n \ndef read(*args,**kw):\n ''\n \n pass\n \ndef readlink(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef remove(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef rename(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef replace(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef rmdir(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef spawnv(*args,**kw):\n ''\n\n\n\n\n \n pass\n \ndef spawnve(*args,**kw):\n ''\n\n\n\n\n\n \n pass\n \ndef startfile(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef stat(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n return stat_result()\n \ndef stat_float_times(*args,**kw):\n ''\n\n\n\n\n \n pass\n \nclass stat_result:\n\n def __init__(self):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n self.st_atime=datetime.datetime.now()\n self.st_mtime=self.st_ctime=self.st_atime_ns= self.st_mtime_ns=self.st_ctime_ns=self.st_atime\n self.st_uid=self.st_gid=self.st_ino=-1\n self.st_mode=0\n self.st_size=1\n \nclass statvfs_result:\n pass\n \ndef strerror(*args,**kw):\n ''\n \n pass\n \ndef symlink(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef system(*args,**kw):\n ''\n \n pass\n \nclass terminal_size:\n pass\n \ndef times(*args,**kw):\n ''\n\n\n \n pass\n \nclass times_result:\n pass\n \ndef umask(*args,**kw):\n ''\n \n pass\n \nclass uname_result:\n pass\n \ndef unlink(path,*args,dir_fd=None ):\n ''\n\n\n\n\n\n \n pass\n \ndef urandom(n):\n ''\n \n randbytes=[_randint(0,255)for i in range(n)]\n return bytes(randbytes)\n \ndef utime(*args,**kw):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n pass\n \ndef waitpid(*args,**kw):\n ''\n \n pass\n \ndef write(*args,**kw):\n ''\n \n pass\n \n \n \ndef WIFSIGNALED(a):\n return False\n \ndef WTERMSIG(status):\n return 0\n \ndef WIFSIGNALED(status):\n ''\n return False\n \ndef WIFEXITED(status):\n return False\n \ndef WEXITSTATUS(status):\n pass\n \ndef WNOHANG():\n return (0,0)\n"], "operator": [".py", "#!/usr/bin/env python3\n''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndef lt(a,b):\n ''\n return a =b\n__ge__=ge\n\ndef gt(a,b):\n ''\n return a >b\n__gt__=gt\n\ndef not_(a):\n ''\n return not a\n__not__=not_\n\ndef truth(a):\n ''\n \n return bool(a)\n \ndef is_(a,b):\n ''\n return a is b\n \n \n \n \n \n \n \n \n \n \n \n__abs__=abs\nabs=abs\n\n\ndef add(a,b):\n ''\n return a+b\n__add__=add\n\ndef and_(a,b):\n ''\n return a&b\n__and__=and_\n\ndef floordiv(a,b):\n ''\n return a //b\n__floordiv__=floordiv\n\ndef index(a):\n ''\n return a.__index__()\n__index__=index\n\ndef inv(a):\n ''\n return ~a\n \ninvert=__inv__=__invert__=inv\n\ndef lshift(a,b):\n ''\n return a <>b\n__rshift__=rshift\n\ndef sub(a,b):\n ''\n return a -b\n__sub__=sub\n\ndef truediv(a,b):\n ''\n return a /b\n__truediv__=truediv\n\ndef xor(a,b):\n ''\n return a ^b\n__xor__=xor\n\ndef concat(a,b):\n ''\n if not (hasattr(a,'__getitem__')and hasattr(b,'__getitem__')):\n raise TypeError('a and b must be sequences')\n return a+b\n__concat__=concat\n\ndef contains(a,b):\n ''\n return b in a\n__contains__=contains\n\ndef countOf(a,b):\n ''\n count=0\n for i in a:\n if i ==b:\n count +=1\n return count\n \ndef delitem(a,b):\n ''\n del a[b]\n__delitem__=delitem\n\ndef getitem(a,b):\n ''\n return a[b]\n__getitem__=getitem\n\n\ndef indexOf(a,b):\n ''\n \n for i,j in enumerate(a):\n if j ==b:\n return i\n else :\n raise ValueError('b not found in a')\n \ndef setitem(a,b,c):\n ''\n a[b]=c\n__setitem__=setitem\n\n\n\nclass attrgetter:\n ''\n\n\n\n\n\n \n def __init__(self,attr,*attrs):\n self._attrs=(attr,)\n self._attrs +=attrs\n if any(not isinstance(attr,str)for attr in self._attrs):\n raise TypeError('attribute name must be a string')\n \n @staticmethod\n def _resolve_attr(obj,attr):\n for name in attr.split('.'):\n \n obj=getattr(obj,name)\n return obj\n \n def __call__(self,obj):\n if len(self._attrs)==1:\n return self._resolve_attr(obj,self._attrs[0])\n return tuple(self._resolve_attr(obj,attr)for attr in self._attrs)\n \nclass itemgetter:\n ''\n\n\n\n \n def __init__(self,item,*items):\n self._items=(item,)\n self._items +=items\n \n def __call__(self,obj):\n if len(self._items)==1:\n return obj[self._items[0]]\n return tuple(obj[item]for item in self._items)\n \nclass methodcaller:\n ''\n\n\n\n\n \n \n def __init__(self,name,*args,**kwargs):\n self._name=name\n self._args=args\n self._kwargs=kwargs\n \n def __call__(self,obj):\n return getattr(obj,self._name)(*self._args,**self._kwargs)\n \n \ndef iadd(a,b):\n ''\n a +=b\n return a\n__iadd__=iadd\n\ndef iand(a,b):\n ''\n a &=b\n return a\n__iand__=iand\n\ndef iconcat(a,b):\n ''\n if not (hasattr(a,'__getitem__')and hasattr(b,'__getitem__')):\n raise TypeError('a and b must be sequences')\n a +=b\n return a\n__iconcat__=iconcat\n\ndef ifloordiv(a,b):\n ''\n a //=b\n return a\n__ifloordiv__=ifloordiv\n\ndef ilshift(a,b):\n ''\n a <<=b\n return a\n__ilshift__=ilshift\n\ndef imod(a,b):\n ''\n a %=b\n return a\n__imod__=imod\n\ndef imul(a,b):\n ''\n a *=b\n return a\n__imul__=imul\n\ndef ior(a,b):\n ''\n a |=b\n return a\n__ior__=ior\n\ndef ipow(a,b):\n ''\n a **=b\n return a\n__ipow__=ipow\n\ndef irshift(a,b):\n ''\n a >>=b\n return a\n__irshift__=irshift\n\ndef isub(a,b):\n ''\n a -=b\n return a\n__isub__=isub\n\ndef itruediv(a,b):\n ''\n a /=b\n return a\n__itruediv__=itruediv\n\ndef ixor(a,b):\n ''\n a ^=b\n return a\n__ixor__=ixor\n\ndef length_hint(obj,default=0):\n ''\n\n\n\n\n\n\n \n try :\n return len(obj)\n except TypeError:\n try :\n val=obj.__length_hint__()\n if val is NotImplemented:\n raise TypeError\n except (AttributeError,TypeError):\n return default\n else :\n if not val >0:\n raise ValueError('default must be > 0')\n return val\n \n \n \n \n \n \n"], "sys": [".py", "\nfrom _sys import *\n\n_getframe=Getframe\nfrom javascript import JSObject\nfrom browser import window\n\nbrython_debug_mode=__BRYTHON__.debug\n\nargv=['__main__']\n\nbase_exec_prefix=__BRYTHON__.brython_path\n\nbase_prefix=__BRYTHON__.brython_path\n\nbuiltin_module_names=__BRYTHON__.builtin_module_names\n\nbyteorder='little'\n\ndef exc_info():\n exc=__BRYTHON__.current_exception\n if exc is None :\n return (None ,None ,None )\n return (exc.__class__,exc,exc.traceback)\n \nexec_prefix=__BRYTHON__.brython_path\n\nexecutable=__BRYTHON__.brython_path+'/brython.js'\n\ndef exit(i=None ):\n raise SystemExit('')\n \nclass flag_class:\n def __init__(self):\n self.debug=0\n self.inspect=0\n self.interactive=0\n self.optimize=0\n self.dont_write_bytecode=0\n self.no_user_site=0\n self.no_site=0\n self.ignore_environment=0\n self.verbose=0\n self.bytes_warning=0\n self.quiet=0\n self.hash_randomization=1\n \nflags=flag_class()\n\ndef getfilesystemencoding(*args,**kw):\n ''\n\n \n return'utf-8'\n \ndef getrecursionlimit():\n return 200\n \nmaxsize=2 **63 -1\n\nmaxunicode=1114111\n\n\n\n\n\n\nplatform=\"brython\"\n\nprefix=__BRYTHON__.brython_path\n\nversion='.'.join(str(x)for x in __BRYTHON__.version_info[:3])\nversion +=\" (default, %s) \\n[Javascript 1.5] on Brython\"%__BRYTHON__.compiled_date\nhexversion=0x03000000\n\nclass __version_info(object):\n def __init__(self,version_info):\n self.version_info=version_info\n self.major=version_info[0]\n self.minor=version_info[1]\n self.micro=version_info[2]\n self.releaselevel=version_info[3]\n self.serial=version_info[4]\n \n def __getitem__(self,index):\n if isinstance(self.version_info[index],list):\n return tuple(self.version_info[index])\n return self.version_info[index]\n \n def hexversion(self):\n try :\n return'0%d0%d0%d'%(self.major,self.minor,self.micro)\n finally :\n return'0%d0000'%(self.major)\n \n def __str__(self):\n _s=\"sys.version(major=%d, minor=%d, micro=%d, releaselevel='%s', serial=%d)\"\n return _s %(self.major,self.minor,self.micro,\n self.releaselevel,self.serial)\n \n \n def __eq__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)==other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __ge__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)>=other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __gt__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)>other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __le__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)<=other\n \n raise Error(\"Error! I don't know how to compare!\")\n \n def __lt__(self,other):\n if isinstance(other,tuple):\n return (self.major,self.minor,self.micro)'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u2500'\n'\\u2502'\n'\\u250c'\n'\\u2510'\n'\\u2514'\n'\\u2518'\n'\\u251c'\n'\\u2524'\n'\\u252c'\n'\\u2534'\n'\\u253c'\n'\\u2580'\n'\\u2584'\n'\\u2588'\n'\\u258c'\n'\\u2590'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2320'\n'\\u25a0'\n'\\u2219'\n'\\u221a'\n'\\u2248'\n'\\u2264'\n'\\u2265'\n'\\xa0'\n'\\u2321'\n'\\xb0'\n'\\xb2'\n'\\xb7'\n'\\xf7'\n'\\u2550'\n'\\u2551'\n'\\u2552'\n'\\u0451'\n'\\u0454'\n'\\u2554'\n'\\u0456'\n'\\u0457'\n'\\u2557'\n'\\u2558'\n'\\u2559'\n'\\u255a'\n'\\u255b'\n'\\u0491'\n'\\u255d'\n'\\u255e'\n'\\u255f'\n'\\u2560'\n'\\u2561'\n'\\u0401'\n'\\u0404'\n'\\u2563'\n'\\u0406'\n'\\u0407'\n'\\u2566'\n'\\u2567'\n'\\u2568'\n'\\u2569'\n'\\u256a'\n'\\u0490'\n'\\u256c'\n'\\xa9'\n'\\u044e'\n'\\u0430'\n'\\u0431'\n'\\u0446'\n'\\u0434'\n'\\u0435'\n'\\u0444'\n'\\u0433'\n'\\u0445'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u044f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0436'\n'\\u0432'\n'\\u044c'\n'\\u044b'\n'\\u0437'\n'\\u0448'\n'\\u044d'\n'\\u0449'\n'\\u0447'\n'\\u044a'\n'\\u042e'\n'\\u0410'\n'\\u0411'\n'\\u0426'\n'\\u0414'\n'\\u0415'\n'\\u0424'\n'\\u0413'\n'\\u0425'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u042f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0416'\n'\\u0412'\n'\\u042c'\n'\\u042b'\n'\\u0417'\n'\\u0428'\n'\\u042d'\n'\\u0429'\n'\\u0427'\n'\\u042a'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "tempfile": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\n\"NamedTemporaryFile\",\"TemporaryFile\",\n\"SpooledTemporaryFile\",\"TemporaryDirectory\",\n\"mkstemp\",\"mkdtemp\",\n\"mktemp\",\n\"TMP_MAX\",\"gettempprefix\",\n\"tempdir\",\"gettempdir\"\n]\n\n\n\n\nimport warnings as _warnings\nimport sys as _sys\nimport io as _io\nimport os as _os\nimport errno as _errno\nfrom random import Random as _Random\n\ntry :\n import fcntl as _fcntl\nexcept ImportError:\n def _set_cloexec(fd):\n pass\nelse :\n def _set_cloexec(fd):\n try :\n flags=_fcntl.fcntl(fd,_fcntl.F_GETFD,0)\n except OSError:\n pass\n else :\n \n flags |=_fcntl.FD_CLOEXEC\n _fcntl.fcntl(fd,_fcntl.F_SETFD,flags)\n \n \ntry :\n import _thread\nexcept ImportError:\n import _dummy_thread as _thread\n_allocate_lock=_thread.allocate_lock\n\n_text_openflags=_os.O_RDWR |_os.O_CREAT |_os.O_EXCL\nif hasattr(_os,'O_NOINHERIT'):\n _text_openflags |=_os.O_NOINHERIT\nif hasattr(_os,'O_NOFOLLOW'):\n _text_openflags |=_os.O_NOFOLLOW\n \n_bin_openflags=_text_openflags\nif hasattr(_os,'O_BINARY'):\n _bin_openflags |=_os.O_BINARY\n \nif hasattr(_os,'TMP_MAX'):\n TMP_MAX=_os.TMP_MAX\nelse :\n TMP_MAX=10000\n \n \n \ntemplate=\"tmp\"\n\n\n\n_once_lock=_allocate_lock()\n\nif hasattr(_os,\"lstat\"):\n _stat=_os.lstat\nelif hasattr(_os,\"stat\"):\n _stat=_os.stat\nelse :\n\n\n def _stat(fn):\n f=open(fn)\n f.close()\n \ndef _exists(fn):\n try :\n _stat(fn)\n except OSError:\n return False\n else :\n return True\n \nclass _RandomNameSequence:\n ''\n\n\n\n\n \n \n characters=\"abcdefghijklmnopqrstuvwxyz0123456789_\"\n \n @property\n def rng(self):\n cur_pid=_os.getpid()\n if cur_pid !=getattr(self,'_rng_pid',None ):\n self._rng=_Random()\n self._rng_pid=cur_pid\n return self._rng\n \n def __iter__(self):\n return self\n \n def __next__(self):\n c=self.characters\n choose=self.rng.choice\n letters=[choose(c)for dummy in\"123456\"]\n return''.join(letters)\n \ndef _candidate_tempdir_list():\n ''\n \n \n dirlist=[]\n \n \n for envname in'TMPDIR','TEMP','TMP':\n dirname=_os.getenv(envname)\n if dirname:dirlist.append(dirname)\n \n \n if _os.name =='nt':\n dirlist.extend([r'c:\\temp',r'c:\\tmp',r'\\temp',r'\\tmp'])\n else :\n dirlist.extend(['/tmp','/var/tmp','/usr/tmp'])\n \n \n try :\n dirlist.append(_os.getcwd())\n except (AttributeError,OSError):\n dirlist.append(_os.curdir)\n \n return dirlist\n \ndef _get_default_tempdir():\n ''\n\n\n\n\n\n \n \n namer=_RandomNameSequence()\n dirlist=_candidate_tempdir_list()\n \n for dir in dirlist:\n if dir !=_os.curdir:\n dir=_os.path.normcase(_os.path.abspath(dir))\n \n for seq in range(100):\n name=next(namer)\n filename=_os.path.join(dir,name)\n try :\n fd=_os.open(filename,_bin_openflags,0o600)\n try :\n try :\n with _io.open(fd,'wb',closefd=False )as fp:\n fp.write(b'blat')\n finally :\n _os.close(fd)\n finally :\n _os.unlink(filename)\n return dir\n except FileExistsError:\n pass\n except OSError:\n break\n raise FileNotFoundError(_errno.ENOENT,\n \"No usable temporary directory found in %s\"%\n dirlist)\n \n_name_sequence=None\n\ndef _get_candidate_names():\n ''\n \n global _name_sequence\n if _name_sequence is None :\n _once_lock.acquire()\n try :\n if _name_sequence is None :\n _name_sequence=_RandomNameSequence()\n finally :\n _once_lock.release()\n return _name_sequence\n \n \ndef _mkstemp_inner(dir,pre,suf,flags):\n ''\n \n names=_get_candidate_names()\n \n for seq in range(TMP_MAX):\n name=next(names)\n file=_os.path.join(dir,pre+name+suf)\n try :\n fd=_os.open(file,flags,0o600)\n _set_cloexec(fd)\n return (fd,_os.path.abspath(file))\n except FileExistsError:\n continue\n except PermissionError:\n \n \n if _os.name =='nt':\n continue\n else :\n raise\n \n raise FileExistsError(_errno.EEXIST,\n \"No usable temporary file name found\")\n \n \n \n \ndef gettempprefix():\n ''\n return template\n \ntempdir=None\n\ndef gettempdir():\n ''\n global tempdir\n if tempdir is None :\n _once_lock.acquire()\n try :\n if tempdir is None :\n tempdir=_get_default_tempdir()\n finally :\n _once_lock.release()\n return tempdir\n \ndef mkstemp(suffix=\"\",prefix=template,dir=None ,text=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 if dir is None :\n dir=gettempdir()\n \n if text:\n flags=_text_openflags\n else :\n flags=_bin_openflags\n \n return _mkstemp_inner(dir,prefix,suffix,flags)\n \n \ndef mkdtemp(suffix=\"\",prefix=template,dir=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n if dir is None :\n dir=gettempdir()\n \n names=_get_candidate_names()\n \n for seq in range(TMP_MAX):\n name=next(names)\n file=_os.path.join(dir,prefix+name+suffix)\n try :\n _os.mkdir(file,0o700)\n return file\n except FileExistsError:\n continue\n \n raise FileExistsError(_errno.EEXIST,\n \"No usable temporary directory name found\")\n \ndef mktemp(suffix=\"\",prefix=template,dir=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n \n if dir is None :\n dir=gettempdir()\n \n names=_get_candidate_names()\n for seq in range(TMP_MAX):\n name=next(names)\n file=_os.path.join(dir,prefix+name+suffix)\n if not _exists(file):\n return file\n \n raise FileExistsError(_errno.EEXIST,\n \"No usable temporary filename found\")\n \n \nclass _TemporaryFileWrapper:\n ''\n\n\n\n\n \n \n def __init__(self,file,name,delete=True ):\n self.file=file\n self.name=name\n self.close_called=False\n self.delete=delete\n \n def __getattr__(self,name):\n \n \n \n file=self.__dict__['file']\n a=getattr(file,name)\n if not isinstance(a,int):\n setattr(self,name,a)\n return a\n \n \n \n def __enter__(self):\n self.file.__enter__()\n return self\n \n \n def __iter__(self):\n return iter(self.file)\n \n \n \n \n if _os.name !='nt':\n \n \n \n \n \n unlink=_os.unlink\n \n def close(self):\n if not self.close_called:\n self.close_called=True\n self.file.close()\n if self.delete:\n self.unlink(self.name)\n \n def __del__(self):\n self.close()\n \n \n \n def __exit__(self,exc,value,tb):\n result=self.file.__exit__(exc,value,tb)\n self.close()\n return result\n else :\n def __exit__(self,exc,value,tb):\n self.file.__exit__(exc,value,tb)\n \n \ndef NamedTemporaryFile(mode='w+b',buffering=-1,encoding=None ,\nnewline=None ,suffix=\"\",prefix=template,\ndir=None ,delete=True ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if dir is None :\n dir=gettempdir()\n \n flags=_bin_openflags\n \n \n \n if _os.name =='nt'and delete:\n flags |=_os.O_TEMPORARY\n \n (fd,name)=_mkstemp_inner(dir,prefix,suffix,flags)\n file=_io.open(fd,mode,buffering=buffering,\n newline=newline,encoding=encoding)\n \n return _TemporaryFileWrapper(file,name,delete)\n \nif _os.name !='posix'or _os.sys.platform =='cygwin':\n\n\n TemporaryFile=NamedTemporaryFile\n \nelse :\n def TemporaryFile(mode='w+b',buffering=-1,encoding=None ,\n newline=None ,suffix=\"\",prefix=template,\n dir=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n \n \n if dir is None :\n dir=gettempdir()\n \n flags=_bin_openflags\n \n (fd,name)=_mkstemp_inner(dir,prefix,suffix,flags)\n try :\n _os.unlink(name)\n return _io.open(fd,mode,buffering=buffering,\n newline=newline,encoding=encoding)\n except :\n _os.close(fd)\n raise\n \nclass SpooledTemporaryFile:\n ''\n\n\n \n _rolled=False\n \n def __init__(self,max_size=0,mode='w+b',buffering=-1,\n encoding=None ,newline=None ,\n suffix=\"\",prefix=template,dir=None ):\n if'b'in mode:\n self._file=_io.BytesIO()\n else :\n \n \n \n self._file=_io.StringIO(newline=\"\\n\")\n self._max_size=max_size\n self._rolled=False\n self._TemporaryFileArgs={'mode':mode,'buffering':buffering,\n 'suffix':suffix,'prefix':prefix,\n 'encoding':encoding,'newline':newline,\n 'dir':dir}\n \n def _check(self,file):\n if self._rolled:return\n max_size=self._max_size\n if max_size and file.tell()>max_size:\n self.rollover()\n \n def rollover(self):\n if self._rolled:return\n file=self._file\n newfile=self._file=TemporaryFile(**self._TemporaryFileArgs)\n del self._TemporaryFileArgs\n \n newfile.write(file.getvalue())\n newfile.seek(file.tell(),0)\n \n self._rolled=True\n \n \n \n \n \n \n \n def __enter__(self):\n if self._file.closed:\n raise ValueError(\"Cannot enter context with closed file\")\n return self\n \n def __exit__(self,exc,value,tb):\n self._file.close()\n \n \n def __iter__(self):\n return self._file.__iter__()\n \n def close(self):\n self._file.close()\n \n @property\n def closed(self):\n return self._file.closed\n \n @property\n def encoding(self):\n try :\n return self._file.encoding\n except AttributeError:\n if'b'in self._TemporaryFileArgs['mode']:\n raise\n return self._TemporaryFileArgs['encoding']\n \n def fileno(self):\n self.rollover()\n return self._file.fileno()\n \n def flush(self):\n self._file.flush()\n \n def isatty(self):\n return self._file.isatty()\n \n @property\n def mode(self):\n try :\n return self._file.mode\n except AttributeError:\n return self._TemporaryFileArgs['mode']\n \n @property\n def name(self):\n try :\n return self._file.name\n except AttributeError:\n return None\n \n @property\n def newlines(self):\n try :\n return self._file.newlines\n except AttributeError:\n if'b'in self._TemporaryFileArgs['mode']:\n raise\n return self._TemporaryFileArgs['newline']\n \n def read(self,*args):\n return self._file.read(*args)\n \n def readline(self,*args):\n return self._file.readline(*args)\n \n def readlines(self,*args):\n return self._file.readlines(*args)\n \n def seek(self,*args):\n self._file.seek(*args)\n \n @property\n def softspace(self):\n return self._file.softspace\n \n def tell(self):\n return self._file.tell()\n \n def truncate(self,size=None ):\n if size is None :\n self._file.truncate()\n else :\n if size >self._max_size:\n self.rollover()\n self._file.truncate(size)\n \n def write(self,s):\n file=self._file\n rv=file.write(s)\n self._check(file)\n return rv\n \n def writelines(self,iterable):\n file=self._file\n rv=file.writelines(iterable)\n self._check(file)\n return rv\n \n \nclass TemporaryDirectory(object):\n ''\n\n\n\n\n\n\n\n\n \n \n def __init__(self,suffix=\"\",prefix=template,dir=None ):\n self._closed=False\n self.name=None\n self.name=mkdtemp(suffix,prefix,dir)\n \n def __repr__(self):\n return\"<{} {!r}>\".format(self.__class__.__name__,self.name)\n \n def __enter__(self):\n return self.name\n \n def cleanup(self,_warn=False ):\n if self.name and not self._closed:\n try :\n self._rmtree(self.name)\n except (TypeError,AttributeError)as ex:\n \n \n \n if\"None\"not in str(ex):\n raise\n print(\"ERROR: {!r} while cleaning up {!r}\".format(ex,self,),\n file=_sys.stderr)\n return\n self._closed=True\n if _warn:\n self._warn(\"Implicitly cleaning up {!r}\".format(self),\n ResourceWarning)\n \n def __exit__(self,exc,value,tb):\n self.cleanup()\n \n def __del__(self):\n \n self.cleanup(_warn=True )\n \n \n \n \n \n _listdir=staticmethod(_os.listdir)\n _path_join=staticmethod(_os.path.join)\n _isdir=staticmethod(_os.path.isdir)\n _islink=staticmethod(_os.path.islink)\n _remove=staticmethod(_os.remove)\n _rmdir=staticmethod(_os.rmdir)\n _os_error=OSError\n _warn=_warnings.warn\n \n def _rmtree(self,path):\n \n \n for name in self._listdir(path):\n fullname=self._path_join(path,name)\n try :\n isdir=self._isdir(fullname)and not self._islink(fullname)\n except self._os_error:\n isdir=False\n if isdir:\n self._rmtree(fullname)\n else :\n try :\n self._remove(fullname)\n except self._os_error:\n pass\n try :\n self._rmdir(path)\n except self._os_error:\n pass\n"], "fractions": [".py", "\n\n\n\"\"\"Fraction, infinite-precision, real numbers.\"\"\"\n\nfrom decimal import Decimal\nimport math\nimport numbers\nimport operator\nimport re\nimport sys\n\n__all__=['Fraction','gcd']\n\n\n\ndef gcd(a,b):\n ''\n\n\n\n \n while b:\n a,b=b,a %b\n return a\n \n \n \n_PyHASH_MODULUS=sys.hash_info.modulus\n\n\n_PyHASH_INF=sys.hash_info.inf\n\n_RATIONAL_FORMAT=re.compile(r\"\"\"\n \\A\\s* # optional whitespace at the start, then\n (?P[-+]?) # an optional sign, then\n (?=\\d|\\.\\d) # lookahead for digit or .digit\n (?P\\d*) # numerator (possibly empty)\n (?: # followed by\n (?:/(?P\\d+))? # an optional denominator\n | # or\n (?:\\.(?P\\d*))? # an optional fractional part\n (?:E(?P[-+]?\\d+))? # and optional exponent\n )\n \\s*\\Z # and optional whitespace to finish\n\"\"\",re.VERBOSE |re.IGNORECASE)\n\n\nclass Fraction(numbers.Rational):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n __slots__=('_numerator','_denominator')\n \n \n def __new__(cls,numerator=0,denominator=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 self=super(Fraction,cls).__new__(cls)\n \n if denominator is None :\n if isinstance(numerator,numbers.Rational):\n self._numerator=numerator.numerator\n self._denominator=numerator.denominator\n return self\n \n elif isinstance(numerator,float):\n \n value=Fraction.from_float(numerator)\n self._numerator=value._numerator\n self._denominator=value._denominator\n return self\n \n elif isinstance(numerator,Decimal):\n value=Fraction.from_decimal(numerator)\n self._numerator=value._numerator\n self._denominator=value._denominator\n return self\n \n elif isinstance(numerator,str):\n \n m=_RATIONAL_FORMAT.match(numerator)\n if m is None :\n raise ValueError('Invalid literal for Fraction: %r'%\n numerator)\n numerator=int(m.group('num')or'0')\n denom=m.group('denom')\n if denom:\n denominator=int(denom)\n else :\n denominator=1\n decimal=m.group('decimal')\n if decimal:\n scale=10 **len(decimal)\n numerator=numerator *scale+int(decimal)\n denominator *=scale\n exp=m.group('exp')\n if exp:\n exp=int(exp)\n if exp >=0:\n numerator *=10 **exp\n else :\n denominator *=10 **-exp\n if m.group('sign')=='-':\n numerator=-numerator\n \n else :\n raise TypeError(\"argument should be a string \"\n \"or a Rational instance\")\n \n elif (isinstance(numerator,numbers.Rational)and\n isinstance(denominator,numbers.Rational)):\n numerator,denominator=(\n numerator.numerator *denominator.denominator,\n denominator.numerator *numerator.denominator\n )\n else :\n raise TypeError(\"both arguments should be \"\n \"Rational instances\")\n \n if denominator ==0:\n raise ZeroDivisionError('Fraction(%s, 0)'%numerator)\n g=gcd(numerator,denominator)\n self._numerator=numerator //g\n self._denominator=denominator //g\n return self\n \n @classmethod\n def from_float(cls,f):\n ''\n\n\n\n \n if isinstance(f,numbers.Integral):\n return cls(f)\n elif not isinstance(f,float):\n raise TypeError(\"%s.from_float() only takes floats, not %r (%s)\"%\n (cls.__name__,f,type(f).__name__))\n if math.isnan(f):\n raise ValueError(\"Cannot convert %r to %s.\"%(f,cls.__name__))\n if math.isinf(f):\n raise OverflowError(\"Cannot convert %r to %s.\"%(f,cls.__name__))\n return cls(*f.as_integer_ratio())\n \n @classmethod\n def from_decimal(cls,dec):\n ''\n from decimal import Decimal\n if isinstance(dec,numbers.Integral):\n dec=Decimal(int(dec))\n elif not isinstance(dec,Decimal):\n raise TypeError(\n \"%s.from_decimal() only takes Decimals, not %r (%s)\"%\n (cls.__name__,dec,type(dec).__name__))\n if dec.is_infinite():\n raise OverflowError(\n \"Cannot convert %s to %s.\"%(dec,cls.__name__))\n if dec.is_nan():\n raise ValueError(\"Cannot convert %s to %s.\"%(dec,cls.__name__))\n sign,digits,exp=dec.as_tuple()\n digits=int(''.join(map(str,digits)))\n if sign:\n digits=-digits\n if exp >=0:\n return cls(digits *10 **exp)\n else :\n return cls(digits,10 **-exp)\n \n def limit_denominator(self,max_denominator=1000000):\n ''\n\n\n\n\n\n\n\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 max_denominator <1:\n raise ValueError(\"max_denominator should be at least 1\")\n if self._denominator <=max_denominator:\n return Fraction(self)\n \n p0,q0,p1,q1=0,1,1,0\n n,d=self._numerator,self._denominator\n while True :\n a=n //d\n q2=q0+a *q1\n if q2 >max_denominator:\n break\n p0,q0,p1,q1=p1,q1,p0+a *p1,q2\n n,d=d,n -a *d\n \n k=(max_denominator -q0)//q1\n bound1=Fraction(p0+k *p1,q0+k *q1)\n bound2=Fraction(p1,q1)\n if abs(bound2 -self)<=abs(bound1 -self):\n return bound2\n else :\n return bound1\n \n @property\n def numerator(a):\n return a._numerator\n \n @property\n def denominator(a):\n return a._denominator\n \n def __repr__(self):\n ''\n return ('Fraction(%s, %s)'%(self._numerator,self._denominator))\n \n def __str__(self):\n ''\n if self._denominator ==1:\n return str(self._numerator)\n else :\n return'%s/%s'%(self._numerator,self._denominator)\n \n def _operator_fallbacks(monomorphic_operator,fallback_operator):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 forward(a,b):\n if isinstance(b,(int,Fraction)):\n return monomorphic_operator(a,b)\n elif isinstance(b,float):\n return fallback_operator(float(a),b)\n elif isinstance(b,complex):\n return fallback_operator(complex(a),b)\n else :\n return NotImplemented\n forward.__name__='__'+fallback_operator.__name__+'__'\n forward.__doc__=monomorphic_operator.__doc__\n \n def reverse(b,a):\n if isinstance(a,numbers.Rational):\n \n return monomorphic_operator(a,b)\n elif isinstance(a,numbers.Real):\n return fallback_operator(float(a),float(b))\n elif isinstance(a,numbers.Complex):\n return fallback_operator(complex(a),complex(b))\n else :\n return NotImplemented\n reverse.__name__='__r'+fallback_operator.__name__+'__'\n reverse.__doc__=monomorphic_operator.__doc__\n \n return forward,reverse\n \n def _add(a,b):\n ''\n return Fraction(a.numerator *b.denominator+\n b.numerator *a.denominator,\n a.denominator *b.denominator)\n \n __add__,__radd__=_operator_fallbacks(_add,operator.add)\n \n def _sub(a,b):\n ''\n return Fraction(a.numerator *b.denominator -\n b.numerator *a.denominator,\n a.denominator *b.denominator)\n \n __sub__,__rsub__=_operator_fallbacks(_sub,operator.sub)\n \n def _mul(a,b):\n ''\n return Fraction(a.numerator *b.numerator,a.denominator *b.denominator)\n \n __mul__,__rmul__=_operator_fallbacks(_mul,operator.mul)\n \n def _div(a,b):\n ''\n return Fraction(a.numerator *b.denominator,\n a.denominator *b.numerator)\n \n __truediv__,__rtruediv__=_operator_fallbacks(_div,operator.truediv)\n \n def __floordiv__(a,b):\n ''\n return math.floor(a /b)\n \n def __rfloordiv__(b,a):\n ''\n return math.floor(a /b)\n \n def __mod__(a,b):\n ''\n div=a //b\n return a -b *div\n \n def __rmod__(b,a):\n ''\n div=a //b\n return a -b *div\n \n def __pow__(a,b):\n ''\n\n\n\n\n\n \n if isinstance(b,numbers.Rational):\n if b.denominator ==1:\n power=b.numerator\n if power >=0:\n return Fraction(a._numerator **power,\n a._denominator **power)\n else :\n return Fraction(a._denominator **-power,\n a._numerator **-power)\n else :\n \n \n return float(a)**float(b)\n else :\n return float(a)**b\n \n def __rpow__(b,a):\n ''\n if b._denominator ==1 and b._numerator >=0:\n \n return a **b._numerator\n \n if isinstance(a,numbers.Rational):\n return Fraction(a.numerator,a.denominator)**b\n \n if b._denominator ==1:\n return a **b._numerator\n \n return a **float(b)\n \n def __pos__(a):\n ''\n return Fraction(a._numerator,a._denominator)\n \n def __neg__(a):\n ''\n return Fraction(-a._numerator,a._denominator)\n \n def __abs__(a):\n ''\n return Fraction(abs(a._numerator),a._denominator)\n \n def __trunc__(a):\n ''\n if a._numerator <0:\n return -(-a._numerator //a._denominator)\n else :\n return a._numerator //a._denominator\n \n def __floor__(a):\n ''\n return a.numerator //a.denominator\n \n def __ceil__(a):\n ''\n \n return -(-a.numerator //a.denominator)\n \n def __round__(self,ndigits=None ):\n ''\n\n\n \n if ndigits is None :\n floor,remainder=divmod(self.numerator,self.denominator)\n if remainder *2 self.denominator:\n return floor+1\n \n elif floor %2 ==0:\n return floor\n else :\n return floor+1\n shift=10 **abs(ndigits)\n \n \n \n if ndigits >0:\n return Fraction(round(self *shift),shift)\n else :\n return Fraction(round(self /shift)*shift)\n \n def __hash__(self):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n dinv=pow(self._denominator,_PyHASH_MODULUS -2,_PyHASH_MODULUS)\n if not dinv:\n hash_=_PyHASH_INF\n else :\n hash_=abs(self._numerator)*dinv %_PyHASH_MODULUS\n result=hash_ if self >=0 else -hash_\n return -2 if result ==-1 else result\n \n def __eq__(a,b):\n ''\n if isinstance(b,numbers.Rational):\n return (a._numerator ==b.numerator and\n a._denominator ==b.denominator)\n if isinstance(b,numbers.Complex)and b.imag ==0:\n b=b.real\n if isinstance(b,float):\n if math.isnan(b)or math.isinf(b):\n \n \n return 0.0 ==b\n else :\n return a ==a.from_float(b)\n else :\n \n \n return NotImplemented\n \n def _richcmp(self,other,op):\n ''\n\n\n\n\n\n\n\n \n \n if isinstance(other,numbers.Rational):\n return op(self._numerator *other.denominator,\n self._denominator *other.numerator)\n if isinstance(other,float):\n if math.isnan(other)or math.isinf(other):\n return op(0.0,other)\n else :\n return op(self,self.from_float(other))\n else :\n return NotImplemented\n \n def __lt__(a,b):\n ''\n return a._richcmp(b,operator.lt)\n \n def __gt__(a,b):\n ''\n return a._richcmp(b,operator.gt)\n \n def __le__(a,b):\n ''\n return a._richcmp(b,operator.le)\n \n def __ge__(a,b):\n ''\n return a._richcmp(b,operator.ge)\n \n def __bool__(a):\n ''\n return a._numerator !=0\n \n \n \n def __reduce__(self):\n return (self.__class__,(str(self),))\n \n def __copy__(self):\n if type(self)==Fraction:\n return self\n return self.__class__(self._numerator,self._denominator)\n \n def __deepcopy__(self,memo):\n if type(self)==Fraction:\n return self\n return self.__class__(self._numerator,self._denominator)\n"], "xml.sax._exceptions": [".py", "''\n\n\n\n\n\n\n\n\nclass SAXException(Exception):\n ''\n\n\n\n\n\n\n \n \n def __init__(self,msg,exception=None ):\n ''\n \n self._msg=msg\n self._exception=exception\n Exception.__init__(self,msg)\n \n def getMessage(self):\n ''\n return self._msg\n \n def getException(self):\n ''\n return self._exception\n \n def __str__(self):\n ''\n return self._msg\n \n def __getitem__(self,ix):\n ''\n \n raise AttributeError(\"__getitem__\")\n \n \n \n \nclass SAXParseException(SAXException):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,msg,exception,locator):\n ''\n SAXException.__init__(self,msg,exception)\n self._locator=locator\n \n \n \n \n \n self._systemId=self._locator.getSystemId()\n self._colnum=self._locator.getColumnNumber()\n self._linenum=self._locator.getLineNumber()\n \n def getColumnNumber(self):\n ''\n \n return self._colnum\n \n def getLineNumber(self):\n ''\n return self._linenum\n \n def getPublicId(self):\n ''\n return self._locator.getPublicId()\n \n def getSystemId(self):\n ''\n return self._systemId\n \n def __str__(self):\n ''\n sysid=self.getSystemId()\n if sysid is None :\n sysid=\"\"\n linenum=self.getLineNumber()\n if linenum is None :\n linenum=\"?\"\n colnum=self.getColumnNumber()\n if colnum is None :\n colnum=\"?\"\n return\"%s:%s:%s: %s\"%(sysid,linenum,colnum,self._msg)\n \n \n \n \nclass SAXNotRecognizedException(SAXException):\n ''\n\n\n\n \n pass\n \n \n \n \nclass SAXNotSupportedException(SAXException):\n ''\n\n\n\n\n \n \n pass\n \n \nclass SAXReaderNotAvailable(SAXNotSupportedException):\n ''\n\n\n\n\n \n \n pass\n"], "functools": [".py", "''\n\n\n\n\n\n\n\n\n\n__all__=['update_wrapper','wraps','WRAPPER_ASSIGNMENTS','WRAPPER_UPDATES',\n'total_ordering','cmp_to_key','lru_cache','reduce','partial']\n\nfrom _functools import partial,reduce\nfrom collections import namedtuple\ntry :\n from _thread import RLock\nexcept :\n class RLock:\n ''\n def __enter__(self):pass\n def __exit__(self,exctype,excinst,exctb):pass\n \n \n \n \n \n \n \n \n \nWRAPPER_ASSIGNMENTS=('__module__','__name__','__qualname__','__doc__',\n'__annotations__')\nWRAPPER_UPDATES=('__dict__',)\ndef update_wrapper(wrapper,\nwrapped,\nassigned=WRAPPER_ASSIGNMENTS,\nupdated=WRAPPER_UPDATES):\n ''\n\n\n\n\n\n\n\n\n\n \n wrapper.__wrapped__=wrapped\n for attr in assigned:\n try :\n value=getattr(wrapped,attr)\n except AttributeError:\n pass\n else :\n setattr(wrapper,attr,value)\n for attr in updated:\n getattr(wrapper,attr).update(getattr(wrapped,attr,{}))\n \n return wrapper\n \ndef wraps(wrapped,\nassigned=WRAPPER_ASSIGNMENTS,\nupdated=WRAPPER_UPDATES):\n ''\n\n\n\n\n\n\n \n return partial(update_wrapper,wrapped=wrapped,\n assigned=assigned,updated=updated)\n \n \n \n \n \n \ndef total_ordering(cls):\n ''\n convert={\n '__lt__':[('__gt__',lambda self,other:not (self other or self ==other)),\n ('__ge__',lambda self,other:self >other or self ==other),\n ('__le__',lambda self,other:not self >other)],\n '__ge__':[('__le__',lambda self,other:(not self >=other)or self ==other),\n ('__gt__',lambda self,other:self >=other and not self ==other),\n ('__lt__',lambda self,other:not self >=other)]\n }\n \n roots=[op for op in convert if getattr(cls,op,None )is not getattr(object,op,None )]\n if not roots:\n raise ValueError('must define at least one ordering operation: < > <= >=')\n root=max(roots)\n for opname,opfunc in convert[root]:\n if opname not in roots:\n opfunc.__name__=opname\n opfunc.__doc__=getattr(int,opname).__doc__\n setattr(cls,opname,opfunc)\n return cls\n \n \n \n \n \n \ndef cmp_to_key(mycmp):\n ''\n class K(object):\n __slots__=['obj']\n def __init__(self,obj):\n self.obj=obj\n def __lt__(self,other):\n return mycmp(self.obj,other.obj)<0\n def __gt__(self,other):\n return mycmp(self.obj,other.obj)>0\n def __eq__(self,other):\n return mycmp(self.obj,other.obj)==0\n def __le__(self,other):\n return mycmp(self.obj,other.obj)<=0\n def __ge__(self,other):\n return mycmp(self.obj,other.obj)>=0\n def __ne__(self,other):\n return mycmp(self.obj,other.obj)!=0\n __hash__=None\n return K\n \ntry :\n from _functools import cmp_to_key\nexcept ImportError:\n pass\n \n \n \n \n \n \n_CacheInfo=namedtuple(\"CacheInfo\",[\"hits\",\"misses\",\"maxsize\",\"currsize\"])\n\nclass _HashedSeq(list):\n ''\n\n\n\n \n \n __slots__='hashvalue'\n \n def __init__(self,tup,hash=hash):\n self[:]=tup\n self.hashvalue=hash(tup)\n \n def __hash__(self):\n return self.hashvalue\n \ndef _make_key(args,kwds,typed,\nkwd_mark=(object(),),\nfasttypes={int,str,frozenset,type(None )},\nsorted=sorted,tuple=tuple,type=type,len=len):\n ''\n\n\n\n\n\n\n\n\n \n key=args\n if kwds:\n sorted_items=sorted(kwds.items())\n key +=kwd_mark\n for item in sorted_items:\n key +=item\n if typed:\n key +=tuple(type(v)for v in args)\n if kwds:\n key +=tuple(type(v)for k,v in sorted_items)\n elif len(key)==1 and type(key[0])in fasttypes:\n return key[0]\n return _HashedSeq(key)\n \ndef lru_cache(maxsize=128,typed=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 sentinel=object()\n make_key=_make_key\n PREV,NEXT,KEY,RESULT=0,1,2,3\n \n def decorating_function(user_function):\n \n cache={}\n hits=misses=0\n full=False\n cache_get=cache.get\n lock=RLock()\n root=[]\n root[:]=[root,root,None ,None ]\n \n if maxsize ==0:\n \n def wrapper(*args,**kwds):\n \n nonlocal misses\n result=user_function(*args,**kwds)\n misses +=1\n return result\n \n elif maxsize is None :\n \n def wrapper(*args,**kwds):\n \n nonlocal hits,misses\n key=make_key(args,kwds,typed)\n result=cache_get(key,sentinel)\n if result is not sentinel:\n hits +=1\n return result\n result=user_function(*args,**kwds)\n cache[key]=result\n misses +=1\n return result\n \n else :\n \n def wrapper(*args,**kwds):\n \n nonlocal root,hits,misses,full\n key=make_key(args,kwds,typed)\n with lock:\n link=cache_get(key)\n if link is not None :\n \n link_prev,link_next,_key,result=link\n link_prev[NEXT]=link_next\n link_next[PREV]=link_prev\n last=root[PREV]\n last[NEXT]=root[PREV]=link\n link[PREV]=last\n link[NEXT]=root\n hits +=1\n return result\n result=user_function(*args,**kwds)\n with lock:\n if key in cache:\n \n \n \n \n pass\n elif full:\n \n oldroot=root\n oldroot[KEY]=key\n oldroot[RESULT]=result\n \n \n \n \n \n \n root=oldroot[NEXT]\n oldkey=root[KEY]\n oldresult=root[RESULT]\n root[KEY]=root[RESULT]=None\n \n del cache[oldkey]\n \n \n \n cache[key]=oldroot\n else :\n \n last=root[PREV]\n link=[last,root,key,result]\n last[NEXT]=root[PREV]=cache[key]=link\n full=(len(cache)>=maxsize)\n misses +=1\n return result\n \n def cache_info():\n ''\n with lock:\n return _CacheInfo(hits,misses,maxsize,len(cache))\n \n def cache_clear():\n ''\n nonlocal hits,misses,full\n with lock:\n cache.clear()\n root[:]=[root,root,None ,None ]\n hits=misses=0\n full=False\n \n wrapper.cache_info=cache_info\n wrapper.cache_clear=cache_clear\n return update_wrapper(wrapper,user_function)\n \n return decorating_function\n"], "pydoc_data": [".py", "", 1], "encodings.iso8859_4": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-4',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u0138'\n'\\u0156'\n'\\xa4'\n'\\u0128'\n'\\u013b'\n'\\xa7'\n'\\xa8'\n'\\u0160'\n'\\u0112'\n'\\u0122'\n'\\u0166'\n'\\xad'\n'\\u017d'\n'\\xaf'\n'\\xb0'\n'\\u0105'\n'\\u02db'\n'\\u0157'\n'\\xb4'\n'\\u0129'\n'\\u013c'\n'\\u02c7'\n'\\xb8'\n'\\u0161'\n'\\u0113'\n'\\u0123'\n'\\u0167'\n'\\u014a'\n'\\u017e'\n'\\u014b'\n'\\u0100'\n'\\xc1'\n'\\xc2'\n'\\xc3'\n'\\xc4'\n'\\xc5'\n'\\xc6'\n'\\u012e'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u0116'\n'\\xcd'\n'\\xce'\n'\\u012a'\n'\\u0110'\n'\\u0145'\n'\\u014c'\n'\\u0136'\n'\\xd4'\n'\\xd5'\n'\\xd6'\n'\\xd7'\n'\\xd8'\n'\\u0172'\n'\\xda'\n'\\xdb'\n'\\xdc'\n'\\u0168'\n'\\u016a'\n'\\xdf'\n'\\u0101'\n'\\xe1'\n'\\xe2'\n'\\xe3'\n'\\xe4'\n'\\xe5'\n'\\xe6'\n'\\u012f'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u0117'\n'\\xed'\n'\\xee'\n'\\u012b'\n'\\u0111'\n'\\u0146'\n'\\u014d'\n'\\u0137'\n'\\xf4'\n'\\xf5'\n'\\xf6'\n'\\xf7'\n'\\xf8'\n'\\u0173'\n'\\xfa'\n'\\xfb'\n'\\xfc'\n'\\u0169'\n'\\u016b'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "webbrowser": [".py", "from browser import window\n\n__all__=[\"Error\",\"open\",\"open_new\",\"open_new_tab\"]\n\nclass Error(Exception):\n pass\n \n_target={0:'',1:'_blank',2:'_new'}\n\n\ndef open(url,new=0,autoraise=True ):\n ''\n\n\n \n if window.open(url,_target[new]):\n return True\n return False\n \ndef open_new(url):\n return open(url,1)\n \ndef open_new_tab(url):\n return open(url,2)\n \n \n"], "sre_compile": [".py", "\n\n\n\n\n\n\n\n\n\n\"\"\"Internal support module for sre\"\"\"\n\n\nimport sys\nimport _sre\nimport sre_parse\nfrom sre_constants import *\nfrom _sre import MAXREPEAT\n\n\nassert _sre.MAGIC ==MAGIC,\"SRE module mismatch\"\n\nif _sre.CODESIZE ==2:\n MAXCODE=65535\nelse :\n MAXCODE=0xFFFFFFFF\n \ndef _identityfunction(x):\n return x\n \n \n_LITERAL_CODES=set([LITERAL,NOT_LITERAL])\n_REPEATING_CODES=set([REPEAT,MIN_REPEAT,MAX_REPEAT])\n_SUCCESS_CODES=set([SUCCESS,FAILURE])\n_ASSERT_CODES=set([ASSERT,ASSERT_NOT])\n\ndef _compile(code,pattern,flags):\n\n emit=code.append\n _len=len\n LITERAL_CODES=_LITERAL_CODES\n REPEATING_CODES=_REPEATING_CODES\n SUCCESS_CODES=_SUCCESS_CODES\n ASSERT_CODES=_ASSERT_CODES\n for op,av in pattern:\n \n \n if op in LITERAL_CODES:\n if flags&SRE_FLAG_IGNORECASE:\n emit(OPCODES[OP_IGNORE[op]])\n emit(_sre.getlower(av,flags))\n else :\n emit(OPCODES[op])\n emit(av)\n elif op is IN:\n if flags&SRE_FLAG_IGNORECASE:\n emit(OPCODES[OP_IGNORE[op]])\n def fixup(literal,flags=flags):\n return _sre.getlower(literal,flags)\n else :\n emit(OPCODES[op])\n fixup=_identityfunction\n skip=_len(code);emit(0)\n _compile_charset(av,flags,code,fixup)\n code[skip]=_len(code)-skip\n elif op is ANY:\n if flags&SRE_FLAG_DOTALL:\n emit(OPCODES[ANY_ALL])\n else :\n emit(OPCODES[ANY])\n elif op in REPEATING_CODES:\n if flags&SRE_FLAG_TEMPLATE:\n raise error(\"internal: unsupported template operator\")\n emit(OPCODES[REPEAT])\n skip=_len(code);emit(0)\n emit(av[0])\n emit(av[1])\n _compile(code,av[2],flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n elif _simple(av)and op is not REPEAT:\n if op is MAX_REPEAT:\n emit(OPCODES[REPEAT_ONE])\n else :\n emit(OPCODES[MIN_REPEAT_ONE])\n skip=_len(code);emit(0)\n emit(av[0])\n emit(av[1])\n _compile(code,av[2],flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n else :\n emit(OPCODES[REPEAT])\n skip=_len(code);emit(0)\n emit(av[0])\n emit(av[1])\n _compile(code,av[2],flags)\n code[skip]=_len(code)-skip\n if op is MAX_REPEAT:\n emit(OPCODES[MAX_UNTIL])\n else :\n emit(OPCODES[MIN_UNTIL])\n elif op is SUBPATTERN:\n if av[0]:\n emit(OPCODES[MARK])\n emit((av[0]-1)*2)\n \n _compile(code,av[1],flags)\n if av[0]:\n emit(OPCODES[MARK])\n emit((av[0]-1)*2+1)\n elif op in SUCCESS_CODES:\n emit(OPCODES[op])\n elif op in ASSERT_CODES:\n emit(OPCODES[op])\n skip=_len(code);emit(0)\n if av[0]>=0:\n emit(0)\n else :\n lo,hi=av[1].getwidth()\n if lo !=hi:\n raise error(\"look-behind requires fixed-width pattern\")\n emit(lo)\n _compile(code,av[1],flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n elif op is CALL:\n emit(OPCODES[op])\n skip=_len(code);emit(0)\n _compile(code,av,flags)\n emit(OPCODES[SUCCESS])\n code[skip]=_len(code)-skip\n elif op is AT:\n emit(OPCODES[op])\n if flags&SRE_FLAG_MULTILINE:\n av=AT_MULTILINE.get(av,av)\n if flags&SRE_FLAG_LOCALE:\n av=AT_LOCALE.get(av,av)\n elif flags&SRE_FLAG_UNICODE:\n av=AT_UNICODE.get(av,av)\n emit(ATCODES[av])\n elif op is BRANCH:\n emit(OPCODES[op])\n tail=[]\n tailappend=tail.append\n for av in av[1]:\n skip=_len(code);emit(0)\n \n _compile(code,av,flags)\n emit(OPCODES[JUMP])\n tailappend(_len(code));emit(0)\n code[skip]=_len(code)-skip\n emit(0)\n for tail in tail:\n code[tail]=_len(code)-tail\n elif op is CATEGORY:\n emit(OPCODES[op])\n if flags&SRE_FLAG_LOCALE:\n av=CH_LOCALE[av]\n elif flags&SRE_FLAG_UNICODE:\n av=CH_UNICODE[av]\n emit(CHCODES[av])\n elif op is GROUPREF:\n if flags&SRE_FLAG_IGNORECASE:\n emit(OPCODES[OP_IGNORE[op]])\n else :\n emit(OPCODES[op])\n emit(av -1)\n elif op is GROUPREF_EXISTS:\n emit(OPCODES[op])\n emit(av[0]-1)\n skipyes=_len(code);emit(0)\n _compile(code,av[1],flags)\n if av[2]:\n emit(OPCODES[JUMP])\n skipno=_len(code);emit(0)\n code[skipyes]=_len(code)-skipyes+1\n _compile(code,av[2],flags)\n code[skipno]=_len(code)-skipno\n else :\n code[skipyes]=_len(code)-skipyes+1\n else :\n raise ValueError(\"unsupported operand type\",op)\n \ndef _compile_charset(charset,flags,code,fixup=None ):\n\n emit=code.append\n if fixup is None :\n fixup=_identityfunction\n for op,av in _optimize_charset(charset,fixup):\n emit(OPCODES[op])\n if op is NEGATE:\n pass\n elif op is LITERAL:\n emit(fixup(av))\n elif op is RANGE:\n emit(fixup(av[0]))\n emit(fixup(av[1]))\n elif op is CHARSET:\n code.extend(av)\n elif op is BIGCHARSET:\n code.extend(av)\n elif op is CATEGORY:\n if flags&SRE_FLAG_LOCALE:\n emit(CHCODES[CH_LOCALE[av]])\n elif flags&SRE_FLAG_UNICODE:\n emit(CHCODES[CH_UNICODE[av]])\n else :\n emit(CHCODES[av])\n else :\n raise error(\"internal: unsupported set operator\")\n emit(OPCODES[FAILURE])\n \n \ndef _optimize_charset(charset,fixup):\n\n out=[]\n outappend=out.append\n charmap=[0]*256\n try :\n for op,av in charset:\n if op is NEGATE:\n outappend((op,av))\n elif op is LITERAL:\n charmap[fixup(av)]=1\n elif op is RANGE:\n for i in range(fixup(av[0]),fixup(av[1])+1):\n charmap[i]=1\n elif op is CATEGORY:\n \n return charset\n except IndexError:\n \n return _optimize_unicode(charset,fixup)\n \n i=p=n=0\n runs=[]\n runsappend=runs.append\n for c in charmap:\n if c:\n if n ==0:\n p=i\n n=n+1\n elif n:\n runsappend((p,n))\n n=0\n i=i+1\n if n:\n runsappend((p,n))\n if len(runs)<=2:\n \n for p,n in runs:\n if n ==1:\n outappend((LITERAL,p))\n else :\n outappend((RANGE,(p,p+n -1)))\n if len(out)MAXCODE:\n dataappend(v)\n m,v=start\n return data\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \ndef _optimize_unicode(charset,fixup):\n try :\n import array\n except ImportError:\n return charset\n charmap=[0]*65536\n negate=0\n try :\n for op,av in charset:\n if op is NEGATE:\n negate=1\n elif op is LITERAL:\n charmap[fixup(av)]=1\n elif op is RANGE:\n for i in range(fixup(av[0]),fixup(av[1])+1):\n charmap[i]=1\n elif op is CATEGORY:\n \n return charset\n except IndexError:\n \n return charset\n if negate:\n if sys.maxunicode !=65535:\n \n \n \n return charset\n for i in range(65536):\n charmap[i]=not charmap[i]\n comps={}\n mapping=[0]*256\n block=0\n data=[]\n for i in range(256):\n chunk=tuple(charmap[i *256:(i+1)*256])\n new=comps.setdefault(chunk,block)\n mapping[i]=new\n if new ==block:\n block=block+1\n data=data+_mk_bitmap(chunk)\n header=[block]\n if _sre.CODESIZE ==2:\n code='H'\n else :\n code='I'\n \n mapping=array.array('b',mapping).tobytes()\n \n mapping=array.array(code,mapping)\n assert mapping.itemsize ==_sre.CODESIZE\n assert len(mapping)*mapping.itemsize ==256\n header=header+mapping.tolist()\n data[0:0]=header\n return [(BIGCHARSET,data)]\n \ndef _simple(av):\n\n lo,hi=av[2].getwidth()\n if lo ==0 and hi ==MAXREPEAT:\n raise error(\"nothing to repeat\")\n return lo ==hi ==1 and av[2][0][0]!=SUBPATTERN\n \ndef _compile_info(code,pattern,flags):\n\n\n\n lo,hi=pattern.getwidth()\n \n if lo ==0:\n return\n \n prefix=[]\n prefixappend=prefix.append\n prefix_skip=0\n charset=[]\n charsetappend=charset.append\n if not (flags&SRE_FLAG_IGNORECASE):\n \n for op,av in pattern.data:\n \n if op is LITERAL:\n if len(prefix)==prefix_skip:\n prefix_skip=prefix_skip+1\n prefixappend(av)\n elif op is SUBPATTERN and len(av[1])==1:\n op,av=av[1][0]\n if op is LITERAL:\n prefixappend(av)\n else :\n break\n else :\n break\n \n if not prefix and pattern.data:\n op,av=pattern.data[0]\n if op is SUBPATTERN and av[1]:\n op,av=av[1][0]\n if op is LITERAL:\n charsetappend((op,av))\n elif op is BRANCH:\n c=[]\n cappend=c.append\n for p in av[1]:\n if not p:\n break\n op,av=p[0]\n if op is LITERAL:\n cappend((op,av))\n else :\n break\n else :\n charset=c\n elif op is BRANCH:\n c=[]\n cappend=c.append\n for p in av[1]:\n if not p:\n break\n op,av=p[0]\n if op is LITERAL:\n cappend((op,av))\n else :\n break\n else :\n charset=c\n elif op is IN:\n charset=av\n \n \n \n \n \n \n \n emit=code.append\n emit(OPCODES[INFO])\n skip=len(code);emit(0)\n \n mask=0\n if prefix:\n mask=SRE_INFO_PREFIX\n if len(prefix)==prefix_skip ==len(pattern.data):\n mask=mask+SRE_INFO_LITERAL\n elif charset:\n mask=mask+SRE_INFO_CHARSET\n emit(mask)\n \n if lo 0 and prefix[i]!=prefix[table[i+1]-1]:\n table[i+1]=table[table[i+1]-1]+1\n code.extend(table[1:])\n elif charset:\n _compile_charset(charset,flags,code)\n code[skip]=len(code)-skip\n \ndef isstring(obj):\n return isinstance(obj,(str,bytes))\n \ndef _code(p,flags):\n\n flags=p.pattern.flags |flags\n code=[]\n \n \n _compile_info(code,p,flags)\n \n \n _compile(code,p.data,flags)\n \n code.append(OPCODES[SUCCESS])\n \n return code\n \ndef compile(p,flags=0):\n\n\n\n if isstring(p):\n pattern=p\n p=sre_parse.parse(p,flags)\n else :\n pattern=None\n \n \n code=_code(p,flags)\n \n \n \n \n \n if p.pattern.groups >100:\n raise AssertionError(\n \"sorry, but this version only supports 100 named groups\"\n )\n \n \n groupindex=p.pattern.groupdict\n indexgroup=[None ]*p.pattern.groups\n for k,i in groupindex.items():\n indexgroup[i]=k\n \n return _sre.compile(\n pattern,flags |p.pattern.flags,code,\n p.pattern.groups -1,\n groupindex,indexgroup\n )\n"], "encodings.mac_cyrillic": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='mac-cyrillic',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u2020'\n'\\xb0'\n'\\u0490'\n'\\xa3'\n'\\xa7'\n'\\u2022'\n'\\xb6'\n'\\u0406'\n'\\xae'\n'\\xa9'\n'\\u2122'\n'\\u0402'\n'\\u0452'\n'\\u2260'\n'\\u0403'\n'\\u0453'\n'\\u221e'\n'\\xb1'\n'\\u2264'\n'\\u2265'\n'\\u0456'\n'\\xb5'\n'\\u0491'\n'\\u0408'\n'\\u0404'\n'\\u0454'\n'\\u0407'\n'\\u0457'\n'\\u0409'\n'\\u0459'\n'\\u040a'\n'\\u045a'\n'\\u0458'\n'\\u0405'\n'\\xac'\n'\\u221a'\n'\\u0192'\n'\\u2248'\n'\\u2206'\n'\\xab'\n'\\xbb'\n'\\u2026'\n'\\xa0'\n'\\u040b'\n'\\u045b'\n'\\u040c'\n'\\u045c'\n'\\u0455'\n'\\u2013'\n'\\u2014'\n'\\u201c'\n'\\u201d'\n'\\u2018'\n'\\u2019'\n'\\xf7'\n'\\u201e'\n'\\u040e'\n'\\u045e'\n'\\u040f'\n'\\u045f'\n'\\u2116'\n'\\u0401'\n'\\u0451'\n'\\u044f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u20ac'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "io": [".py", "import builtins\n\nopen=builtins.open\n\n\nSEEK_SET=0\nSEEK_CUR=1\nSEEK_END=2\n\nr\"\"\"File-like objects that read from or write to a string buffer.\n\nThis implements (nearly) all stdio methods.\n\nf = StringIO() # ready for writing\nf = StringIO(buf) # ready for reading\nf.close() # explicitly release resources held\nflag = f.isatty() # always false\npos = f.tell() # get current position\nf.seek(pos) # set current position\nf.seek(pos, mode) # mode 0: absolute; 1: relative; 2: relative to EOF\nbuf = f.read() # read until EOF\nbuf = f.read(n) # read up to n bytes\nbuf = f.readline() # read until end of line ('\\n') or EOF\nlist = f.readlines()# list of f.readline() results until EOF\nf.truncate([size]) # truncate file at to at most size (default: current pos)\nf.write(buf) # write at current position\nf.writelines(list) # for line in list: f.write(line)\nf.getvalue() # return whole file's contents as a string\n\nNotes:\n- Using a real file is often faster (but less convenient).\n- There's also a much faster implementation in C, called cStringIO, but\n it's not subclassable.\n- fileno() is left unimplemented so that code which uses it triggers\n an exception early.\n- Seeking far beyond EOF and then writing will insert real null\n bytes that occupy space in the buffer.\n- There's a simple test set (see end of this file).\n\"\"\"\ntry :\n from errno import EINVAL\nexcept ImportError:\n EINVAL=22\n \n__all__=[\"StringIO\"]\n\ndef _complain_ifclosed(closed):\n if closed:\n raise ValueError(\"I/O operation on closed file\")\n \nclass StringIO:\n ''\n\n\n\n\n\n\n\n\n\n \n def __init__(self,buf=''):\n self.buf=buf\n self.len=len(buf)\n self.buflist=[]\n self.pos=0\n self.closed=False\n self.softspace=0\n \n def __iter__(self):\n return self\n \n def next(self):\n ''\n\n\n\n\n \n _complain_ifclosed(self.closed)\n r=self.readline()\n if not r:\n raise StopIteration\n return r\n \n def close(self):\n ''\n \n if not self.closed:\n self.closed=True\n del self.buf,self.pos\n \n def isatty(self):\n ''\n\n \n _complain_ifclosed(self.closed)\n return False\n \n def seek(self,pos,mode=0):\n ''\n\n\n\n\n\n\n \n _complain_ifclosed(self.closed)\n if self.buflist:\n self.buf +=''.join(self.buflist)\n self.buflist=[]\n if mode ==1:\n pos +=self.pos\n elif mode ==2:\n pos +=self.len\n self.pos=max(0,pos)\n \n def tell(self):\n ''\n _complain_ifclosed(self.closed)\n return self.pos\n \n def read(self,n=-1):\n ''\n\n\n\n\n\n \n _complain_ifclosed(self.closed)\n if self.buflist:\n self.buf +=''.join(self.buflist)\n self.buflist=[]\n if n is None or n <0:\n newpos=self.len\n else :\n newpos=min(self.pos+n,self.len)\n r=self.buf[self.pos:newpos]\n self.pos=newpos\n return r\n \n def readline(self,length=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n \n _complain_ifclosed(self.closed)\n if self.buflist:\n self.buf +=''.join(self.buflist)\n self.buflist=[]\n i=self.buf.find('\\n',self.pos)\n if i <0:\n newpos=self.len\n else :\n newpos=i+1\n if length is not None and length >=0:\n if self.pos+length slen:\n self.buflist.append('\\0'*(spos -slen))\n slen=spos\n newpos=spos+len(s)\n if spos slen:\n slen=newpos\n else :\n self.buflist.append(s)\n slen=newpos\n self.len=slen\n self.pos=newpos\n \n def writelines(self,iterable):\n ''\n\n\n\n\n\n \n write=self.write\n for line in iterable:\n write(line)\n \n def flush(self):\n ''\n \n _complain_ifclosed(self.closed)\n \n def getvalue(self):\n ''\n\n\n\n\n\n\n\n\n \n _complain_ifclosed(self.closed)\n if self.buflist:\n self.buf +=''.join(self.buflist)\n self.buflist=[]\n return self.buf\n \n \nTextIOWrapper=StringIO\n\nclass RawIOBase:\n\n def read(self,n=-1):\n pass\n def readall(self):\n pass\n def readinto(self,b):\n pass\n def write(self,b):\n pass\n \n \nBufferedIOBase=RawIOBase\nBufferedReader=RawIOBase\n\n\n"], "encodings.iso8859_5": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-5',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0401'\n'\\u0402'\n'\\u0403'\n'\\u0404'\n'\\u0405'\n'\\u0406'\n'\\u0407'\n'\\u0408'\n'\\u0409'\n'\\u040a'\n'\\u040b'\n'\\u040c'\n'\\xad'\n'\\u040e'\n'\\u040f'\n'\\u0410'\n'\\u0411'\n'\\u0412'\n'\\u0413'\n'\\u0414'\n'\\u0415'\n'\\u0416'\n'\\u0417'\n'\\u0418'\n'\\u0419'\n'\\u041a'\n'\\u041b'\n'\\u041c'\n'\\u041d'\n'\\u041e'\n'\\u041f'\n'\\u0420'\n'\\u0421'\n'\\u0422'\n'\\u0423'\n'\\u0424'\n'\\u0425'\n'\\u0426'\n'\\u0427'\n'\\u0428'\n'\\u0429'\n'\\u042a'\n'\\u042b'\n'\\u042c'\n'\\u042d'\n'\\u042e'\n'\\u042f'\n'\\u0430'\n'\\u0431'\n'\\u0432'\n'\\u0433'\n'\\u0434'\n'\\u0435'\n'\\u0436'\n'\\u0437'\n'\\u0438'\n'\\u0439'\n'\\u043a'\n'\\u043b'\n'\\u043c'\n'\\u043d'\n'\\u043e'\n'\\u043f'\n'\\u0440'\n'\\u0441'\n'\\u0442'\n'\\u0443'\n'\\u0444'\n'\\u0445'\n'\\u0446'\n'\\u0447'\n'\\u0448'\n'\\u0449'\n'\\u044a'\n'\\u044b'\n'\\u044c'\n'\\u044d'\n'\\u044e'\n'\\u044f'\n'\\u2116'\n'\\u0451'\n'\\u0452'\n'\\u0453'\n'\\u0454'\n'\\u0455'\n'\\u0456'\n'\\u0457'\n'\\u0458'\n'\\u0459'\n'\\u045a'\n'\\u045b'\n'\\u045c'\n'\\xa7'\n'\\u045e'\n'\\u045f'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "_browser": [".js", "var $module=(function($B) {\n return {\n alert:function(message){window.alert($B.builtins.str(message))},\n confirm: $B.JSObject(window.confirm),\n console:$B.JSObject(window.console),\n document:$B.DOMNode(document),\n doc: $B.DOMNode(document), //want to use document instead of doc\n DOMEvent:$B.DOMEvent,\n DOMNode:$B.DOMNode,\n mouseCoords: function(ev){return $B.JSObject($mouseCoords(ev))},\n prompt: function(message, default_value){\n return $B.JSObject(window.prompt(message, default_value||''))\n },\n reload: function(){\n // Try to reload all scripts and all imported modules\n var scripts=document.getElementsByTagName('script'),$elts=[]\n // Freeze the list of scripts here ; other scripts can be inserted on\n // the fly by viruses\n for(var i=0;i=0, \"lineno must be an int >= 0\"\n item=(action,re.compile(message,re.I),category,\n re.compile(module),lineno)\n if append:\n filters.append(item)\n else :\n filters.insert(0,item)\n \ndef simplefilter(action,category=Warning,lineno=0,append=False ):\n ''\n\n\n\n\n\n\n\n \n assert action in (\"error\",\"ignore\",\"always\",\"default\",\"module\",\n \"once\"),\"invalid action: %r\"%(action,)\n assert isinstance(lineno,int)and lineno >=0, \"lineno must be an int >= 0\"\n item=(action,None ,category,None ,lineno)\n if append:\n filters.append(item)\n else :\n filters.insert(0,item)\n \ndef resetwarnings():\n ''\n filters[:]=[]\n \nclass _OptionError(Exception):\n ''\n pass\n \n \ndef _processoptions(args):\n for arg in args:\n try :\n _setoption(arg)\n except _OptionError as msg:\n print(\"Invalid -W option ignored:\",msg,file=sys.stderr)\n \n \ndef _setoption(arg):\n import re\n parts=arg.split(':')\n if len(parts)>5:\n raise _OptionError(\"too many fields (max 5): %r\"%(arg,))\n while len(parts)<5:\n parts.append('')\n action,message,category,module,lineno=[s.strip()\n for s in parts]\n action=_getaction(action)\n message=re.escape(message)\n category=_getcategory(category)\n module=re.escape(module)\n if module:\n module=module+'$'\n if lineno:\n try :\n lineno=int(lineno)\n if lineno <0:\n raise ValueError\n except (ValueError,OverflowError):\n raise _OptionError(\"invalid lineno %r\"%(lineno,))\n else :\n lineno=0\n filterwarnings(action,message,category,module,lineno)\n \n \ndef _getaction(action):\n if not action:\n return\"default\"\n if action ==\"all\":return\"always\"\n for a in ('default','always','ignore','module','once','error'):\n if a.startswith(action):\n return a\n raise _OptionError(\"invalid action: %r\"%(action,))\n \n \ndef _getcategory(category):\n import re\n if not category:\n return Warning\n if re.match(\"^[a-zA-Z0-9_]+$\",category):\n try :\n cat=eval(category)\n except NameError:\n raise _OptionError(\"unknown warning category: %r\"%(category,))\n else :\n i=category.rfind(\".\")\n module=category[:i]\n klass=category[i+1:]\n try :\n m=__import__(module,None ,None ,[klass])\n except ImportError:\n raise _OptionError(\"invalid module name: %r\"%(module,))\n try :\n cat=getattr(m,klass)\n except AttributeError:\n raise _OptionError(\"unknown warning category: %r\"%(category,))\n if not issubclass(cat,Warning):\n raise _OptionError(\"invalid warning category: %r\"%(category,))\n return cat\n \n \n \ndef warn(message,category=None ,stacklevel=1):\n ''\n \n if isinstance(message,Warning):\n category=message.__class__\n \n if category is None :\n category=UserWarning\n assert issubclass(category,Warning)\n \n try :\n caller=sys._getframe(stacklevel)\n except ValueError:\n globals=sys.__dict__\n lineno=1\n else :\n globals=caller.f_globals\n lineno=caller.f_lineno\n if'__name__'in globals:\n module=globals['__name__']\n else :\n module=\"\"\n filename=globals.get('__file__')\n if filename:\n fnl=filename.lower()\n if fnl.endswith((\".pyc\",\".pyo\")):\n filename=filename[:-1]\n else :\n if module ==\"__main__\":\n try :\n filename=sys.argv[0]\n except AttributeError:\n \n filename='__main__'\n if not filename:\n filename=module\n registry=globals.setdefault(\"__warningregistry__\",{})\n warn_explicit(message,category,filename,lineno,module,registry,\n globals)\n \ndef warn_explicit(message,category,filename,lineno,\nmodule=None ,registry=None ,module_globals=None ):\n lineno=int(lineno)\n if module is None :\n module=filename or\"\"\n if module[-3:].lower()==\".py\":\n module=module[:-3]\n if registry is None :\n registry={}\n if isinstance(message,Warning):\n text=str(message)\n category=message.__class__\n else :\n text=message\n message=category(message)\n key=(text,category,lineno)\n \n if registry.get(key):\n return\n \n for item in filters:\n action,msg,cat,mod,ln=item\n if ((msg is None or msg.match(text))and\n issubclass(category,cat)and\n (mod is None or mod.match(module))and\n (ln ==0 or lineno ==ln)):\n break\n else :\n action=defaultaction\n \n if action ==\"ignore\":\n registry[key]=1\n return\n \n \n \n linecache.getlines(filename,module_globals)\n \n if action ==\"error\":\n raise message\n \n if action ==\"once\":\n registry[key]=1\n oncekey=(text,category)\n if onceregistry.get(oncekey):\n return\n onceregistry[oncekey]=1\n elif action ==\"always\":\n pass\n elif action ==\"module\":\n registry[key]=1\n altkey=(text,category,0)\n if registry.get(altkey):\n return\n registry[altkey]=1\n elif action ==\"default\":\n registry[key]=1\n else :\n \n raise RuntimeError(\n \"Unrecognized action (%r) in warnings.filters:\\n %s\"%\n (action,item))\n if not callable(showwarning):\n raise TypeError(\"warnings.showwarning() must be set to a \"\n \"function or method\")\n \n showwarning(message,category,filename,lineno)\n \n \nclass WarningMessage(object):\n\n ''\n \n _WARNING_DETAILS=(\"message\",\"category\",\"filename\",\"lineno\",\"file\",\n \"line\")\n \n def __init__(self,message,category,filename,lineno,file=None ,\n line=None ):\n local_values=locals()\n for attr in self._WARNING_DETAILS:\n setattr(self,attr,local_values[attr])\n self._category_name=category.__name__ if category else None\n \n def __str__(self):\n return (\"{message : %r, category : %r, filename : %r, lineno : %s, \"\n \"line : %r}\"%(self.message,self._category_name,\n self.filename,self.lineno,self.line))\n \n \nclass catch_warnings(object):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,*,record=False ,module=None ):\n ''\n\n\n\n\n\n \n self._record=record\n self._module=sys.modules['warnings']if module is None else module\n self._entered=False\n \n def __repr__(self):\n args=[]\n if self._record:\n args.append(\"record=True\")\n if self._module is not sys.modules['warnings']:\n args.append(\"module=%r\"%self._module)\n name=type(self).__name__\n return\"%s(%s)\"%(name,\", \".join(args))\n \n def __enter__(self):\n if self._entered:\n raise RuntimeError(\"Cannot enter %r twice\"%self)\n self._entered=True\n self._filters=self._module.filters\n self._module.filters=self._filters[:]\n self._showwarning=self._module.showwarning\n if self._record:\n log=[]\n def showwarning(*args,**kwargs):\n log.append(WarningMessage(*args,**kwargs))\n self._module.showwarning=showwarning\n return log\n else :\n return None\n \n def __exit__(self,*exc_info):\n if not self._entered:\n raise RuntimeError(\"Cannot exit %r without entering first\"%self)\n self._module.filters=self._filters\n self._module.showwarning=self._showwarning\n \n \n \n \n \n \n \n \n \n \n_warnings_defaults=False\ntry :\n from _warnings import (filters,_defaultaction,_onceregistry,\n warn,warn_explicit)\n defaultaction=_defaultaction\n onceregistry=_onceregistry\n _warnings_defaults=True\nexcept ImportError:\n filters=[]\n defaultaction=\"default\"\n onceregistry={}\n \n \n \n_processoptions(sys.warnoptions)\nif not _warnings_defaults:\n silence=[ImportWarning,PendingDeprecationWarning]\n silence.append(DeprecationWarning)\n for cls in silence:\n simplefilter(\"ignore\",category=cls)\n bytes_warning=sys.flags.bytes_warning\n if bytes_warning >1:\n bytes_action=\"error\"\n elif bytes_warning:\n bytes_action=\"default\"\n else :\n bytes_action=\"ignore\"\n simplefilter(bytes_action,category=BytesWarning,append=1)\n \n if hasattr(sys,'gettotalrefcount'):\n resource_action=\"always\"\n else :\n resource_action=\"ignore\"\n simplefilter(resource_action,category=ResourceWarning,append=1)\n \ndel _warnings_defaults\n"], "zipfile": [".py", "''\n\n\n\n\nimport io\nimport os\nimport re\nimport imp\nimport sys\nimport time\nimport stat\nimport shutil\nimport struct\nimport binascii\n\n\"\"\"\ntry:\n import zlib # We may need its compression method\n crc32 = zlib.crc32\nexcept ImportError:\n zlib = None\n crc32 = binascii.crc32\n\ntry:\n import bz2 # We may need its compression method\nexcept ImportError:\n bz2 = None\n\ntry:\n import lzma # We may need its compression method\nexcept ImportError:\n lzma = None\n\"\"\"\nzlib=None\ncrc32=binascii.crc32\nbz2=None\nlzma=None\n\n__all__=[\"BadZipFile\",\"BadZipfile\",\"error\",\n\"ZIP_STORED\",\"ZIP_DEFLATED\",\"ZIP_BZIP2\",\"ZIP_LZMA\",\n\"is_zipfile\",\"ZipInfo\",\"ZipFile\",\"PyZipFile\",\"LargeZipFile\"]\n\nclass BadZipFile(Exception):\n pass\n \n \nclass LargeZipFile(Exception):\n ''\n\n\n \n \nerror=BadZipfile=BadZipFile\n\n\nZIP64_LIMIT=(1 <<31)-1\nZIP_FILECOUNT_LIMIT=1 <<16\nZIP_MAX_COMMENT=(1 <<16)-1\n\n\nZIP_STORED=0\nZIP_DEFLATED=8\nZIP_BZIP2=12\nZIP_LZMA=14\n\n\nDEFAULT_VERSION=20\nZIP64_VERSION=45\nBZIP2_VERSION=46\nLZMA_VERSION=63\n\nMAX_EXTRACT_VERSION=63\n\n\n\n\n\n\n\n\n\nstructEndArchive=b\"<4s4H2LH\"\nstringEndArchive=b\"PK\\005\\006\"\nsizeEndCentDir=struct.calcsize(structEndArchive)\n\n_ECD_SIGNATURE=0\n_ECD_DISK_NUMBER=1\n_ECD_DISK_START=2\n_ECD_ENTRIES_THIS_DISK=3\n_ECD_ENTRIES_TOTAL=4\n_ECD_SIZE=5\n_ECD_OFFSET=6\n_ECD_COMMENT_SIZE=7\n\n\n_ECD_COMMENT=8\n_ECD_LOCATION=9\n\n\n\nstructCentralDir=\"<4s4B4HL2L5H2L\"\nstringCentralDir=b\"PK\\001\\002\"\nsizeCentralDir=struct.calcsize(structCentralDir)\n\n\n_CD_SIGNATURE=0\n_CD_CREATE_VERSION=1\n_CD_CREATE_SYSTEM=2\n_CD_EXTRACT_VERSION=3\n_CD_EXTRACT_SYSTEM=4\n_CD_FLAG_BITS=5\n_CD_COMPRESS_TYPE=6\n_CD_TIME=7\n_CD_DATE=8\n_CD_CRC=9\n_CD_COMPRESSED_SIZE=10\n_CD_UNCOMPRESSED_SIZE=11\n_CD_FILENAME_LENGTH=12\n_CD_EXTRA_FIELD_LENGTH=13\n_CD_COMMENT_LENGTH=14\n_CD_DISK_NUMBER_START=15\n_CD_INTERNAL_FILE_ATTRIBUTES=16\n_CD_EXTERNAL_FILE_ATTRIBUTES=17\n_CD_LOCAL_HEADER_OFFSET=18\n\n\n\nstructFileHeader=\"<4s2B4HL2L2H\"\nstringFileHeader=b\"PK\\003\\004\"\nsizeFileHeader=struct.calcsize(structFileHeader)\n\n_FH_SIGNATURE=0\n_FH_EXTRACT_VERSION=1\n_FH_EXTRACT_SYSTEM=2\n_FH_GENERAL_PURPOSE_FLAG_BITS=3\n_FH_COMPRESSION_METHOD=4\n_FH_LAST_MOD_TIME=5\n_FH_LAST_MOD_DATE=6\n_FH_CRC=7\n_FH_COMPRESSED_SIZE=8\n_FH_UNCOMPRESSED_SIZE=9\n_FH_FILENAME_LENGTH=10\n_FH_EXTRA_FIELD_LENGTH=11\n\n\nstructEndArchive64Locator=\"<4sLQL\"\nstringEndArchive64Locator=b\"PK\\x06\\x07\"\nsizeEndCentDir64Locator=struct.calcsize(structEndArchive64Locator)\n\n\n\nstructEndArchive64=\"<4sQ2H2L4Q\"\nstringEndArchive64=b\"PK\\x06\\x06\"\nsizeEndCentDir64=struct.calcsize(structEndArchive64)\n\n_CD64_SIGNATURE=0\n_CD64_DIRECTORY_RECSIZE=1\n_CD64_CREATE_VERSION=2\n_CD64_EXTRACT_VERSION=3\n_CD64_DISK_NUMBER=4\n_CD64_DISK_NUMBER_START=5\n_CD64_NUMBER_ENTRIES_THIS_DISK=6\n_CD64_NUMBER_ENTRIES_TOTAL=7\n_CD64_DIRECTORY_SIZE=8\n_CD64_OFFSET_START_CENTDIR=9\n\ndef _check_zipfile(fp):\n try :\n if _EndRecData(fp):\n return True\n except IOError:\n pass\n return False\n \ndef is_zipfile(filename):\n ''\n\n\n \n result=False\n try :\n if hasattr(filename,\"read\"):\n result=_check_zipfile(fp=filename)\n else :\n with open(filename,\"rb\")as fp:\n result=_check_zipfile(fp)\n except IOError:\n pass\n return result\n \ndef _EndRecData64(fpin,offset,endrec):\n ''\n\n \n try :\n fpin.seek(offset -sizeEndCentDir64Locator,2)\n except IOError:\n \n \n return endrec\n \n data=fpin.read(sizeEndCentDir64Locator)\n if len(data)!=sizeEndCentDir64Locator:\n return endrec\n sig,diskno,reloff,disks=struct.unpack(structEndArchive64Locator,data)\n if sig !=stringEndArchive64Locator:\n return endrec\n \n if diskno !=0 or disks !=1:\n raise BadZipFile(\"zipfiles that span multiple disks are not supported\")\n \n \n fpin.seek(offset -sizeEndCentDir64Locator -sizeEndCentDir64,2)\n data=fpin.read(sizeEndCentDir64)\n if len(data)!=sizeEndCentDir64:\n return endrec\n sig,sz,create_version,read_version,disk_num,disk_dir, dircount,dircount2,dirsize,diroffset= struct.unpack(structEndArchive64,data)\n if sig !=stringEndArchive64:\n return endrec\n \n \n endrec[_ECD_SIGNATURE]=sig\n endrec[_ECD_DISK_NUMBER]=disk_num\n endrec[_ECD_DISK_START]=disk_dir\n endrec[_ECD_ENTRIES_THIS_DISK]=dircount\n endrec[_ECD_ENTRIES_TOTAL]=dircount2\n endrec[_ECD_SIZE]=dirsize\n endrec[_ECD_OFFSET]=diroffset\n return endrec\n \n \ndef _EndRecData(fpin):\n ''\n\n\n \n \n \n fpin.seek(0,2)\n filesize=fpin.tell()\n \n \n \n \n try :\n fpin.seek(-sizeEndCentDir,2)\n except IOError:\n return None\n data=fpin.read()\n if (len(data)==sizeEndCentDir and\n data[0:4]==stringEndArchive and\n data[-2:]==b\"\\000\\000\"):\n \n endrec=struct.unpack(structEndArchive,data)\n endrec=list(endrec)\n \n \n endrec.append(b\"\")\n endrec.append(filesize -sizeEndCentDir)\n \n \n return _EndRecData64(fpin,-sizeEndCentDir,endrec)\n \n \n \n \n \n \n maxCommentStart=max(filesize -(1 <<16)-sizeEndCentDir,0)\n fpin.seek(maxCommentStart,0)\n data=fpin.read()\n start=data.rfind(stringEndArchive)\n if start >=0:\n \n recData=data[start:start+sizeEndCentDir]\n if len(recData)!=sizeEndCentDir:\n \n return None\n endrec=list(struct.unpack(structEndArchive,recData))\n commentSize=endrec[_ECD_COMMENT_SIZE]\n comment=data[start+sizeEndCentDir:start+sizeEndCentDir+commentSize]\n endrec.append(comment)\n endrec.append(maxCommentStart+start)\n \n \n return _EndRecData64(fpin,maxCommentStart+start -filesize,\n endrec)\n \n \n return None\n \n \nclass ZipInfo(object):\n ''\n \n __slots__=(\n 'orig_filename',\n 'filename',\n 'date_time',\n 'compress_type',\n 'comment',\n 'extra',\n 'create_system',\n 'create_version',\n 'extract_version',\n 'reserved',\n 'flag_bits',\n 'volume',\n 'internal_attr',\n 'external_attr',\n 'header_offset',\n 'CRC',\n 'compress_size',\n 'file_size',\n '_raw_time',\n )\n \n def __init__(self,filename=\"NoName\",date_time=(1980,1,1,0,0,0)):\n self.orig_filename=filename\n \n \n \n null_byte=filename.find(chr(0))\n if null_byte >=0:\n filename=filename[0:null_byte]\n \n \n \n if os.sep !=\"/\"and os.sep in filename:\n filename=filename.replace(os.sep,\"/\")\n \n self.filename=filename\n self.date_time=date_time\n \n if date_time[0]<1980:\n raise ValueError('ZIP does not support timestamps before 1980')\n \n \n self.compress_type=ZIP_STORED\n self.comment=b\"\"\n self.extra=b\"\"\n if sys.platform =='win32':\n self.create_system=0\n else :\n \n self.create_system=3\n self.create_version=DEFAULT_VERSION\n self.extract_version=DEFAULT_VERSION\n self.reserved=0\n self.flag_bits=0\n self.volume=0\n self.internal_attr=0\n self.external_attr=0\n \n \n \n \n \n \n def FileHeader(self,zip64=None ):\n ''\n dt=self.date_time\n dosdate=(dt[0]-1980)<<9 |dt[1]<<5 |dt[2]\n dostime=dt[3]<<11 |dt[4]<<5 |(dt[5]//2)\n if self.flag_bits&0x08:\n \n CRC=compress_size=file_size=0\n else :\n CRC=self.CRC\n compress_size=self.compress_size\n file_size=self.file_size\n \n extra=self.extra\n \n min_version=0\n if zip64 is None :\n zip64=file_size >ZIP64_LIMIT or compress_size >ZIP64_LIMIT\n if zip64:\n fmt='ZIP64_LIMIT or compress_size >ZIP64_LIMIT:\n if not zip64:\n raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n \n \n file_size=0xffffffff\n compress_size=0xffffffff\n min_version=ZIP64_VERSION\n \n if self.compress_type ==ZIP_BZIP2:\n min_version=max(BZIP2_VERSION,min_version)\n elif self.compress_type ==ZIP_LZMA:\n min_version=max(LZMA_VERSION,min_version)\n \n self.extract_version=max(min_version,self.extract_version)\n self.create_version=max(min_version,self.create_version)\n filename,flag_bits=self._encodeFilenameFlags()\n header=struct.pack(structFileHeader,stringFileHeader,\n self.extract_version,self.reserved,flag_bits,\n self.compress_type,dostime,dosdate,CRC,\n compress_size,file_size,\n len(filename),len(extra))\n return header+filename+extra\n \n def _encodeFilenameFlags(self):\n try :\n return self.filename.encode('ascii'),self.flag_bits\n except UnicodeEncodeError:\n return self.filename.encode('utf-8'),self.flag_bits |0x800\n \n def _decodeExtra(self):\n \n extra=self.extra\n unpack=struct.unpack\n while extra:\n tp,ln=unpack('=24:\n counts=unpack('>1)&0x7FFFFFFF)^poly\n else :\n crc=((crc >>1)&0x7FFFFFFF)\n table[i]=crc\n return table\n crctable=_GenerateCRCTable()\n \n def _crc32(self,ch,crc):\n ''\n return ((crc >>8)&0xffffff)^self.crctable[(crc ^ch)&0xff]\n \n def __init__(self,pwd):\n self.key0=305419896\n self.key1=591751049\n self.key2=878082192\n for p in pwd:\n self._UpdateKeys(p)\n \n def _UpdateKeys(self,c):\n self.key0=self._crc32(c,self.key0)\n self.key1=(self.key1+(self.key0&255))&4294967295\n self.key1=(self.key1 *134775813+1)&4294967295\n self.key2=self._crc32((self.key1 >>24)&255,self.key2)\n \n def __call__(self,c):\n ''\n assert isinstance(c,int)\n k=self.key2 |2\n c=c ^(((k *(k ^1))>>8)&255)\n self._UpdateKeys(c)\n return c\n \n \nclass LZMACompressor:\n\n def __init__(self):\n self._comp=None\n \n def _init(self):\n props=lzma._encode_filter_properties({'id':lzma.FILTER_LZMA1})\n self._comp=lzma.LZMACompressor(lzma.FORMAT_RAW,filters=[\n lzma._decode_filter_properties(lzma.FILTER_LZMA1,props)\n ])\n return struct.pack('[^\\r\\n]+)|(?P\\n|\\r\\n?)')\n \n def __init__(self,fileobj,mode,zipinfo,decrypter=None ,\n close_fileobj=False ):\n self._fileobj=fileobj\n self._decrypter=decrypter\n self._close_fileobj=close_fileobj\n \n self._compress_type=zipinfo.compress_type\n self._compress_left=zipinfo.compress_size\n self._left=zipinfo.file_size\n \n self._decompressor=_get_decompressor(self._compress_type)\n \n self._eof=False\n self._readbuffer=b''\n self._offset=0\n \n self._universal='U'in mode\n self.newlines=None\n \n \n \n if self._decrypter is not None :\n self._compress_left -=12\n \n self.mode=mode\n self.name=zipinfo.filename\n \n if hasattr(zipinfo,'CRC'):\n self._expected_crc=zipinfo.CRC\n self._running_crc=crc32(b'')&0xffffffff\n else :\n self._expected_crc=None\n \n def readline(self,limit=-1):\n ''\n\n\n \n \n if not self._universal and limit <0:\n \n i=self._readbuffer.find(b'\\n',self._offset)+1\n if i >0:\n line=self._readbuffer[self._offset:i]\n self._offset=i\n return line\n \n if not self._universal:\n return io.BufferedIOBase.readline(self,limit)\n \n line=b''\n while limit <0 or len(line)=0:\n chunk=chunk[:limit -len(line)]\n \n self._offset +=len(chunk)\n line +=chunk\n \n return line\n \n def peek(self,n=1):\n ''\n if n >len(self._readbuffer)-self._offset:\n chunk=self.read(n)\n if len(chunk)>self._offset:\n self._readbuffer=chunk+self._readbuffer[self._offset:]\n self._offset=0\n else :\n self._offset -=len(chunk)\n \n \n return self._readbuffer[self._offset:self._offset+512]\n \n def readable(self):\n return True\n \n def read(self,n=-1):\n ''\n\n \n if n is None or n <0:\n buf=self._readbuffer[self._offset:]\n self._readbuffer=b''\n self._offset=0\n while not self._eof:\n buf +=self._read1(self.MAX_N)\n return buf\n \n end=n+self._offset\n if end 0 and not self._eof:\n data=self._read1(n)\n if n 0:\n while not self._eof:\n data=self._read1(n)\n if n len(data):\n data +=self._read2(n -len(data))\n else :\n data=self._read2(n)\n \n if self._compress_type ==ZIP_STORED:\n self._eof=self._compress_left <=0\n elif self._compress_type ==ZIP_DEFLATED:\n n=max(n,self.MIN_READ_SIZE)\n data=self._decompressor.decompress(data,n)\n self._eof=(self._decompressor.eof or\n self._compress_left <=0 and\n not self._decompressor.unconsumed_tail)\n if self._eof:\n data +=self._decompressor.flush()\n else :\n data=self._decompressor.decompress(data)\n self._eof=self._decompressor.eof or self._compress_left <=0\n \n data=data[:self._left]\n self._left -=len(data)\n if self._left <=0:\n self._eof=True\n self._update_crc(data)\n return data\n \n def _read2(self,n):\n if self._compress_left <=0:\n return b''\n \n n=max(n,self.MIN_READ_SIZE)\n n=min(n,self._compress_left)\n \n data=self._fileobj.read(n)\n self._compress_left -=len(data)\n \n if self._decrypter is not None :\n data=bytes(map(self._decrypter,data))\n return data\n \n def close(self):\n try :\n if self._close_fileobj:\n self._fileobj.close()\n finally :\n super().close()\n \n \nclass ZipFile:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n fp=None\n _windows_illegal_name_trans_table=None\n \n def __init__(self,file,mode=\"r\",compression=ZIP_STORED,allowZip64=False ):\n ''\n if mode not in (\"r\",\"w\",\"a\"):\n raise RuntimeError('ZipFile() requires mode \"r\", \"w\", or \"a\"')\n \n _check_compression(compression)\n \n self._allowZip64=allowZip64\n self._didModify=False\n self.debug=0\n self.NameToInfo={}\n self.filelist=[]\n self.compression=compression\n self.mode=key=mode.replace('b','')[0]\n self.pwd=None\n self._comment=b''\n \n \n if isinstance(file,str):\n \n self._filePassed=0\n self.filename=file\n modeDict={'r':'rb','w':'wb','a':'r+b'}\n try :\n self.fp=io.open(file,modeDict[mode])\n except IOError:\n if mode =='a':\n mode=key='w'\n self.fp=io.open(file,modeDict[mode])\n else :\n raise\n else :\n self._filePassed=1\n self.fp=file\n self.filename=getattr(file,'name',None )\n \n try :\n if key =='r':\n self._RealGetContents()\n elif key =='w':\n \n \n self._didModify=True\n elif key =='a':\n try :\n \n self._RealGetContents()\n \n self.fp.seek(self.start_dir,0)\n except BadZipFile:\n \n self.fp.seek(0,2)\n \n \n \n self._didModify=True\n else :\n raise RuntimeError('Mode must be \"r\", \"w\" or \"a\"')\n except :\n fp=self.fp\n self.fp=None\n if not self._filePassed:\n fp.close()\n raise\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,traceback):\n self.close()\n \n def _RealGetContents(self):\n ''\n fp=self.fp\n try :\n endrec=_EndRecData(fp)\n except IOError:\n raise BadZipFile(\"File is not a zip file\")\n if not endrec:\n raise BadZipFile(\"File is not a zip file\")\n if self.debug >1:\n print(endrec)\n size_cd=endrec[_ECD_SIZE]\n offset_cd=endrec[_ECD_OFFSET]\n self._comment=endrec[_ECD_COMMENT]\n \n \n concat=endrec[_ECD_LOCATION]-size_cd -offset_cd\n if endrec[_ECD_SIGNATURE]==stringEndArchive64:\n \n concat -=(sizeEndCentDir64+sizeEndCentDir64Locator)\n \n if self.debug >2:\n inferred=concat+offset_cd\n print(\"given, inferred, offset\",offset_cd,inferred,concat)\n \n self.start_dir=offset_cd+concat\n fp.seek(self.start_dir,0)\n data=fp.read(size_cd)\n fp=io.BytesIO(data)\n total=0\n while total 2:\n print(centdir)\n filename=fp.read(centdir[_CD_FILENAME_LENGTH])\n flags=centdir[5]\n if flags&0x800:\n \n filename=filename.decode('utf-8')\n else :\n \n filename=filename.decode('cp437')\n \n x=ZipInfo(filename)\n x.extra=fp.read(centdir[_CD_EXTRA_FIELD_LENGTH])\n x.comment=fp.read(centdir[_CD_COMMENT_LENGTH])\n x.header_offset=centdir[_CD_LOCAL_HEADER_OFFSET]\n (x.create_version,x.create_system,x.extract_version,x.reserved,\n x.flag_bits,x.compress_type,t,d,\n x.CRC,x.compress_size,x.file_size)=centdir[1:12]\n if x.extract_version >MAX_EXTRACT_VERSION:\n raise NotImplementedError(\"zip file version %.1f\"%\n (x.extract_version /10))\n x.volume,x.internal_attr,x.external_attr=centdir[15:18]\n \n x._raw_time=t\n x.date_time=((d >>9)+1980,(d >>5)&0xF,d&0x1F,\n t >>11,(t >>5)&0x3F,(t&0x1F)*2)\n \n x._decodeExtra()\n x.header_offset=x.header_offset+concat\n self.filelist.append(x)\n self.NameToInfo[x.filename]=x\n \n \n total=(total+sizeCentralDir+centdir[_CD_FILENAME_LENGTH]\n +centdir[_CD_EXTRA_FIELD_LENGTH]\n +centdir[_CD_COMMENT_LENGTH])\n \n if self.debug >2:\n print(\"total\",total)\n \n \n def namelist(self):\n ''\n return [data.filename for data in self.filelist]\n \n def infolist(self):\n ''\n \n return self.filelist\n \n def printdir(self,file=None ):\n ''\n print(\"%-46s %19s %12s\"%(\"File Name\",\"Modified \",\"Size\"),\n file=file)\n for zinfo in self.filelist:\n date=\"%d-%02d-%02d %02d:%02d:%02d\"%zinfo.date_time[:6]\n print(\"%-46s %s %12d\"%(zinfo.filename,date,zinfo.file_size),\n file=file)\n \n def testzip(self):\n ''\n chunk_size=2 **20\n for zinfo in self.filelist:\n try :\n \n \n with self.open(zinfo.filename,\"r\")as f:\n while f.read(chunk_size):\n pass\n except BadZipFile:\n return zinfo.filename\n \n def getinfo(self,name):\n ''\n info=self.NameToInfo.get(name)\n if info is None :\n raise KeyError(\n 'There is no item named %r in the archive'%name)\n \n return info\n \n def setpassword(self,pwd):\n ''\n if pwd and not isinstance(pwd,bytes):\n raise TypeError(\"pwd: expected bytes, got %s\"%type(pwd))\n if pwd:\n self.pwd=pwd\n else :\n self.pwd=None\n \n @property\n def comment(self):\n ''\n return self._comment\n \n @comment.setter\n def comment(self,comment):\n if not isinstance(comment,bytes):\n raise TypeError(\"comment: expected bytes, got %s\"%type(comment))\n \n if len(comment)>=ZIP_MAX_COMMENT:\n if self.debug:\n print('Archive comment is too long; truncating to %d bytes'\n %ZIP_MAX_COMMENT)\n comment=comment[:ZIP_MAX_COMMENT]\n self._comment=comment\n self._didModify=True\n \n def read(self,name,pwd=None ):\n ''\n with self.open(name,\"r\",pwd)as fp:\n return fp.read()\n \n def open(self,name,mode=\"r\",pwd=None ):\n ''\n if mode not in (\"r\",\"U\",\"rU\"):\n raise RuntimeError('open() requires mode \"r\", \"U\", or \"rU\"')\n if pwd and not isinstance(pwd,bytes):\n raise TypeError(\"pwd: expected bytes, got %s\"%type(pwd))\n if not self.fp:\n raise RuntimeError(\n \"Attempt to read ZIP archive that was already closed\")\n \n \n \n if self._filePassed:\n zef_file=self.fp\n else :\n zef_file=io.open(self.filename,'rb')\n \n try :\n \n if isinstance(name,ZipInfo):\n \n zinfo=name\n else :\n \n zinfo=self.getinfo(name)\n zef_file.seek(zinfo.header_offset,0)\n \n \n fheader=zef_file.read(sizeFileHeader)\n if len(fheader)!=sizeFileHeader:\n raise BadZipFile(\"Truncated file header\")\n fheader=struct.unpack(structFileHeader,fheader)\n if fheader[_FH_SIGNATURE]!=stringFileHeader:\n raise BadZipFile(\"Bad magic number for file header\")\n \n fname=zef_file.read(fheader[_FH_FILENAME_LENGTH])\n if fheader[_FH_EXTRA_FIELD_LENGTH]:\n zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])\n \n if zinfo.flag_bits&0x20:\n \n raise NotImplementedError(\"compressed patched data (flag bit 5)\")\n \n if zinfo.flag_bits&0x40:\n \n raise NotImplementedError(\"strong encryption (flag bit 6)\")\n \n if zinfo.flag_bits&0x800:\n \n fname_str=fname.decode(\"utf-8\")\n else :\n fname_str=fname.decode(\"cp437\")\n \n if fname_str !=zinfo.orig_filename:\n raise BadZipFile(\n 'File name in directory %r and header %r differ.'\n %(zinfo.orig_filename,fname))\n \n \n is_encrypted=zinfo.flag_bits&0x1\n zd=None\n if is_encrypted:\n if not pwd:\n pwd=self.pwd\n if not pwd:\n raise RuntimeError(\"File %s is encrypted, password \"\n \"required for extraction\"%name)\n \n zd=_ZipDecrypter(pwd)\n \n \n \n \n \n header=zef_file.read(12)\n h=list(map(zd,header[0:12]))\n if zinfo.flag_bits&0x8:\n \n check_byte=(zinfo._raw_time >>8)&0xff\n else :\n \n check_byte=(zinfo.CRC >>24)&0xff\n if h[11]!=check_byte:\n raise RuntimeError(\"Bad password for file\",name)\n \n return ZipExtFile(zef_file,mode,zinfo,zd,\n close_fileobj=not self._filePassed)\n except :\n if not self._filePassed:\n zef_file.close()\n raise\n \n def extract(self,member,path=None ,pwd=None ):\n ''\n\n\n\n \n if not isinstance(member,ZipInfo):\n member=self.getinfo(member)\n \n if path is None :\n path=os.getcwd()\n \n return self._extract_member(member,path,pwd)\n \n def extractall(self,path=None ,members=None ,pwd=None ):\n ''\n\n\n\n \n if members is None :\n members=self.namelist()\n \n for zipinfo in members:\n self.extract(zipinfo,path,pwd)\n \n @classmethod\n def _sanitize_windows_name(cls,arcname,pathsep):\n ''\n table=cls._windows_illegal_name_trans_table\n if not table:\n illegal=':<>|\"?*'\n table=str.maketrans(illegal,'_'*len(illegal))\n cls._windows_illegal_name_trans_table=table\n arcname=arcname.translate(table)\n \n arcname=(x.rstrip('.')for x in arcname.split(pathsep))\n \n arcname=pathsep.join(x for x in arcname if x)\n return arcname\n \n def _extract_member(self,member,targetpath,pwd):\n ''\n\n \n \n \n arcname=member.filename.replace('/',os.path.sep)\n \n if os.path.altsep:\n arcname=arcname.replace(os.path.altsep,os.path.sep)\n \n \n arcname=os.path.splitdrive(arcname)[1]\n invalid_path_parts=('',os.path.curdir,os.path.pardir)\n arcname=os.path.sep.join(x for x in arcname.split(os.path.sep)\n if x not in invalid_path_parts)\n if os.path.sep =='\\\\':\n \n arcname=self._sanitize_windows_name(arcname,os.path.sep)\n \n targetpath=os.path.join(targetpath,arcname)\n targetpath=os.path.normpath(targetpath)\n \n \n upperdirs=os.path.dirname(targetpath)\n if upperdirs and not os.path.exists(upperdirs):\n os.makedirs(upperdirs)\n \n if member.filename[-1]=='/':\n if not os.path.isdir(targetpath):\n os.mkdir(targetpath)\n return targetpath\n \n with self.open(member,pwd=pwd)as source, open(targetpath,\"wb\")as target:\n shutil.copyfileobj(source,target)\n \n return targetpath\n \n def _writecheck(self,zinfo):\n ''\n if zinfo.filename in self.NameToInfo:\n if self.debug:\n print(\"Duplicate name:\",zinfo.filename)\n if self.mode not in (\"w\",\"a\"):\n raise RuntimeError('write() requires mode \"w\" or \"a\"')\n if not self.fp:\n raise RuntimeError(\n \"Attempt to write ZIP archive that was already closed\")\n _check_compression(zinfo.compress_type)\n if zinfo.file_size >ZIP64_LIMIT:\n if not self._allowZip64:\n raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n if zinfo.header_offset >ZIP64_LIMIT:\n if not self._allowZip64:\n raise LargeZipFile(\n \"Zipfile size would require ZIP64 extensions\")\n \n def write(self,filename,arcname=None ,compress_type=None ):\n ''\n \n if not self.fp:\n raise RuntimeError(\n \"Attempt to write to ZIP archive that was already closed\")\n \n st=os.stat(filename)\n isdir=stat.S_ISDIR(st.st_mode)\n mtime=time.localtime(st.st_mtime)\n date_time=mtime[0:6]\n \n if arcname is None :\n arcname=filename\n arcname=os.path.normpath(os.path.splitdrive(arcname)[1])\n while arcname[0]in (os.sep,os.altsep):\n arcname=arcname[1:]\n if isdir:\n arcname +='/'\n zinfo=ZipInfo(arcname,date_time)\n zinfo.external_attr=(st[0]&0xFFFF)<<16\n if compress_type is None :\n zinfo.compress_type=self.compression\n else :\n zinfo.compress_type=compress_type\n \n zinfo.file_size=st.st_size\n zinfo.flag_bits=0x00\n zinfo.header_offset=self.fp.tell()\n if zinfo.compress_type ==ZIP_LZMA:\n \n zinfo.flag_bits |=0x02\n \n self._writecheck(zinfo)\n self._didModify=True\n \n if isdir:\n zinfo.file_size=0\n zinfo.compress_size=0\n zinfo.CRC=0\n self.filelist.append(zinfo)\n self.NameToInfo[zinfo.filename]=zinfo\n self.fp.write(zinfo.FileHeader(False ))\n return\n \n cmpr=_get_compressor(zinfo.compress_type)\n with open(filename,\"rb\")as fp:\n \n zinfo.CRC=CRC=0\n zinfo.compress_size=compress_size=0\n \n zip64=self._allowZip64 and zinfo.file_size *1.05 >ZIP64_LIMIT\n self.fp.write(zinfo.FileHeader(zip64))\n file_size=0\n while 1:\n buf=fp.read(1024 *8)\n if not buf:\n break\n file_size=file_size+len(buf)\n CRC=crc32(buf,CRC)&0xffffffff\n if cmpr:\n buf=cmpr.compress(buf)\n compress_size=compress_size+len(buf)\n self.fp.write(buf)\n if cmpr:\n buf=cmpr.flush()\n compress_size=compress_size+len(buf)\n self.fp.write(buf)\n zinfo.compress_size=compress_size\n else :\n zinfo.compress_size=file_size\n zinfo.CRC=CRC\n zinfo.file_size=file_size\n if not zip64 and self._allowZip64:\n if file_size >ZIP64_LIMIT:\n raise RuntimeError('File size has increased during compressing')\n if compress_size >ZIP64_LIMIT:\n raise RuntimeError('Compressed size larger than uncompressed size')\n \n \n position=self.fp.tell()\n self.fp.seek(zinfo.header_offset,0)\n self.fp.write(zinfo.FileHeader(zip64))\n self.fp.seek(position,0)\n self.filelist.append(zinfo)\n self.NameToInfo[zinfo.filename]=zinfo\n \n def writestr(self,zinfo_or_arcname,data,compress_type=None ):\n ''\n\n\n\n \n if isinstance(data,str):\n data=data.encode(\"utf-8\")\n if not isinstance(zinfo_or_arcname,ZipInfo):\n zinfo=ZipInfo(filename=zinfo_or_arcname,\n date_time=time.localtime(time.time())[:6])\n zinfo.compress_type=self.compression\n zinfo.external_attr=0o600 <<16\n else :\n zinfo=zinfo_or_arcname\n \n if not self.fp:\n raise RuntimeError(\n \"Attempt to write to ZIP archive that was already closed\")\n \n zinfo.file_size=len(data)\n zinfo.header_offset=self.fp.tell()\n if compress_type is not None :\n zinfo.compress_type=compress_type\n if zinfo.compress_type ==ZIP_LZMA:\n \n zinfo.flag_bits |=0x02\n \n self._writecheck(zinfo)\n self._didModify=True\n zinfo.CRC=crc32(data)&0xffffffff\n co=_get_compressor(zinfo.compress_type)\n if co:\n data=co.compress(data)+co.flush()\n zinfo.compress_size=len(data)\n else :\n zinfo.compress_size=zinfo.file_size\n zip64=zinfo.file_size >ZIP64_LIMIT or zinfo.compress_size >ZIP64_LIMIT\n if zip64 and not self._allowZip64:\n raise LargeZipFile(\"Filesize would require ZIP64 extensions\")\n self.fp.write(zinfo.FileHeader(zip64))\n self.fp.write(data)\n if zinfo.flag_bits&0x08:\n \n fmt='ZIP64_LIMIT or zinfo.compress_size >ZIP64_LIMIT:\n extra.append(zinfo.file_size)\n extra.append(zinfo.compress_size)\n file_size=0xffffffff\n compress_size=0xffffffff\n else :\n file_size=zinfo.file_size\n compress_size=zinfo.compress_size\n \n if zinfo.header_offset >ZIP64_LIMIT:\n extra.append(zinfo.header_offset)\n header_offset=0xffffffff\n else :\n header_offset=zinfo.header_offset\n \n extra_data=zinfo.extra\n min_version=0\n if extra:\n \n extra_data=struct.pack(\n '=ZIP_FILECOUNT_LIMIT or\n centDirOffset >ZIP64_LIMIT or\n centDirSize >ZIP64_LIMIT):\n \n zip64endrec=struct.pack(\n structEndArchive64,stringEndArchive64,\n 44,45,45,0,0,centDirCount,centDirCount,\n centDirSize,centDirOffset)\n self.fp.write(zip64endrec)\n \n zip64locrec=struct.pack(\n structEndArchive64Locator,\n stringEndArchive64Locator,0,pos2,1)\n self.fp.write(zip64locrec)\n centDirCount=min(centDirCount,0xFFFF)\n centDirSize=min(centDirSize,0xFFFFFFFF)\n centDirOffset=min(centDirOffset,0xFFFFFFFF)\n \n endrec=struct.pack(structEndArchive,stringEndArchive,\n 0,0,centDirCount,centDirCount,\n centDirSize,centDirOffset,len(self._comment))\n self.fp.write(endrec)\n self.fp.write(self._comment)\n self.fp.flush()\n finally :\n fp=self.fp\n self.fp=None\n if not self._filePassed:\n fp.close()\n \n \nclass PyZipFile(ZipFile):\n ''\n \n def __init__(self,file,mode=\"r\",compression=ZIP_STORED,\n allowZip64=False ,optimize=-1):\n ZipFile.__init__(self,file,mode=mode,compression=compression,\n allowZip64=allowZip64)\n self._optimize=optimize\n \n def writepy(self,pathname,basename=\"\"):\n ''\n\n\n\n\n\n\n\n\n\n \n dir,name=os.path.split(pathname)\n if os.path.isdir(pathname):\n initname=os.path.join(pathname,\"__init__.py\")\n if os.path.isfile(initname):\n \n if basename:\n basename=\"%s/%s\"%(basename,name)\n else :\n basename=name\n if self.debug:\n print(\"Adding package in\",pathname,\"as\",basename)\n fname,arcname=self._get_codename(initname[0:-3],basename)\n if self.debug:\n print(\"Adding\",arcname)\n self.write(fname,arcname)\n dirlist=os.listdir(pathname)\n dirlist.remove(\"__init__.py\")\n \n for filename in dirlist:\n path=os.path.join(pathname,filename)\n root,ext=os.path.splitext(filename)\n if os.path.isdir(path):\n if os.path.isfile(os.path.join(path,\"__init__.py\")):\n \n self.writepy(path,basename)\n elif ext ==\".py\":\n fname,arcname=self._get_codename(path[0:-3],\n basename)\n if self.debug:\n print(\"Adding\",arcname)\n self.write(fname,arcname)\n else :\n \n if self.debug:\n print(\"Adding files from directory\",pathname)\n for filename in os.listdir(pathname):\n path=os.path.join(pathname,filename)\n root,ext=os.path.splitext(filename)\n if ext ==\".py\":\n fname,arcname=self._get_codename(path[0:-3],\n basename)\n if self.debug:\n print(\"Adding\",arcname)\n self.write(fname,arcname)\n else :\n if pathname[-3:]!=\".py\":\n raise RuntimeError(\n 'Files added with writepy() must end with \".py\"')\n fname,arcname=self._get_codename(pathname[0:-3],basename)\n if self.debug:\n print(\"Adding file\",arcname)\n self.write(fname,arcname)\n \n def _get_codename(self,pathname,basename):\n ''\n\n\n\n\n \n def _compile(file,optimize=-1):\n import py_compile\n if self.debug:\n print(\"Compiling\",file)\n try :\n py_compile.compile(file,doraise=True ,optimize=optimize)\n except py_compile.PyCompileError as err:\n print(err.msg)\n return False\n return True\n \n file_py=pathname+\".py\"\n file_pyc=pathname+\".pyc\"\n file_pyo=pathname+\".pyo\"\n pycache_pyc=imp.cache_from_source(file_py,True )\n pycache_pyo=imp.cache_from_source(file_py,False )\n if self._optimize ==-1:\n \n if (os.path.isfile(file_pyo)and\n os.stat(file_pyo).st_mtime >=os.stat(file_py).st_mtime):\n \n arcname=fname=file_pyo\n elif (os.path.isfile(file_pyc)and\n os.stat(file_pyc).st_mtime >=os.stat(file_py).st_mtime):\n \n arcname=fname=file_pyc\n elif (os.path.isfile(pycache_pyc)and\n os.stat(pycache_pyc).st_mtime >=os.stat(file_py).st_mtime):\n \n \n fname=pycache_pyc\n arcname=file_pyc\n elif (os.path.isfile(pycache_pyo)and\n os.stat(pycache_pyo).st_mtime >=os.stat(file_py).st_mtime):\n \n \n fname=pycache_pyo\n arcname=file_pyo\n else :\n \n if _compile(file_py):\n fname=(pycache_pyc if __debug__ else pycache_pyo)\n arcname=(file_pyc if __debug__ else file_pyo)\n else :\n fname=arcname=file_py\n else :\n \n if self._optimize ==0:\n fname=pycache_pyc\n arcname=file_pyc\n else :\n fname=pycache_pyo\n arcname=file_pyo\n if not (os.path.isfile(fname)and\n os.stat(fname).st_mtime >=os.stat(file_py).st_mtime):\n if not _compile(file_py,optimize=self._optimize):\n fname=arcname=file_py\n archivename=os.path.split(arcname)[1]\n if basename:\n archivename=\"%s/%s\"%(basename,archivename)\n return (fname,archivename)\n \n \ndef main(args=None ):\n import textwrap\n USAGE=textwrap.dedent(\"\"\"\\\n Usage:\n zipfile.py -l zipfile.zip # Show listing of a zipfile\n zipfile.py -t zipfile.zip # Test if a zipfile is valid\n zipfile.py -e zipfile.zip target # Extract zipfile into target dir\n zipfile.py -c zipfile.zip src ... # Create zipfile from sources\n \"\"\")\n if args is None :\n args=sys.argv[1:]\n \n if not args or args[0]not in ('-l','-c','-e','-t'):\n print(USAGE)\n sys.exit(1)\n \n if args[0]=='-l':\n if len(args)!=2:\n print(USAGE)\n sys.exit(1)\n with ZipFile(args[1],'r')as zf:\n zf.printdir()\n \n elif args[0]=='-t':\n if len(args)!=2:\n print(USAGE)\n sys.exit(1)\n with ZipFile(args[1],'r')as zf:\n badfile=zf.testzip()\n if badfile:\n print(\"The following enclosed file is corrupted: {!r}\".format(badfile))\n print(\"Done testing\")\n \n elif args[0]=='-e':\n if len(args)!=3:\n print(USAGE)\n sys.exit(1)\n \n with ZipFile(args[1],'r')as zf:\n out=args[2]\n for path in zf.namelist():\n if path.startswith('./'):\n tgt=os.path.join(out,path[2:])\n else :\n tgt=os.path.join(out,path)\n \n tgtdir=os.path.dirname(tgt)\n if not os.path.exists(tgtdir):\n os.makedirs(tgtdir)\n with open(tgt,'wb')as fp:\n fp.write(zf.read(path))\n \n elif args[0]=='-c':\n if len(args)<3:\n print(USAGE)\n sys.exit(1)\n \n def addToZip(zf,path,zippath):\n if os.path.isfile(path):\n zf.write(path,zippath,ZIP_DEFLATED)\n elif os.path.isdir(path):\n for nm in os.listdir(path):\n addToZip(zf,\n os.path.join(path,nm),os.path.join(zippath,nm))\n \n \n with ZipFile(args[1],'w',allowZip64=True )as zf:\n for src in args[2:]:\n addToZip(zf,src,os.path.basename(src))\n \nif __name__ ==\"__main__\":\n main()\n"], "encodings.cp1255": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp1255',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\u20ac'\n'\\ufffe'\n'\\u201a'\n'\\u0192'\n'\\u201e'\n'\\u2026'\n'\\u2020'\n'\\u2021'\n'\\u02c6'\n'\\u2030'\n'\\ufffe'\n'\\u2039'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u2018'\n'\\u2019'\n'\\u201c'\n'\\u201d'\n'\\u2022'\n'\\u2013'\n'\\u2014'\n'\\u02dc'\n'\\u2122'\n'\\ufffe'\n'\\u203a'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\xa0'\n'\\xa1'\n'\\xa2'\n'\\xa3'\n'\\u20aa'\n'\\xa5'\n'\\xa6'\n'\\xa7'\n'\\xa8'\n'\\xa9'\n'\\xd7'\n'\\xab'\n'\\xac'\n'\\xad'\n'\\xae'\n'\\xaf'\n'\\xb0'\n'\\xb1'\n'\\xb2'\n'\\xb3'\n'\\xb4'\n'\\xb5'\n'\\xb6'\n'\\xb7'\n'\\xb8'\n'\\xb9'\n'\\xf7'\n'\\xbb'\n'\\xbc'\n'\\xbd'\n'\\xbe'\n'\\xbf'\n'\\u05b0'\n'\\u05b1'\n'\\u05b2'\n'\\u05b3'\n'\\u05b4'\n'\\u05b5'\n'\\u05b6'\n'\\u05b7'\n'\\u05b8'\n'\\u05b9'\n'\\ufffe'\n'\\u05bb'\n'\\u05bc'\n'\\u05bd'\n'\\u05be'\n'\\u05bf'\n'\\u05c0'\n'\\u05c1'\n'\\u05c2'\n'\\u05c3'\n'\\u05f0'\n'\\u05f1'\n'\\u05f2'\n'\\u05f3'\n'\\u05f4'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\ufffe'\n'\\u05d0'\n'\\u05d1'\n'\\u05d2'\n'\\u05d3'\n'\\u05d4'\n'\\u05d5'\n'\\u05d6'\n'\\u05d7'\n'\\u05d8'\n'\\u05d9'\n'\\u05da'\n'\\u05db'\n'\\u05dc'\n'\\u05dd'\n'\\u05de'\n'\\u05df'\n'\\u05e0'\n'\\u05e1'\n'\\u05e2'\n'\\u05e3'\n'\\u05e4'\n'\\u05e5'\n'\\u05e6'\n'\\u05e7'\n'\\u05e8'\n'\\u05e9'\n'\\u05ea'\n'\\ufffe'\n'\\ufffe'\n'\\u200e'\n'\\u200f'\n'\\ufffe'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.iso8859_2": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_table)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_table)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='iso8859-2',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \n \ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\x80'\n'\\x81'\n'\\x82'\n'\\x83'\n'\\x84'\n'\\x85'\n'\\x86'\n'\\x87'\n'\\x88'\n'\\x89'\n'\\x8a'\n'\\x8b'\n'\\x8c'\n'\\x8d'\n'\\x8e'\n'\\x8f'\n'\\x90'\n'\\x91'\n'\\x92'\n'\\x93'\n'\\x94'\n'\\x95'\n'\\x96'\n'\\x97'\n'\\x98'\n'\\x99'\n'\\x9a'\n'\\x9b'\n'\\x9c'\n'\\x9d'\n'\\x9e'\n'\\x9f'\n'\\xa0'\n'\\u0104'\n'\\u02d8'\n'\\u0141'\n'\\xa4'\n'\\u013d'\n'\\u015a'\n'\\xa7'\n'\\xa8'\n'\\u0160'\n'\\u015e'\n'\\u0164'\n'\\u0179'\n'\\xad'\n'\\u017d'\n'\\u017b'\n'\\xb0'\n'\\u0105'\n'\\u02db'\n'\\u0142'\n'\\xb4'\n'\\u013e'\n'\\u015b'\n'\\u02c7'\n'\\xb8'\n'\\u0161'\n'\\u015f'\n'\\u0165'\n'\\u017a'\n'\\u02dd'\n'\\u017e'\n'\\u017c'\n'\\u0154'\n'\\xc1'\n'\\xc2'\n'\\u0102'\n'\\xc4'\n'\\u0139'\n'\\u0106'\n'\\xc7'\n'\\u010c'\n'\\xc9'\n'\\u0118'\n'\\xcb'\n'\\u011a'\n'\\xcd'\n'\\xce'\n'\\u010e'\n'\\u0110'\n'\\u0143'\n'\\u0147'\n'\\xd3'\n'\\xd4'\n'\\u0150'\n'\\xd6'\n'\\xd7'\n'\\u0158'\n'\\u016e'\n'\\xda'\n'\\u0170'\n'\\xdc'\n'\\xdd'\n'\\u0162'\n'\\xdf'\n'\\u0155'\n'\\xe1'\n'\\xe2'\n'\\u0103'\n'\\xe4'\n'\\u013a'\n'\\u0107'\n'\\xe7'\n'\\u010d'\n'\\xe9'\n'\\u0119'\n'\\xeb'\n'\\u011b'\n'\\xed'\n'\\xee'\n'\\u010f'\n'\\u0111'\n'\\u0144'\n'\\u0148'\n'\\xf3'\n'\\xf4'\n'\\u0151'\n'\\xf6'\n'\\xf7'\n'\\u0159'\n'\\u016f'\n'\\xfa'\n'\\u0171'\n'\\xfc'\n'\\xfd'\n'\\u0163'\n'\\u02d9'\n)\n\n\nencoding_table=codecs.charmap_build(decoding_table)\n"], "encodings.cp850": [".py", "''\n\n\n\nimport codecs\n\n\n\nclass Codec(codecs.Codec):\n\n def encode(self,input,errors='strict'):\n return codecs.charmap_encode(input,errors,encoding_map)\n \n def decode(self,input,errors='strict'):\n return codecs.charmap_decode(input,errors,decoding_table)\n \nclass IncrementalEncoder(codecs.IncrementalEncoder):\n def encode(self,input,final=False ):\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\n \nclass IncrementalDecoder(codecs.IncrementalDecoder):\n def decode(self,input,final=False ):\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\n \nclass StreamWriter(Codec,codecs.StreamWriter):\n pass\n \nclass StreamReader(Codec,codecs.StreamReader):\n pass\n \n \n \ndef getregentry():\n return codecs.CodecInfo(\n name='cp850',\n encode=Codec().encode,\n decode=Codec().decode,\n incrementalencoder=IncrementalEncoder,\n incrementaldecoder=IncrementalDecoder,\n streamreader=StreamReader,\n streamwriter=StreamWriter,\n )\n \n \n \ndecoding_map=codecs.make_identity_dict(range(256))\ndecoding_map.update({\n0x0080:0x00c7,\n0x0081:0x00fc,\n0x0082:0x00e9,\n0x0083:0x00e2,\n0x0084:0x00e4,\n0x0085:0x00e0,\n0x0086:0x00e5,\n0x0087:0x00e7,\n0x0088:0x00ea,\n0x0089:0x00eb,\n0x008a:0x00e8,\n0x008b:0x00ef,\n0x008c:0x00ee,\n0x008d:0x00ec,\n0x008e:0x00c4,\n0x008f:0x00c5,\n0x0090:0x00c9,\n0x0091:0x00e6,\n0x0092:0x00c6,\n0x0093:0x00f4,\n0x0094:0x00f6,\n0x0095:0x00f2,\n0x0096:0x00fb,\n0x0097:0x00f9,\n0x0098:0x00ff,\n0x0099:0x00d6,\n0x009a:0x00dc,\n0x009b:0x00f8,\n0x009c:0x00a3,\n0x009d:0x00d8,\n0x009e:0x00d7,\n0x009f:0x0192,\n0x00a0:0x00e1,\n0x00a1:0x00ed,\n0x00a2:0x00f3,\n0x00a3:0x00fa,\n0x00a4:0x00f1,\n0x00a5:0x00d1,\n0x00a6:0x00aa,\n0x00a7:0x00ba,\n0x00a8:0x00bf,\n0x00a9:0x00ae,\n0x00aa:0x00ac,\n0x00ab:0x00bd,\n0x00ac:0x00bc,\n0x00ad:0x00a1,\n0x00ae:0x00ab,\n0x00af:0x00bb,\n0x00b0:0x2591,\n0x00b1:0x2592,\n0x00b2:0x2593,\n0x00b3:0x2502,\n0x00b4:0x2524,\n0x00b5:0x00c1,\n0x00b6:0x00c2,\n0x00b7:0x00c0,\n0x00b8:0x00a9,\n0x00b9:0x2563,\n0x00ba:0x2551,\n0x00bb:0x2557,\n0x00bc:0x255d,\n0x00bd:0x00a2,\n0x00be:0x00a5,\n0x00bf:0x2510,\n0x00c0:0x2514,\n0x00c1:0x2534,\n0x00c2:0x252c,\n0x00c3:0x251c,\n0x00c4:0x2500,\n0x00c5:0x253c,\n0x00c6:0x00e3,\n0x00c7:0x00c3,\n0x00c8:0x255a,\n0x00c9:0x2554,\n0x00ca:0x2569,\n0x00cb:0x2566,\n0x00cc:0x2560,\n0x00cd:0x2550,\n0x00ce:0x256c,\n0x00cf:0x00a4,\n0x00d0:0x00f0,\n0x00d1:0x00d0,\n0x00d2:0x00ca,\n0x00d3:0x00cb,\n0x00d4:0x00c8,\n0x00d5:0x0131,\n0x00d6:0x00cd,\n0x00d7:0x00ce,\n0x00d8:0x00cf,\n0x00d9:0x2518,\n0x00da:0x250c,\n0x00db:0x2588,\n0x00dc:0x2584,\n0x00dd:0x00a6,\n0x00de:0x00cc,\n0x00df:0x2580,\n0x00e0:0x00d3,\n0x00e1:0x00df,\n0x00e2:0x00d4,\n0x00e3:0x00d2,\n0x00e4:0x00f5,\n0x00e5:0x00d5,\n0x00e6:0x00b5,\n0x00e7:0x00fe,\n0x00e8:0x00de,\n0x00e9:0x00da,\n0x00ea:0x00db,\n0x00eb:0x00d9,\n0x00ec:0x00fd,\n0x00ed:0x00dd,\n0x00ee:0x00af,\n0x00ef:0x00b4,\n0x00f0:0x00ad,\n0x00f1:0x00b1,\n0x00f2:0x2017,\n0x00f3:0x00be,\n0x00f4:0x00b6,\n0x00f5:0x00a7,\n0x00f6:0x00f7,\n0x00f7:0x00b8,\n0x00f8:0x00b0,\n0x00f9:0x00a8,\n0x00fa:0x00b7,\n0x00fb:0x00b9,\n0x00fc:0x00b3,\n0x00fd:0x00b2,\n0x00fe:0x25a0,\n0x00ff:0x00a0,\n})\n\n\n\ndecoding_table=(\n'\\x00'\n'\\x01'\n'\\x02'\n'\\x03'\n'\\x04'\n'\\x05'\n'\\x06'\n'\\x07'\n'\\x08'\n'\\t'\n'\\n'\n'\\x0b'\n'\\x0c'\n'\\r'\n'\\x0e'\n'\\x0f'\n'\\x10'\n'\\x11'\n'\\x12'\n'\\x13'\n'\\x14'\n'\\x15'\n'\\x16'\n'\\x17'\n'\\x18'\n'\\x19'\n'\\x1a'\n'\\x1b'\n'\\x1c'\n'\\x1d'\n'\\x1e'\n'\\x1f'\n' '\n'!'\n'\"'\n'#'\n'$'\n'%'\n'&'\n\"'\"\n'('\n')'\n'*'\n'+'\n','\n'-'\n'.'\n'/'\n'0'\n'1'\n'2'\n'3'\n'4'\n'5'\n'6'\n'7'\n'8'\n'9'\n':'\n';'\n'<'\n'='\n'>'\n'?'\n'@'\n'A'\n'B'\n'C'\n'D'\n'E'\n'F'\n'G'\n'H'\n'I'\n'J'\n'K'\n'L'\n'M'\n'N'\n'O'\n'P'\n'Q'\n'R'\n'S'\n'T'\n'U'\n'V'\n'W'\n'X'\n'Y'\n'Z'\n'['\n'\\\\'\n']'\n'^'\n'_'\n'`'\n'a'\n'b'\n'c'\n'd'\n'e'\n'f'\n'g'\n'h'\n'i'\n'j'\n'k'\n'l'\n'm'\n'n'\n'o'\n'p'\n'q'\n'r'\n's'\n't'\n'u'\n'v'\n'w'\n'x'\n'y'\n'z'\n'{'\n'|'\n'}'\n'~'\n'\\x7f'\n'\\xc7'\n'\\xfc'\n'\\xe9'\n'\\xe2'\n'\\xe4'\n'\\xe0'\n'\\xe5'\n'\\xe7'\n'\\xea'\n'\\xeb'\n'\\xe8'\n'\\xef'\n'\\xee'\n'\\xec'\n'\\xc4'\n'\\xc5'\n'\\xc9'\n'\\xe6'\n'\\xc6'\n'\\xf4'\n'\\xf6'\n'\\xf2'\n'\\xfb'\n'\\xf9'\n'\\xff'\n'\\xd6'\n'\\xdc'\n'\\xf8'\n'\\xa3'\n'\\xd8'\n'\\xd7'\n'\\u0192'\n'\\xe1'\n'\\xed'\n'\\xf3'\n'\\xfa'\n'\\xf1'\n'\\xd1'\n'\\xaa'\n'\\xba'\n'\\xbf'\n'\\xae'\n'\\xac'\n'\\xbd'\n'\\xbc'\n'\\xa1'\n'\\xab'\n'\\xbb'\n'\\u2591'\n'\\u2592'\n'\\u2593'\n'\\u2502'\n'\\u2524'\n'\\xc1'\n'\\xc2'\n'\\xc0'\n'\\xa9'\n'\\u2563'\n'\\u2551'\n'\\u2557'\n'\\u255d'\n'\\xa2'\n'\\xa5'\n'\\u2510'\n'\\u2514'\n'\\u2534'\n'\\u252c'\n'\\u251c'\n'\\u2500'\n'\\u253c'\n'\\xe3'\n'\\xc3'\n'\\u255a'\n'\\u2554'\n'\\u2569'\n'\\u2566'\n'\\u2560'\n'\\u2550'\n'\\u256c'\n'\\xa4'\n'\\xf0'\n'\\xd0'\n'\\xca'\n'\\xcb'\n'\\xc8'\n'\\u0131'\n'\\xcd'\n'\\xce'\n'\\xcf'\n'\\u2518'\n'\\u250c'\n'\\u2588'\n'\\u2584'\n'\\xa6'\n'\\xcc'\n'\\u2580'\n'\\xd3'\n'\\xdf'\n'\\xd4'\n'\\xd2'\n'\\xf5'\n'\\xd5'\n'\\xb5'\n'\\xfe'\n'\\xde'\n'\\xda'\n'\\xdb'\n'\\xd9'\n'\\xfd'\n'\\xdd'\n'\\xaf'\n'\\xb4'\n'\\xad'\n'\\xb1'\n'\\u2017'\n'\\xbe'\n'\\xb6'\n'\\xa7'\n'\\xf7'\n'\\xb8'\n'\\xb0'\n'\\xa8'\n'\\xb7'\n'\\xb9'\n'\\xb3'\n'\\xb2'\n'\\u25a0'\n'\\xa0'\n)\n\n\n\nencoding_map={\n0x0000:0x0000,\n0x0001:0x0001,\n0x0002:0x0002,\n0x0003:0x0003,\n0x0004:0x0004,\n0x0005:0x0005,\n0x0006:0x0006,\n0x0007:0x0007,\n0x0008:0x0008,\n0x0009:0x0009,\n0x000a:0x000a,\n0x000b:0x000b,\n0x000c:0x000c,\n0x000d:0x000d,\n0x000e:0x000e,\n0x000f:0x000f,\n0x0010:0x0010,\n0x0011:0x0011,\n0x0012:0x0012,\n0x0013:0x0013,\n0x0014:0x0014,\n0x0015:0x0015,\n0x0016:0x0016,\n0x0017:0x0017,\n0x0018:0x0018,\n0x0019:0x0019,\n0x001a:0x001a,\n0x001b:0x001b,\n0x001c:0x001c,\n0x001d:0x001d,\n0x001e:0x001e,\n0x001f:0x001f,\n0x0020:0x0020,\n0x0021:0x0021,\n0x0022:0x0022,\n0x0023:0x0023,\n0x0024:0x0024,\n0x0025:0x0025,\n0x0026:0x0026,\n0x0027:0x0027,\n0x0028:0x0028,\n0x0029:0x0029,\n0x002a:0x002a,\n0x002b:0x002b,\n0x002c:0x002c,\n0x002d:0x002d,\n0x002e:0x002e,\n0x002f:0x002f,\n0x0030:0x0030,\n0x0031:0x0031,\n0x0032:0x0032,\n0x0033:0x0033,\n0x0034:0x0034,\n0x0035:0x0035,\n0x0036:0x0036,\n0x0037:0x0037,\n0x0038:0x0038,\n0x0039:0x0039,\n0x003a:0x003a,\n0x003b:0x003b,\n0x003c:0x003c,\n0x003d:0x003d,\n0x003e:0x003e,\n0x003f:0x003f,\n0x0040:0x0040,\n0x0041:0x0041,\n0x0042:0x0042,\n0x0043:0x0043,\n0x0044:0x0044,\n0x0045:0x0045,\n0x0046:0x0046,\n0x0047:0x0047,\n0x0048:0x0048,\n0x0049:0x0049,\n0x004a:0x004a,\n0x004b:0x004b,\n0x004c:0x004c,\n0x004d:0x004d,\n0x004e:0x004e,\n0x004f:0x004f,\n0x0050:0x0050,\n0x0051:0x0051,\n0x0052:0x0052,\n0x0053:0x0053,\n0x0054:0x0054,\n0x0055:0x0055,\n0x0056:0x0056,\n0x0057:0x0057,\n0x0058:0x0058,\n0x0059:0x0059,\n0x005a:0x005a,\n0x005b:0x005b,\n0x005c:0x005c,\n0x005d:0x005d,\n0x005e:0x005e,\n0x005f:0x005f,\n0x0060:0x0060,\n0x0061:0x0061,\n0x0062:0x0062,\n0x0063:0x0063,\n0x0064:0x0064,\n0x0065:0x0065,\n0x0066:0x0066,\n0x0067:0x0067,\n0x0068:0x0068,\n0x0069:0x0069,\n0x006a:0x006a,\n0x006b:0x006b,\n0x006c:0x006c,\n0x006d:0x006d,\n0x006e:0x006e,\n0x006f:0x006f,\n0x0070:0x0070,\n0x0071:0x0071,\n0x0072:0x0072,\n0x0073:0x0073,\n0x0074:0x0074,\n0x0075:0x0075,\n0x0076:0x0076,\n0x0077:0x0077,\n0x0078:0x0078,\n0x0079:0x0079,\n0x007a:0x007a,\n0x007b:0x007b,\n0x007c:0x007c,\n0x007d:0x007d,\n0x007e:0x007e,\n0x007f:0x007f,\n0x00a0:0x00ff,\n0x00a1:0x00ad,\n0x00a2:0x00bd,\n0x00a3:0x009c,\n0x00a4:0x00cf,\n0x00a5:0x00be,\n0x00a6:0x00dd,\n0x00a7:0x00f5,\n0x00a8:0x00f9,\n0x00a9:0x00b8,\n0x00aa:0x00a6,\n0x00ab:0x00ae,\n0x00ac:0x00aa,\n0x00ad:0x00f0,\n0x00ae:0x00a9,\n0x00af:0x00ee,\n0x00b0:0x00f8,\n0x00b1:0x00f1,\n0x00b2:0x00fd,\n0x00b3:0x00fc,\n0x00b4:0x00ef,\n0x00b5:0x00e6,\n0x00b6:0x00f4,\n0x00b7:0x00fa,\n0x00b8:0x00f7,\n0x00b9:0x00fb,\n0x00ba:0x00a7,\n0x00bb:0x00af,\n0x00bc:0x00ac,\n0x00bd:0x00ab,\n0x00be:0x00f3,\n0x00bf:0x00a8,\n0x00c0:0x00b7,\n0x00c1:0x00b5,\n0x00c2:0x00b6,\n0x00c3:0x00c7,\n0x00c4:0x008e,\n0x00c5:0x008f,\n0x00c6:0x0092,\n0x00c7:0x0080,\n0x00c8:0x00d4,\n0x00c9:0x0090,\n0x00ca:0x00d2,\n0x00cb:0x00d3,\n0x00cc:0x00de,\n0x00cd:0x00d6,\n0x00ce:0x00d7,\n0x00cf:0x00d8,\n0x00d0:0x00d1,\n0x00d1:0x00a5,\n0x00d2:0x00e3,\n0x00d3:0x00e0,\n0x00d4:0x00e2,\n0x00d5:0x00e5,\n0x00d6:0x0099,\n0x00d7:0x009e,\n0x00d8:0x009d,\n0x00d9:0x00eb,\n0x00da:0x00e9,\n0x00db:0x00ea,\n0x00dc:0x009a,\n0x00dd:0x00ed,\n0x00de:0x00e8,\n0x00df:0x00e1,\n0x00e0:0x0085,\n0x00e1:0x00a0,\n0x00e2:0x0083,\n0x00e3:0x00c6,\n0x00e4:0x0084,\n0x00e5:0x0086,\n0x00e6:0x0091,\n0x00e7:0x0087,\n0x00e8:0x008a,\n0x00e9:0x0082,\n0x00ea:0x0088,\n0x00eb:0x0089,\n0x00ec:0x008d,\n0x00ed:0x00a1,\n0x00ee:0x008c,\n0x00ef:0x008b,\n0x00f0:0x00d0,\n0x00f1:0x00a4,\n0x00f2:0x0095,\n0x00f3:0x00a2,\n0x00f4:0x0093,\n0x00f5:0x00e4,\n0x00f6:0x0094,\n0x00f7:0x00f6,\n0x00f8:0x009b,\n0x00f9:0x0097,\n0x00fa:0x00a3,\n0x00fb:0x0096,\n0x00fc:0x0081,\n0x00fd:0x00ec,\n0x00fe:0x00e7,\n0x00ff:0x0098,\n0x0131:0x00d5,\n0x0192:0x009f,\n0x2017:0x00f2,\n0x2500:0x00c4,\n0x2502:0x00b3,\n0x250c:0x00da,\n0x2510:0x00bf,\n0x2514:0x00c0,\n0x2518:0x00d9,\n0x251c:0x00c3,\n0x2524:0x00b4,\n0x252c:0x00c2,\n0x2534:0x00c1,\n0x253c:0x00c5,\n0x2550:0x00cd,\n0x2551:0x00ba,\n0x2554:0x00c9,\n0x2557:0x00bb,\n0x255a:0x00c8,\n0x255d:0x00bc,\n0x2560:0x00cc,\n0x2563:0x00b9,\n0x2566:0x00cb,\n0x2569:0x00ca,\n0x256c:0x00ce,\n0x2580:0x00df,\n0x2584:0x00dc,\n0x2588:0x00db,\n0x2591:0x00b0,\n0x2592:0x00b1,\n0x2593:0x00b2,\n0x25a0:0x00fe,\n}\n"], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\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_DAYS_IN_MONTH=[None ,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[None ]\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):\n\n result=\"%02d:%02d:%02d\"%(hh,mm,ss)\n if us:\n result +=\".%06d\"%us\n return result\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 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n return self\n \n def __repr__(self):\n if self._microseconds:\n return\"%s(%d, %d, %d)\"%('datetime.'+self.__class__.__name__,\n self._days,\n self._seconds,\n self._microseconds)\n if self._seconds:\n return\"%s(%d, %d)\"%('datetime.'+self.__class__.__name__,\n self._days,\n self._seconds)\n return\"%s(%d)\"%('datetime.'+self.__class__.__name__,self._days)\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 a,b=other.as_integer_ratio()\n return self *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,usec /other)\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,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 False\n \n def __ne__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)!=0\n else :\n return True\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n _cmperror(self,other)\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n _cmperror(self,other)\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n _cmperror(self,other)\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n return hash(self._getstate())\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'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (isinstance(year,bytes)and len(year)==4 and\n 1 <=year[2]<=12 and month is None ):\n \n self=object.__new__(cls)\n self.__setstate(year)\n return self\n _check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\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 \n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n\n \n return\"%s(%d, %d, %d)\"%('datetime.'+self.__class__.__name__,\n self._year,\n self._month,\n self._day)\n \n \n \n \n \n \n def ctime(self):\n ''\n weekday=self.toordinal()%7 or 7\n return\"%s %s %2d 00:00:00 %04d\"%(\n _DAYNAMES[weekday],\n _MONTHNAMES[self._month],\n self._day,self._year)\n \n def strftime(self,fmt):\n ''\n return _wrap_strftime(self,fmt,self.timetuple())\n \n def __format__(self,fmt):\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n def isoformat(self):\n ''\n\n\n\n\n\n\n \n return\"%04d-%02d-%02d\"%(self._year,self._month,self._day)\n \n __str__=isoformat\n \n \n @property\n def year(self):\n ''\n return self._year\n \n @property\n def month(self):\n ''\n return self._month\n \n @property\n def day(self):\n ''\n return self._day\n \n \n \n def timetuple(self):\n ''\n return _build_struct_time(self._year,self._month,self._day,\n 0,0,0,-1)\n \n def toordinal(self):\n ''\n\n\n\n \n return _ymd2ord(self._year,self._month,self._day)\n \n def replace(self,year=None ,month=None ,day=None ):\n ''\n if year is None :\n year=self._year\n if month is None :\n month=self._month\n if day is None :\n day=self._day\n _check_date_fields(year,month,day)\n return date(year,month,day)\n \n \n \n def __eq__(self,other):\n if isinstance(other,date):\n return self._cmp(other)==0\n return NotImplemented\n \n def __ne__(self,other):\n if isinstance(other,date):\n return self._cmp(other)!=0\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,date):\n return self._cmp(other)<=0\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)<0\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>=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 return hash(self._getstate())\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 if len(string)!=4 or not (1 <=string[2]<=12):\n raise TypeError(\"not enough arguments\")\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\nclass tzinfo:\n ''\n\n\n \n __slots__=()\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 \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ):\n ''\n\n\n\n\n\n\n \n self=object.__new__(cls)\n if isinstance(hour,bytes)and len(hour)==6:\n \n self.__setstate(hour,minute or None )\n return self\n _check_tzinfo_arg(tzinfo)\n _check_time_fields(hour,minute,second,microsecond)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\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 \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 False\n \n def __ne__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )!=0\n else :\n return True\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n _cmperror(self,other)\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n _cmperror(self,other)\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n _cmperror(self,other)\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 tzoff=self.utcoffset()\n if not tzoff:\n return hash(self._getstate()[0])\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 return hash(time(h,m,self.second,self.microsecond))\n return hash((h,m,self.second,self.microsecond))\n \n \n \n def _tzstr(self,sep=\":\"):\n ''\n off=self.utcoffset()\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 assert not mm %timedelta(minutes=1),\"whole minute\"\n mm //=timedelta(minutes=1)\n assert 0 <=hh <24\n off=\"%s%02d%s%02d\"%(sign,hh,sep,mm)\n return 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(%d, %d%s)\"%('datetime.'+self.__class__.__name__,\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 return s\n \n def isoformat(self):\n ''\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\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 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 ):\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 _check_time_fields(hour,minute,second,microsecond)\n _check_tzinfo_arg(tzinfo)\n return time(hour,minute,second,microsecond,tzinfo)\n \n def __bool__(self):\n if self.second or self.microsecond:\n return True\n offset=self.utcoffset()or timedelta(0)\n return timedelta(hours=self.hour,minutes=self.minute)!=offset\n \n \n \n def _getstate(self):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n basestate=bytes([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 len(string)!=6 or string[0]>=24:\n raise TypeError(\"an integer is required\")\n (self._hour,self._minute,self._second,\n us1,us2,us3)=string\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n if tzinfo is None or isinstance(tzinfo,_tzinfo_class):\n self._tzinfo=tzinfo\n else :\n raise TypeError(\"bad tzinfo state arg %r\"%tzinfo)\n \n def __reduce__(self):\n return (time,self._getstate())\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 \n __slots__=date.__slots__+(\n '_hour','_minute','_second',\n '_microsecond','_tzinfo')\n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ):\n if isinstance(year,bytes)and len(year)==10:\n \n self=date.__new__(cls,year[:4])\n self.__setstate(year,month)\n return self\n _check_tzinfo_arg(tzinfo)\n _check_time_fields(hour,minute,second,microsecond)\n self=date.__new__(cls,year,month,day)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\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 @classmethod\n def fromtimestamp(cls,t,tz=None ):\n ''\n\n\n \n \n _check_tzinfo_arg(tz)\n \n converter=_time.localtime if tz is None else _time.gmtime\n \n t,frac=divmod(t,1.0)\n us=int(frac *1e6)\n \n \n \n \n \n if us ==1000000:\n t +=1\n us=0\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 not None :\n result=tz.fromutc(result)\n return result\n \n @classmethod\n def utcfromtimestamp(cls,t):\n ''\n t,frac=divmod(t,1.0)\n us=int(frac *1e6)\n \n \n \n \n \n if us ==1000000:\n t +=1\n us=0\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.gmtime(t)\n ss=min(ss,59)\n return cls(y,m,d,hh,mm,ss,us)\n \n \n \n \n \n \n @classmethod\n def now(cls,tz=None ):\n ''\n t=_time.time()\n return cls.fromtimestamp(t,tz)\n \n @classmethod\n def utcnow(cls):\n ''\n t=_time.time()\n return cls.utcfromtimestamp(t)\n \n @classmethod\n def combine(cls,date,time):\n ''\n if not isinstance(date,_date_class):\n raise TypeError(\"date argument must be a date instance\")\n if not isinstance(time,_time_class):\n raise TypeError(\"time argument must be a time instance\")\n return cls(date.year,date.month,date.day,\n time.hour,time.minute,time.second,time.microsecond,\n time.tzinfo)\n \n def timetuple(self):\n ''\n dst=self.dst()\n if dst is None :\n dst=-1\n elif dst:\n dst=1\n else :\n dst=0\n return _build_struct_time(self.year,self.month,self.day,\n self.hour,self.minute,self.second,\n dst)\n \n def timestamp(self):\n ''\n if self._tzinfo is None :\n return _time.mktime((self.year,self.month,self.day,\n self.hour,self.minute,self.second,\n -1,-1,-1))+self.microsecond /1e6\n else :\n return (self -_EPOCH).total_seconds()\n \n def utctimetuple(self):\n ''\n offset=self.utcoffset()\n if offset:\n self -=offset\n y,m,d=self.year,self.month,self.day\n hh,mm,ss=self.hour,self.minute,self.second\n return _build_struct_time(y,m,d,hh,mm,ss,0)\n \n def date(self):\n ''\n return date(self._year,self._month,self._day)\n \n def time(self):\n ''\n return time(self.hour,self.minute,self.second,self.microsecond)\n \n def timetz(self):\n ''\n return time(self.hour,self.minute,self.second,self.microsecond,\n self._tzinfo)\n \n def replace(self,year=None ,month=None ,day=None ,hour=None ,\n minute=None ,second=None ,microsecond=None ,tzinfo=True ):\n ''\n if year is None :\n year=self.year\n if month is None :\n month=self.month\n if day is None :\n day=self.day\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 _check_date_fields(year,month,day)\n _check_time_fields(hour,minute,second,microsecond)\n _check_tzinfo_arg(tzinfo)\n return datetime(year,month,day,hour,minute,second,\n microsecond,tzinfo)\n \n def astimezone(self,tz=None ):\n if tz is None :\n if self.tzinfo is None :\n raise ValueError(\"astimezone() requires an aware datetime\")\n ts=(self -_EPOCH)//timedelta(seconds=1)\n localtm=_time.localtime(ts)\n local=datetime(*localtm[:6])\n try :\n \n gmtoff=localtm.tm_gmtoff\n zone=localtm.tm_zone\n except AttributeError:\n \n \n \n delta=local -datetime(*_time.gmtime(ts)[:6])\n dst=_time.daylight and localtm.tm_isdst >0\n gmtoff=-(_time.altzone if dst else _time.timezone)\n if delta ==timedelta(seconds=gmtoff):\n tz=timezone(delta,_time.tzname[dst])\n else :\n tz=timezone(delta)\n else :\n tz=timezone(timedelta(seconds=gmtoff),zone)\n \n elif not isinstance(tz,tzinfo):\n raise TypeError(\"tz argument must be an instance of tzinfo\")\n \n mytz=self.tzinfo\n if mytz is None :\n raise ValueError(\"astimezone() requires an aware datetime\")\n \n if tz is mytz:\n return self\n \n \n myoffset=self.utcoffset()\n if myoffset is None :\n raise ValueError(\"astimezone() requires an aware datetime\")\n utc=(self -myoffset).replace(tzinfo=tz)\n \n \n return tz.fromutc(utc)\n \n \n \n def ctime(self):\n ''\n weekday=self.toordinal()%7 or 7\n return\"%s %s %2d %02d:%02d:%02d %04d\"%(\n _DAYNAMES[weekday],\n _MONTHNAMES[self._month],\n self._day,\n self._hour,self._minute,self._second,\n self._year)\n \n def isoformat(self,sep='T'):\n ''\n\n\n\n\n\n\n\n\n\n \n s=(\"%04d-%02d-%02d%c\"%(self._year,self._month,self._day,\n sep)+\n _format_time(self._hour,self._minute,self._second,\n self._microsecond))\n off=self.utcoffset()\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 assert not mm %timedelta(minutes=1),\"whole minute\"\n mm //=timedelta(minutes=1)\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n return s\n \n def __repr__(self):\n ''\n L=[self._year,self._month,self._day,\n self._hour,self._minute,self._second,self._microsecond]\n if L[-1]==0:\n del L[-1]\n if L[-1]==0:\n del L[-1]\n s=\", \".join(map(str,L))\n s=\"%s(%s)\"%('datetime.'+self.__class__.__name__,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n return s\n \n def __str__(self):\n ''\n return self.isoformat(sep=' ')\n \n @classmethod\n def strptime(cls,date_string,format):\n ''\n import _strptime\n return _strptime._strptime_datetime(cls,date_string,format)\n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(self)\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n name=_call_tzinfo_method(self._tzinfo,\"tzname\",self)\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(self)\n _check_utc_offset(\"dst\",offset)\n return offset\n \n \n \n def __eq__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other,allow_mixed=True )==0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n return False\n \n def __ne__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other,allow_mixed=True )!=0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n return True\n \n def __le__(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 __lt__(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 __ge__(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 __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 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 THURSDAY:\n week1monday +=7\n return week1monday\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 if (offset.microseconds !=0 or\n offset.seconds %60 !=0):\n raise ValueError(\"offset must be a timedelta\"\n \" representing a whole number of minutes\")\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 type(other)!=timezone:\n return False\n return self._offset ==other._offset\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(%r)\"%('datetime.'+self.__class__.__name__,\n self._offset)\n return\"%s(%r, %r)\"%('datetime.'+self.__class__.__name__,\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=23,minutes=59)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if delta a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for(\"boolean\"==typeof g&&(j=g,g=arguments[h]||{},h++),\"object\"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:\"jQuery\"+(l+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return\"function\"===m.type(a)},isArray:Array.isArray||function(a){return\"array\"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||\"object\"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,\"constructor\")&&!j.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?h[i.call(a)]||\"object\":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,\"ms-\").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?\"\":(a+\"\").replace(n,\"\")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,\"string\"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return\"string\"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(a,b){h[\"[object \"+b+\"]\"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return\"function\"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:\"array\"===c||0===b||\"number\"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=\"sizzle\"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",L=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",N=M.replace(\"w\",\"w#\"),O=\"\\\\[\"+L+\"*(\"+M+\")(?:\"+L+\"*([*^$|!~]?=)\"+L+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+N+\"))|)\"+L+\"*\\\\]\",P=\":(\"+M+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+O+\")*)|.*)\\\\)|)\",Q=new RegExp(L+\"+\",\"g\"),R=new RegExp(\"^\"+L+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+L+\"+$\",\"g\"),S=new RegExp(\"^\"+L+\"*,\"+L+\"*\"),T=new RegExp(\"^\"+L+\"*([>+~]|\"+L+\")\"+L+\"*\"),U=new RegExp(\"=\"+L+\"*([^\\\\]'\\\"]*?)\"+L+\"*\\\\]\",\"g\"),V=new RegExp(P),W=new RegExp(\"^\"+N+\"$\"),X={ID:new RegExp(\"^#(\"+M+\")\"),CLASS:new RegExp(\"^\\\\.(\"+M+\")\"),TAG:new RegExp(\"^(\"+M.replace(\"w\",\"w*\")+\")\"),ATTR:new RegExp(\"^\"+O),PSEUDO:new RegExp(\"^\"+P),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+L+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+L+\"*(?:([+-]|)\"+L+\"*(\\\\d+)|))\"+L+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+K+\")$\",\"i\"),needsContext:new RegExp(\"^\"+L+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+L+\"*((?:-\\\\d)?\\\\d*)\"+L+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\\d$/i,$=/^[^{]+\\{\\s*\\[native \\w/,_=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ab=/[+~]/,bb=/'|\\\\/g,cb=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+L+\"?|(\"+L+\")|.)\",\"ig\"),db=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,\"string\"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&\"object\"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute(\"id\"))?s=r.replace(bb,\"\\\\$&\"):b.setAttribute(\"id\",s),s=\"[id='\"+s+\"'] \",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(\",\")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute(\"id\")}}}return i(a.replace(R,\"$1\"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+\" \")>d.cacheLength&&delete b[a.shift()],b[c+\" \"]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement(\"div\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split(\"|\"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&\"undefined\"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?\"HTML\"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener(\"unload\",eb,!1):e.attachEvent&&e.attachEvent(\"onunload\",eb)),p=!f(g),c.attributes=jb(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute(\"id\")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=\"undefined\"!=typeof a.getAttributeNode&&a.getAttributeNode(\"id\");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return\"undefined\"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML=\"\",a.querySelectorAll(\"[msallowcapture^='']\").length&&q.push(\"[*^$]=\"+L+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||q.push(\"\\\\[\"+L+\"*(?:value|\"+K+\")\"),a.querySelectorAll(\"[id~=\"+u+\"-]\").length||q.push(\"~=\"),a.querySelectorAll(\":checked\").length||q.push(\":checked\"),a.querySelectorAll(\"a#\"+u+\"+*\").length||q.push(\".#.+[+~]\")}),jb(function(a){var b=g.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&q.push(\"name\"+L+\"*[*^$|!~]?=\"),a.querySelectorAll(\":enabled\").length||q.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),q.push(\",.*:\")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,\"div\"),s.call(a,\"[s!='']:x\"),r.push(\"!=\",P)}),q=q.length&&new RegExp(q.join(\"|\")),r=r.length&&new RegExp(r.join(\"|\")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,\"='$1']\"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c=\"\",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||\"\").replace(cb,db),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+\" \"];return b||(b=new RegExp(\"(^|\"+L+\")\"+a+\"(\"+L+\"|$)\"))&&y(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||\"undefined\"!=typeof a.getAttribute&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?\"!=\"===b:b?(e+=\"\",\"=\"===b?e===c:\"!=\"===b?e!==c:\"^=\"===b?c&&0===e.indexOf(c):\"*=\"===b?c&&e.indexOf(c)>-1:\"$=\"===b?c&&e.slice(-c.length)===c:\"~=\"===b?(\" \"+e.replace(Q,\" \")+\" \").indexOf(c)>-1:\"|=\"===b?e===c||e.slice(0,c.length+1)===c+\"-\":!1):!0}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error(\"unsupported pseudo: \"+a);return e[u]?e(b):e.length>1?(c=[a,a,\"\",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,\"$1\"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||\"\")||gb.error(\"unsupported lang: \"+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||\"*\",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[\" \"],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:\" \"===a[i-2].type?\"*\":\"\"})).replace(R,\"$1\"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q=\"0\",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG(\"*\",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+\" \"];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n=\"function\"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&\"ID\"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split(\"\").sort(B).join(\"\")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement(\"div\"))}),jb(function(a){return a.innerHTML=\"\",\"#\"===a.firstChild.getAttribute(\"href\")})||kb(\"type|href|height|width\",function(a,b,c){return c?void 0:a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML=\"\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||kb(\"value\",function(a,b,c){return c||\"input\"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute(\"disabled\")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[\":\"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,v=/^.[^:#\\[\\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if(\"string\"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if(\"string\"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+\" \"+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,\"string\"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if(\"string\"==typeof a){if(c=\"<\"===a.charAt(0)&&\">\"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?\"undefined\"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||\"string\"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?\"string\"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return m.dir(a,\"parentNode\",c)},next:function(a){return D(a,\"nextSibling\")},prev:function(a){return D(a,\"previousSibling\")},nextAll:function(a){return m.dir(a,\"nextSibling\")},prevAll:function(a){return m.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return m.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return m.dir(a,\"previousSibling\",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a=\"string\"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);\"function\"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&\"string\"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[[\"resolve\",\"done\",m.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",m.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",m.Callbacks(\"memory\")]],c=\"pending\",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+\"With\"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+\"With\"](this===e?d:this,arguments),this},e[f[0]+\"With\"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler(\"ready\"),m(y).off(\"ready\")))}}});function I(){y.addEventListener?(y.removeEventListener(\"DOMContentLoaded\",J,!1),a.removeEventListener(\"load\",J,!1)):(y.detachEvent(\"onreadystatechange\",J),a.detachEvent(\"onload\",J))}function J(){(y.addEventListener||\"load\"===event.type||\"complete\"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),\"complete\"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener(\"DOMContentLoaded\",J,!1),a.addEventListener(\"load\",J,!1);else{y.attachEvent(\"onreadystatechange\",J),a.attachEvent(\"onload\",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll(\"left\")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K=\"undefined\",L;for(L in m(k))break;k.ownLast=\"0\"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName(\"body\")[0],c&&c.style&&(b=y.createElement(\"div\"),d=y.createElement(\"div\"),d.style.cssText=\"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText=\"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement(\"div\");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+\" \").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute(\"classid\")===b};var M=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d=\"data-\"+b.replace(N,\"-$1\").toLowerCase();if(c=a.getAttribute(d),\"string\"==typeof c){try{c=\"true\"===c?!0:\"false\"===c?!1:\"null\"===c?null:+c+\"\"===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if((\"data\"!==b||!m.isEmptyObject(a[b]))&&\"toJSON\"!==b)return!1;\nreturn!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||\"string\"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),(\"object\"==typeof b||\"function\"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),\"string\"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(\" \")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{\"applet \":!0,\"embed \":!0,\"object \":\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,\"parsedAttrs\"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf(\"data-\")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,\"parsedAttrs\",!0)}return e}return\"object\"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||\"fx\")+\"queue\",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||\"fx\";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks(\"once memory\").add(function(){m._removeData(a,b+\"queue\"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return\"string\"!=typeof a&&(b=a,a=\"fx\",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement(\"input\"),b=y.createElement(\"div\"),c=y.createDocumentFragment();if(b.innerHTML=\"
    a\",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName(\"tbody\").length,k.htmlSerialize=!!b.getElementsByTagName(\"link\").length,k.html5Clone=\"<:nav>\"!==y.createElement(\"nav\").cloneNode(!0).outerHTML,a.type=\"checkbox\",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML=\"\",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML=\"\",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent(\"onclick\",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement(\"div\");for(b in{submit:!0,change:!0,focusin:!0})c=\"on\"+b,(k[b+\"Bubbles\"]=c in a)||(d.setAttribute(c,\"t\"),k[b+\"Bubbles\"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||\"\").match(E)||[\"\"],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||\"\").split(\".\").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(\".\")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent(\"on\"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||\"\").match(E)||[\"\"],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||\"\").split(\".\").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&(\"**\"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,\"events\"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,\"type\")?b.type:b,q=j.call(b,\"namespace\")?b.namespace.split(\".\"):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(\".\")>=0&&(q=p.split(\".\"),p=q.shift(),q.sort()),g=p.indexOf(\":\")<0&&\"on\"+p,b=b[m.expando]?b:new m.Event(p,\"object\"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join(\".\"),b.namespace_re=b.namespace?new RegExp(\"(^|\\\\.)\"+q.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,\"events\")||{})[b.type]&&m._data(h,\"handle\"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,\"events\")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||\"click\"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||\"click\"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+\" \",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]\",\"i\"),hb=/^\\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,jb=/<([\\w:]+)/,kb=/\\s*$/g,rb={option:[1,\"\"],legend:[1,\"
    \",\"
    \"],area:[1,\"\",\"\"],param:[1,\"\",\"\"],thead:[1,\"\",\"
    \"],tr:[2,\"\",\"
    \"],col:[2,\"\",\"
    \"],td:[3,\"\",\"
    \"],_default:k.htmlSerialize?[0,\"\",\"\"]:[1,\"X
    \",\"
    \"]},sb=db(y),tb=sb.appendChild(y.createElement(\"div\"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||\"*\"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||\"*\"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,\"table\")&&m.nodeName(11!==b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function xb(a){return a.type=(null!==m.find.attr(a,\"type\"))+\"/\"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,\"globalEval\",!b||m._data(b[d],\"globalEval\"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}\"script\"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):\"object\"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):\"input\"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):\"option\"===c?b.defaultSelected=b.selected=a.defaultSelected:(\"input\"===c||\"textarea\"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test(\"<\"+a.nodeName+\">\")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,\"script\"),d.length>0&&zb(d,!i&&ub(a,\"script\")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if(\"object\"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement(\"div\")),i=(jb.exec(f)||[\"\",\"\"])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,\"<$1>\")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f=\"table\"!==i||kb.test(f)?\"\"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],\"tbody\")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent=\"\";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,\"input\"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),\"script\"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||\"\")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,\"script\")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,\"select\")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,\"\"):void 0;if(!(\"string\"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||[\"\",\"\"])[1].toLowerCase()])){a=a.replace(ib,\"<$1>\");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&\"string\"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,\"script\"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,\"script\"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||\"\")&&!m._data(d,\"globalEval\")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||\"\").replace(qb,\"\")));i=c=null}return this}}),m.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],\"display\");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),\"none\"!==c&&c||(Cb=(Cb||m(\"