t5 commited on
Commit
9b26519
·
1 Parent(s): 54efa00
Files changed (4) hide show
  1. cryptw.py +13 -0
  2. neo server.py +8 -2
  3. requirements.txt +0 -12
  4. wr.py +1845 -0
cryptw.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ def fp(saty):
2
+ from cryptography.fernet import Fernet
3
+ import base64
4
+ F=Fernet(base64.b64encode(saty.encode()[:32]))
5
+ class c:
6
+ def up(te): return F.crypt(te)
7
+ def down(te): return F.decrypt(te)
8
+ def string(te):
9
+ if isinstance(te,str):
10
+ return F.up(te.encode())
11
+ else:
12
+ return F.down(te).decode()
13
+ return c
neo server.py CHANGED
@@ -2,8 +2,14 @@
2
  # -*- coding: utf-8 -*-
3
  ##!kill -9 "$(pgrep ngrok)"
4
  import sys; import os; cpa=os.environ.get("cpa")
5
- import re,requests,threading
6
 
 
 
 
 
 
 
7
  face="1000"
8
  ##face="face"
9
  if os.environ.get("SPACE_HOST"): face="face"
@@ -70,7 +76,7 @@ def run1(data):
70
  impt(("c2/"+fn2),reload=fn['reload'])
71
  @app.post(handle_post)
72
  def handle_post():
73
- header=(dict(req.headers));
74
  if header.get("saty")!=(os.environ.get("saty") or saty):return '{"e2":"set header"}'
75
  try:
76
  #print(request.get_data())
 
2
  # -*- coding: utf-8 -*-
3
  ##!kill -9 "$(pgrep ngrok)"
4
  import sys; import os; cpa=os.environ.get("cpa")
5
+ import subprocess,re,requests,threading
6
 
7
+ def repo_clone(url, dir, branch=None):
8
+ subprocess.run([b'\x67\x69\x74'.decode(), b'\x63\x6C\x6F\x6E\x65'.decode(), url, dir], check=True)
9
+ if branch:
10
+ subprocess.run(["git", "checkout", branch], cwd=dir, check=True)
11
+ ##if os.path.isdir(f:="ciph"): repo_clone("https://huggingface.co/spaces/compileprincess/ciph")
12
+ #
13
  face="1000"
14
  ##face="face"
15
  if os.environ.get("SPACE_HOST"): face="face"
 
76
  impt(("c2/"+fn2),reload=fn['reload'])
77
  @app.post(handle_post)
78
  def handle_post():
79
+ header=(dict(request.headers));
80
  if header.get("saty")!=(os.environ.get("saty") or saty):return '{"e2":"set header"}'
81
  try:
82
  #print(request.get_data())
requirements.txt CHANGED
@@ -3,15 +3,3 @@ requests
3
  pyngrok
4
  cryptography
5
  psutil
6
-
7
-
8
- flask
9
- opencv-python
10
-
11
-
12
- torch
13
- diffusers
14
- transformers
15
- accelerate
16
- ftfy
17
- xformers
 
3
  pyngrok
4
  cryptography
5
  psutil
 
 
 
 
 
 
 
 
 
 
 
 
wr.py ADDED
@@ -0,0 +1,1845 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ robe_version="1;;"
3
+ ##import sys;import os;sys.path.append(os.environ["AlfiPython"]+r"\Mjmoji");from wr import * ;
4
+ ##import mlwebOrWeb as ml
5
+ ## wardrobe
6
+
7
+ import sys,os,re
8
+ import shutil
9
+ import inspect
10
+ import time
11
+ import traceback
12
+ import pprint
13
+ import functools
14
+ if "Byte":
15
+ from io import StringIO, BytesIO
16
+
17
+
18
+ lf= "\n";lff=lf*2;sp=" ";lf2="\n";tab="\t";
19
+ def fpreturn(*_): return _[0]
20
+ def fpre(*_): return _
21
+ pr=print
22
+ tfolder="r:/temp"
23
+ if not os.path.exists(tfolder): tfolder=os.environ["tmp"]
24
+ if "cpa" in os.environ:
25
+ cpy=os.path.abspath(__file__+"\\..\\..")
26
+ cpw=os.path.abspath(__file__+"\\..")
27
+ T45=os.environ["USERNAME"]
28
+ cpa=os.environ["cpa"]
29
+ ZVCherryPicker=cpy+"\\qt\\ZVCherryPicker.pyw"
30
+ HeartNote=cpy+"\\qt\\HeartNote.pyw"
31
+ else:
32
+ cpa=None
33
+
34
+ class p310:# require version
35
+ def __getstate__(zl):return #pickle
36
+ def typeint(w):
37
+ try:
38
+ int(w)
39
+ return True
40
+ except:False
41
+ def typefn(fn,remove=0):
42
+ if (re.search(r'["*/:<>?\\|]',(fn))):return
43
+ if (".." in fn):return
44
+ if len(fn)>255:return
45
+ try:
46
+ open(fn,"ab")
47
+ ## if remove: os.remove(fn)
48
+ return 1
49
+ except:False
50
+ def fpf(fn,fb="",tail=""):
51
+ if not typefn(fn):
52
+ if not fb:
53
+ f,e=lfn.splitext(fn)
54
+ fb=f[:200]+e
55
+ fn=fb
56
+ if tail: wfdb(fn+"_", putp(1,tail))
57
+ return fn
58
+ def putp(fl,te):#,*w,**W):
59
+ import pickle
60
+ put=pickle.dumps
61
+ ## print(te)
62
+ if fl==1: te= put(te)
63
+ if fl==2: te= pickle.loads(te)
64
+ return te
65
+ def exrange(li,step=2):
66
+ if len(li)/step < 0: return
67
+ for x in range(0,len(li)//step):
68
+ yield li[x*step:x*step+step]
69
+ def pr2(*a,**k): pass;
70
+ oriAB=lambda x: (print(x[:122],lf*2,x[-122:]))
71
+ ppf=pprint.pformat
72
+ def orib(lii, ix=-1,bound=4):
73
+ "print(li[:4],li[-4:])"
74
+ if(ix==-1):
75
+ lambda x: (print(x[:4],lf*2,x[-4:]))
76
+ else:
77
+ lio=[lii[ix+n] for n in list(range(-bound,bound)) if(ix+n>0 and ix+n<len(lii)) ]
78
+ for v in lio:
79
+ if(v==lii[ix]):lio[lio.index(v)]="__"+v
80
+ ## lio[ix]="__"+lio[ix]
81
+ #lio[ix]+=lf
82
+ print(lfjw(lio))
83
+ def printline(*a,**k):#X/ref
84
+ f=inspect.currentframe()
85
+ if(sys.version=='3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)]'):
86
+ no=inspect.currentframe(1)
87
+ elif(sys.hexversion>=0x030401F0):#'3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 10:38:22) [MSC v.1600 32 bit (Intel)]'):
88
+ "c7 3.7.7 64bit -> 3.8.6"
89
+ fb=f
90
+ for _ in range(4):
91
+ print(fb.f_lineno,fb.f_code.co_filename, fb.f_code.co_name)
92
+ fb=fb.f_back
93
+ if not fb:
94
+ break
95
+ ## print(" L-"+str(no),*a,**k)
96
+ def prfl(li):#prFirstLast
97
+ print(li[0],lf,li[-1]);
98
+ def pren(v):
99
+ print(list(enumerate(v)))
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+ #mrk1------------file
111
+ def wfdb(filename,te):#writeFileDirectInBinaryMode
112
+ f = open(filename,"wb")
113
+ f.write(te)
114
+ def wfdt(filename,te):#text
115
+ return wfd(filename).t(te)
116
+ def wfdt8L(filename,te):#textUni NewLine Unix Format
117
+ f = open(filename,"wU",encoding="utf-8")
118
+ f.write(te)
119
+ def wfd8(fn,te):
120
+ wfd(fn).w(te,code="utf8",copy=0)
121
+ def afdt(filename,te):#textUni
122
+ f = open(filename,"a+",encoding="utf-8")
123
+ f.write(te)
124
+ write8dd=afdt
125
+ afdtu=afdt
126
+ def rfdb(fn):
127
+ f = open(fn,"rb")
128
+ te = f.read()
129
+ return te
130
+ def rfdt(fn):return wfd(fn).r()
131
+ def rfdl(fn):
132
+ f = open(fn,"r")
133
+ te = f.readlines()
134
+ return te
135
+ def rfdv0(fn,codeList=("cp932","utf-16","utf-8","eucjp"),lines=True):
136
+ for c in codeList:
137
+ f = open(fn,"r",encoding=c)
138
+ try:
139
+ te = f.readlines() if(lines)else f.read()
140
+ break
141
+ except UnicodeDecodeError as XP:
142
+ continue;
143
+ except UnicodeError as XP:
144
+ continue;
145
+ return te
146
+ def rfdlv(fn): return rfdv0(fn)
147
+ def rfdtv(fn): return rfdv0(fn,lines=False)
148
+ def rfdtu(fn):
149
+ f = open(fn,"r",encoding="utf-8")
150
+ te = f.read()
151
+ return te
152
+ def vcs(bte,cs=("utf8","cp932","utf16","eucjp")):
153
+ for c in cs:
154
+ try: return bte.decode(c)
155
+ except: continue
156
+ class wfd():#clWfd
157
+ tab="\t"
158
+ def __init__(zl,fn,region=(),ir=None,lf="\n"):
159
+ zl.fn=fn
160
+ zl.code="utf8"
161
+ zl.lf=lf
162
+ zl.ir=ir#
163
+ zl.by=None
164
+ def readtime(zl,mod=0):
165
+ zl.ts=(lfn.getatime(zl.fn)+mod, mtime(zl.fn)+mod)
166
+ return zl
167
+ ## def restoretime(zl):
168
+ def rfdv(zl):return zl.r(cs=("cp932","utf-16","utf-8","eucjp","mbcs"))#noMbcs)
169
+ ## def mem(zl): zl.by=zl.rb(); return zl;
170
+ def rb(zl): return open(zl.fn,"rb").read()
171
+ def r(zl,cs=("utf8","cp932","utf16","eucjp"),lines=False,m=0,te=""):
172
+ if te: e1=te
173
+ else:
174
+ with open(zl.fn,"rb") as f:
175
+ e1 = f.read()
176
+ for c in cs:
177
+ try:
178
+ t1=e1.decode(c)
179
+ if("\r\n" in t1):
180
+ #if(t1.count("\r")!=t1.count("\n")):return 0
181
+ zl.lf="\r\n"
182
+ elif("\n" in t1):zl.lf="\n"
183
+ elif("\r" in t1):zl.lf="\r"
184
+ else:#oneline
185
+ pass
186
+ if lines: te=t1.splitlines()
187
+ else: te=t1
188
+ #te=te.replace(zl.lf, "\n")
189
+ zl.code=c
190
+ break
191
+ except (UnicodeDecodeError, UnicodeError) as e:
192
+ zl.lastException=e
193
+ continue;
194
+ else:
195
+ return 0
196
+ if(zl.ir) and 0:
197
+ te=zl.lte=findall(zl.ir,te)
198
+ if m: #chk modified
199
+ import hashlib
200
+ zl.mtime=mtime(zl.fn)
201
+ zl.sha=hashlib.sha256(te.encode()).digest()
202
+ return te
203
+ def csvr(zl,*aw,lf=None,tab=None,**kw):
204
+ return list(csv.reader(StringIO(zl.r()), delimiter=tab or zl.tab))
205
+ def w8(zl,te): return zl.w(te,code="utf8")
206
+ def w16(zl,te): return zl.w(te,code="utf_16_LE")
207
+ def wjis(zl,te): return zl.write8re(zl.fn,te,"cp932")
208
+ def write8re(zl,fn,te,code="",lines=False,copy=True,lf=1,nbase=0,ts=0):
209
+ if not code: code=zl.code
210
+ dir = lfnd(fn)
211
+ if dir: inidi(dir)
212
+ if(ifexist(fn) and copy):
213
+ dnRestore=f"{tfolder}/restore"
214
+ inidi(dnRestore)
215
+ zl.fnRestore=nxNumFull(dnRestore,"%s"+lfn.split(fn)[1],nZfill=2) if nbase else jofn(dnRestore,cfile(fn)+" "+tp())
216
+ shutil.copy2(fn,zl.fnRestore)
217
+ ## emove__
218
+ rmbat(zl.fnRestore)
219
+ ## if(type(te)!=str):return 0
220
+ if 1:
221
+ Lf=(zl.lf if lf==1 else lf)
222
+ t1=jw(Lf,te) if lines else te
223
+ #no t1=zl.CallBackCaller() if zl.ir else t1
224
+ e1=t1
225
+ if isinstance(e1, str): e1=e1.encode(code)
226
+ try:
227
+ with open(fn, 'wb') as fo:
228
+ fo.write(e1)
229
+ except Exception as e:
230
+ #restore()
231
+ ## zl.LastError=e
232
+ open(r"r:\fail reason.txt","w").write(str(e))
233
+ open(r"r:\fail "+tp()+".txt", "wb").write(e1)
234
+ #with open(nxNumFull(r"r:","%s"+os.path.split(fn)[1],nZfill=2), 'wb') as fo:
235
+ return 0
236
+ if ts==1: os.utime(zl.fn, zl.ts)
237
+ ## finally:
238
+ if 0:
239
+ ## t2=rfdtv(fn)
240
+ fo=wfd(fn)
241
+ t2=fo.r(cs=("utf8","utf16","eucjp","cp932"))
242
+ print(fo.code,t2)
243
+ ## print(fnRestore,t2)
244
+ #diff()
245
+ return 1
246
+ ## def write8re(zl,fn,te,*aw,**kw):print("w;",fn,len(te), lf, dif32(zl.r(),te))
247
+ def w(zl,te,*a,**k):return zl.write8re(zl.fn, te, *a, **k)
248
+ def t(zl,te,*a,**k):
249
+ rmbat(zl.fn,rembat="wf t.bat")
250
+ return zl.write8re(zl.fn, te,copy=False *a, **k)
251
+ def CallBackCaller(zl):
252
+ te=zl.r((zl.code,))
253
+ rnte=""
254
+ l=0
255
+ for n,ran in enumerate(zl.lte):#range list.appended(ire.search)
256
+ rnte+=te[l:ran[0]]
257
+ rnte+=zl.cb(n)
258
+ l=ran[1]
259
+ rnte+=te[l:]
260
+ return rnte
261
+ def ornkf(byte,cs=("utf8","cp932","utf16","eucjp"),lines=False):
262
+ return
263
+ for c in csf:
264
+ try:
265
+ t1=e1.decode(c)
266
+ if("\r\n" in t1):
267
+ if(t1.count("\r")!=t1.count("\n")):return 0
268
+ zl.lf="\r\n"
269
+ elif("\n" in t1):zl.lf="\n"
270
+ elif("\r" in t1):zl.lf="\r"
271
+ else:#oneline
272
+ pass
273
+ if lines: te=t1.splitlines()
274
+ else: te=t1.replace(zl.lf, "\n")
275
+ zl.code=c
276
+ break
277
+ except UnicodeDecodeError as XP:
278
+ continue;
279
+ except UnicodeError as XP:
280
+ continue;
281
+ else:
282
+ return 0
283
+ ## with open(zl.fn, "rb", encoding=zl.code):
284
+ return te
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+ #----mrk1-----------
294
+ def line():
295
+ return inspect.currentframe().f_back.f_lineno
296
+ def cmpd(te,tf):#cmpDokomade.Use for comic rename
297
+ for n in range(999):
298
+ if te[n] != tf[n]:
299
+ return n
300
+ def cmpfs(li):
301
+ "os.path.commonprefix(list)"
302
+ ip=min(compd(li[0],f) for f in li)
303
+ return ip
304
+ def wfy(li,ws=5):# windowfy function, window size
305
+ for n,f in enumerate(li):
306
+ yield li[n:n+5]
307
+ ##def orin(te=" input"):
308
+ ## print(te)
309
+ ## input()
310
+ def owari():
311
+ print("\nowari:");
312
+ input("owari:")
313
+
314
+
315
+ from argparse import ArgumentParser
316
+ def arx(a=None):#Exe
317
+ parser = ArgumentParser(description="command_error")
318
+ parser.add_argument("-f",type=str)
319
+ parser.add_argument("-re",type=str)
320
+ parser.add_argument("fil",nargs="*")
321
+ arps=parser.parse_args(a)
322
+ return arps
323
+ def a2a(li):
324
+ return jw(" ",('"{}"'.format(f) for f in li))
325
+ def chdir(x=0):
326
+ os.chdir(lfnd(sys.argv[x]))
327
+ class pushd:
328
+ def __init__(sl,dir):
329
+ if 1: inidi(dir)
330
+ sl.dL=os.getcwd()
331
+ os.chdir(dir)
332
+ def __enter__(sl):
333
+ return 1
334
+ def __exit__(sl, _type, value, traceback):
335
+ os.chdir(sl.dL)
336
+ def chdirc(fil=0,idx=1):# mv to z droped file
337
+ if not fil:fil=sys.argv[1:]
338
+ if isinstance(fil,(hhwr)): fil=fil.fil
339
+ if not fil:
340
+ pr("please drop off the file");input("chdirc()");
341
+ else:
342
+ os.chdir(lfnd(fil[0]))
343
+ return fil
344
+
345
+ def chdirm():# mv to z file own is in
346
+ chdirc(args=sys.argv,idx=0)
347
+
348
+ def cdn(args = sys.argv):#ChDirNakereba 引数があればそのディレクトリに。なければスクリプトの
349
+ if(len(args) == 1):
350
+ lena=0;
351
+ else:
352
+ lena=1;
353
+ argf= args[lena]
354
+ d=re.match(r"(.+(?:\\|/))",argf).group(1)
355
+ os.chdir(d)
356
+ # a=input(argf)
357
+ return args[1:];
358
+ #r:\p\fi.mkv
359
+ #r:\p
360
+ #r:\p #fi
361
+ #fi.
362
+ #fi.mkv
363
+ #.mkv
364
+ #mkv
365
+ def cdir(fn):return lfnd(fn)
366
+ def cdiy(argf):#+yen
367
+ return argf[:argf.rfind('\\')+1]#fail .-1+1=0 .""
368
+ def cfile(fn):return lfnb(lfn.splitext(fn)[0])
369
+ def cdotc(fn):return lfnb(fn)
370
+ def catsuff(fn,suf):#foo.mkv, mp4 >> foo.mp4
371
+ tail=fn.rfind('.')
372
+ if(tail==-1):tail=None
373
+ fnre=fn[:tail]+"."+suf
374
+ if(fnre==fn):
375
+ return "onaji"
376
+ return fnre
377
+ replaceSuffix=catsuff
378
+ def catpref(fn,prefix):
379
+ "/foo.mkv, f2 >> /f2foo.mkv"
380
+ yenpos=fn.rfind('\\')
381
+ if(yenpos==-1):
382
+ fnre=prefix+fn
383
+ else:
384
+ fnre=fn[:yenpos]+'\\'+prefix+fn[yenpos+1:]
385
+ return fnre
386
+ def CatPS(fn,p,s):
387
+ return catsuff(catpref(fn,p),s)
388
+ #
389
+ if "jwdir":
390
+ def lgest(lis):
391
+ l=lis[0]
392
+ for l2 in lis:
393
+ if l2>l: l=l2
394
+ return l
395
+ def notanybad(lis):
396
+ for f in lis:
397
+ if not f: return False
398
+ return True
399
+ #from jwdir import *
400
+ jwdir=getattr(os.path,b'\x6A\x6F\x69\x6E'.decode())
401
+ jofn=jwdir
402
+ def jw(te,list):
403
+ assert isinstance(te,(str,bytes))
404
+ #assert 1==len(typ:=set(type(f) for f in [te,*list])), ["type not unique ",typ]
405
+ assert hasattr(list,"__iter__")
406
+ return getattr(te,b'\x6A\x6F\x69\x6E'.decode())(list)
407
+ lfjw=functools.partial(jw, lf)
408
+ _lfn="LibFileName"#="lfn"
409
+ lfn=os.path
410
+ lfnd=lfn.dirname
411
+ lfndir=lfn.dirname
412
+ lfnb=lfn.basename
413
+ mtime=lfn.getmtime
414
+ ctime=lfn.getctime
415
+ n12=__builtins__[b'\x65\x6E\x75\x6D\x65\x72\x61\x74\x65'.decode()]
416
+ def fpn1(lis):
417
+ if isinstance(lis,(dict)): return getattr(lis,b'\x69\x74\x65\x6D\x73'.decode())()
418
+ return n12(lis)
419
+ sleep=getattr(time,b'\x73\x6C\x65\x65\x70'.decode())
420
+ def shuttown(stdin,*w):
421
+ assert hasattr(stdin, b'\x63\x6C\x6F\x73\x65'.decode())
422
+ return getattr(stdin,b'\x63\x6C\x6F\x73\x65'.decode())(*w)
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+ def dq(te):#double quote
438
+ if(te[0] != '"' or te[-1] != '"'):
439
+ return '"'+te+'"';
440
+ def prit(*w):
441
+ te=jw(" ", [str(f) for f in w])+lf;
442
+ ## print("exit-%d "%inspect.currentframe().f_back.f_lineno, end="");
443
+ print("exit-")
444
+ print(te, end="");
445
+ if w[:1]==(1,):input("*")
446
+ sys.exit();
447
+ prexit=prit
448
+ def inidi(pdir):
449
+ if os.path.exists(pdir): return 1
450
+ else:os.makedirs(pdir); return 0
451
+ def inidir(*dirlist):
452
+ with pushd("."):
453
+ for f in dirlist:
454
+ assert type(f)==str, "inidir;"
455
+ #f=os.path.abspath(f)
456
+ if not f:
457
+ os.chdir("..")
458
+ continue
459
+ p=os.path.split(f)
460
+ if(p[0]):#"c:\dir\"
461
+ if not lfn.exists(p[0]):os.makedirs(p[0])
462
+ assert lfn.isdir(p[0])
463
+ os.chdir(p[0])
464
+ if(p[1]):#"c:\file" > ("c:\", "file")
465
+ if not os.path.exists(f):wfdb(f,b"")
466
+ def isdir(fn):
467
+ if os.path.isdir(fn): return fn;
468
+ if os.path.isfile(fn): return 0;
469
+ if os.path.islink(fn): return 0;
470
+
471
+ def isBound(length,index):
472
+ if(length<0):
473
+ index=abs(index+1)
474
+ return bool(length>index)
475
+ def boundary(x,b):
476
+ if b[0]>x:x=b[0];
477
+ if b[1]<=x:x=b[1]-1
478
+ return x
479
+ def ifexist(fn):#return True
480
+ return lfn.exists(fn)
481
+ def AbImage1(fs,grouping=False):#連番を表示しない。冗長になるのを防ぐ
482
+ lioView=[]
483
+ DiNameTm=puni()
484
+ for fn in fs:
485
+ NameTm=re.sub(r"\d","5",fn)
486
+ DiNameTm.up(NameTm,fn)
487
+ #
488
+ ireTailNm=re.compile(r"(\d+)")
489
+ def fTailNm(fn):#return rearest number
490
+ fn=re.sub(r"(mp4|mp3)","",fn)
491
+ mo=ireTailNm.findall(fn)
492
+ if mo:
493
+ Nm=int(mo[-1])
494
+ return Nm
495
+ return 0
496
+ if grouping:
497
+ d2=list((k,sorted(v,key=lambda e: -fTailNm(e))) for k,v in DiNameTm.items())
498
+ l1=[[" "+f[0]]+f[1:grouping] for k,f in d2]
499
+ lioView=[f1 for f2 in l1 for f1 in f2]
500
+ else:
501
+ lioView=[max(v,key=fTailNm) for k,v in DiNameTm.items()]
502
+ return lioView
503
+ def orror(*a,**k):
504
+ te=jw(" ",(str(f)for f in a)) + lf;
505
+ afdt("orror00.txt",te)
506
+ def orro2(*a,**k):
507
+ te="";
508
+ for f in a:
509
+ ty=type(f);
510
+ if(ty==int):
511
+ ti=str(f);
512
+ te= te+ti
513
+ else:
514
+ te+=f;
515
+ te+=" ";
516
+ te+=lf;
517
+ afdt("orror00.txt",te)
518
+ def orro3(fn,te0=None,sp=" "):
519
+ if(te0!=None):
520
+ wfd(fn).w(te0,copy=False)
521
+ def f(*a,**k):
522
+ te=jw(sp,[str(t) for t in a]);
523
+ afdt(fn,te+lf)
524
+ return te
525
+ return f;
526
+
527
+ def move2(src,dist, rec=0):
528
+ if dist==src: return
529
+ distdir=lfn.dirname(dist)
530
+ if distdir and not(ifexist(distdir)): os.makedirs(distdir)
531
+ if rec: afdt("r:\\temp\\rename.txt",dist+tab+src+lf);
532
+ os.rename(src,dist);
533
+ ##def move2(src,dist): move2(dist,src,0)
534
+
535
+ def rmbat(fns,rembat="rmbat.bat",tmd=tfolder):#jis only
536
+ rembat=tmd+"/"+rembat
537
+ if not ifexist(rembat): afdt(rembat, 'chcp 65001\r\n')
538
+ for fn in fns if type(fns)!=str else [fns]: afdt(rembat,'del "{fn}"\r\n'.format(fn=lfn.abspath(fn)))
539
+ orRemove=rmbat
540
+ def remove(fn,add=1):
541
+ if not ifexist(fn):return
542
+ if add: afdt(r"r:\temp\rename.txt",":rm"+"\t"+fn+lf);
543
+ os.chmod(fn,0o770)
544
+ if lfn.isdir(fn):
545
+ shutil.rmtree(fn)
546
+ elif lfn.isfile(fn):
547
+ os.remove(fn)
548
+ return 1
549
+ def remo(fn): return remove(fn,add=0)
550
+ from uuid import uuid1
551
+ _perf_counter0=time.perf_counter()
552
+ def perf_counter():
553
+ return time.perf_counter()-_perf_counter0
554
+ def timepref(w=5,n=2):# zero width, after z decimal point
555
+ return time.strftime("%Y%m%d-%H%M%S")+"-{t:0{w}d}".format(w=w,t=time.perf_counter_ns()//(1000000000//10**n))
556
+ from datetime import datetime
557
+ _now=0
558
+ def tp(te="%Y%m%d-%H%M%S",n=2):#%f
559
+ global _now
560
+ while 1:
561
+ ((t:=datetime.now()))
562
+ now=t.strftime(te)
563
+ if n:now+="-{}".format(f"{t.microsecond:06}"[:n])
564
+ if _now!=now:break
565
+ _now=now
566
+ return now
567
+
568
+ def emove(src,timebase=True):
569
+ src=os.path.abspath(src)
570
+ c=os.path.splitdrive(src)[0]+os.path.sep #c:
571
+ emo=jofn(c, "emove______")
572
+ if not(os.path.exists(emo)): os.makedirs(emo)
573
+ _id=tp() if timebase else str(uuid1(0))# None . getnode()
574
+ #base="{} {}".format(os.path.basename(src), _id)
575
+ base=_id
576
+ dst=jofn(c, "emove______", base)
577
+ afdt(jofn(emo,"wrld.txt"),src+"\t"+base+lf);
578
+ os.rename(src,dst)
579
+ return dst
580
+ def emrestore(fn="C"):
581
+ if len(fn)==1:
582
+ emo=jofn(fn[0]+":/", "emove______")
583
+ else:emo=fn
584
+ li=rcsr(jofn(emo,"wrld.txt"))
585
+ return li
586
+ return (li[-400:])
587
+ def fripfn(a,b):
588
+ aff=a+"fripfn"
589
+ os.rename(a,aff)
590
+ os.rename(b,a)
591
+ os.rename(aff,b)
592
+ #emove(r"r:\02zv.txt")
593
+ #2remove
594
+ def orsplit1(te,Threshold=1):
595
+ return [j for j in te.splitlines() if len(j)>=Threshold and j[0]!="#"]
596
+ def orsplit(te,delimiter):
597
+ t2=te.split(lf)
598
+ t3=[j.split(delimiter) for j in t2 if len(j) > 0]
599
+ return t3
600
+ def orsplit2(te,delimiter,threshold=5,strip=fpreturn):
601
+ "VzComment"
602
+ t2=te.splitlines()
603
+ l1list=[[strip(f) for f in j.split(delimiter)] for j in t2 if len(j)>=threshold and j[0]!="#"]
604
+ return l1list
605
+ def colonsplit(te): return orsplit2(te,":",strip= str.strip)
606
+ ##def orsplit3(te,delimiter):
607
+ ## "VzCommentCsv"
608
+ ## t2=te.split(lf)
609
+ ## l2list=[j.split(delimiter) for j in t2 if j[0]!="#"]
610
+ ## return l2list
611
+ def orsub(map0,te):
612
+ pat=jw("|",map(lambda e:re.escape(e),map0));
613
+ ## pr(pat);
614
+ irfinal=re.compile(pat)
615
+ def f6(mo):
616
+ mg= mo.group(0);#[0];
617
+ if (mg in map0):
618
+ mg=map0[mg];
619
+ else:
620
+ assert 0,("orsub");
621
+ return mg;
622
+ t2=irfinal.sub(f6,te);
623
+ return t2;
624
+ def orsubne(map0,te):#NonEscape
625
+ pat=jw("|",map0);
626
+ ## pr(pat);
627
+ irfinal=re.compile(pat)
628
+ ## mapi={orsub({r"\[":"[",r"\]":"]",r"^":"","$":""},k):v for k,v in map0.items()}
629
+ def f6(mo):
630
+ mg= mo.group(0);#[0];
631
+ li=[v for k,v in map0.items() if re.match(k,mg)]
632
+ if li:pass
633
+ else:
634
+ assert 0,("orsub")
635
+ return mg;
636
+ t2=irfinal.sub(f6,te);
637
+ return t2;
638
+ #
639
+ def findall(ire,te,rebuild=0):
640
+ ire=re.compile(*ire) if not isinstance(ire,re.Pattern) else ire
641
+ ran=(0,0)#range
642
+ while 1:
643
+ mo=ire.search(te,ran[1])
644
+ if(mo):
645
+ ## print(mo,mo.groups())
646
+ if rebuild:
647
+ yield (ran[1],mo.span()[0]), 0
648
+ yield mo.span(), mo
649
+ else: yield mo
650
+ ran=mo.span()
651
+ else:break
652
+ if rebuild: yield (ran[1], len(te)), 0
653
+ #2regex
654
+ ##prexit(findall(re.compile(r"(\d*) (?=<d>\d*)a"),"1 2a"))
655
+ ##prexit(findall(re.compile(r"(\d)(?P<d2>2)?"),"123 1 12"))
656
+ ##prexit(list(findall((r"('.+?')",),"1'2'3 '1' 12",rebuild=1)))
657
+ def dif1(prefix,pat="#mrk1"):
658
+ ir1=compilev(pat)
659
+ mo=ir1.findall(rfdtu(sys.argv[0]))
660
+ for n,v in enumerate(mo):
661
+ write8("r:\\"+prefix+"%d%d"%(n,len(v))+".txt",v)
662
+ def dif2(t1,t2):
663
+ from difflib import HtmlDiff
664
+ df = HtmlDiff()
665
+ return df.make_file(t1,t2)
666
+ def charjunk(c):
667
+ return c==" \t"
668
+ def dif3(t1,t2):
669
+ import difflib as dif
670
+ print=orro3(r"r:\tstDiff.txt")
671
+ print("ndiff\n",lfjw(list(dif.ndiff(t1,t2))))
672
+ dcd=dif.Differ().compare(t1,t2)
673
+ print("compare",list(dcd))
674
+ unif=list(dif.unified_diff(t1,t2))
675
+ print("unified",lfjw(unif))
676
+ #wel print("ndiff",list(dif.ndiff(t1,t2,charjunk=charjunk)))
677
+ con=dif.context_diff(t1,t2)
678
+ print("context",lfjw(con))
679
+ ir1=dif.SequenceMatcher(None,t1,t2)
680
+ print("opcodes ",ir1.ratio(),list(ir1.get_opcodes()))
681
+ return jw(lf,unif)
682
+ #
683
+ def dif3tst():
684
+ import difflib as dif
685
+ t1="am..==d"
686
+ t2="pm..i=="
687
+ l1=list(t1); l2=list(t2)
688
+ ir1=dif.SequenceMatcher(None,t1,t2)
689
+ mo=ir1.get_matching_blocks()
690
+ print(ir1.ratio())#equal==1.0
691
+ print(lf,t1,lf,t2,lf, list(mo))
692
+ print(list(ir1.get_opcodes()))
693
+ sys.exit()
694
+ def dif4(*T):
695
+ import difflib as dif
696
+ return lfjw(list(dif.unified_diff(*[t.splitlines() for t in T]))[2:])
697
+ def dif32(*T): return dif3(*[t.splitlines() for t in T])
698
+ def dif5(t1,t2, splitlines=str.splitlines):
699
+ import difflib as dif
700
+ f=(dif.SequenceMatcher(None,*[splitlines(t) for t in (t1,t2)]))
701
+ return f.get_opcodes()
702
+ def difri(T,splitlines=fpreturn):
703
+ import difflib as dif
704
+ return (dif.SequenceMatcher(None,*[splitlines(t) for t in T]))
705
+ qfem="""
706
+ ; ;;
707
+ : ;c
708
+ \\ ;y
709
+ / ;l
710
+ " ;d
711
+ ? ;q
712
+ < ;k
713
+ > ;r
714
+ | ;s
715
+ * ;a
716
+ """#
717
+ q_fileEscapeMap={k:v for k,v in [k.split(" ") for k in qfem.split(lf) if k]}
718
+ ##q_fileEscapeMap={";":";;",":":";c","\\":";y","/":";l",'"':";d","?":";q"}
719
+ def esfn(fn):#EscapeFileName;x/2
720
+ return orsub(q_fileEscapeMap,fn );
721
+ def exfn(fn):#extract
722
+ return orsub(puni(q_fileEscapeMap).tenchi(),fn);
723
+ time.perf_counter()
724
+ ##def clock
725
+ def orbench(p):#BenchMark(Proc)K@milisecond
726
+ t = time.perf_counter()
727
+ tsai = time.perf_counter() - t
728
+ t = time.perf_counter()
729
+ rn=p()
730
+ t = time.perf_counter() -t -tsai;
731
+ return t,rn;
732
+
733
+ def cbbench(f):
734
+ ## @functools.wraps(f)
735
+ def cb(*a,**k):
736
+ timeL=time.perf_counter()
737
+ rn2=f(*a,**k)
738
+ rn1=time.perf_counter()-timeL
739
+ return rn1,rn2
740
+ return cb
741
+ def timefor(cb,lis,to,start="start",logfile=""):
742
+ def pr(te): return afdt(logfile or tfolder+"/log for time", te+lf)
743
+ if start: pr(start)
744
+ ti2pre=tia0=ti0=time.perf_counter()
745
+ x9=len(lis)
746
+ for x1,fn in enumerate(lis):
747
+ et=cb(x1, fn, pr)
748
+ ## if 1:
749
+ ti2=time.perf_counter()
750
+ eli=(ti2-ti0)
751
+ x1p=x1+1
752
+ ti9=eli/(x1p) * x9
753
+ mean=eli/(x1p)
754
+ one=ti2 - ti2pre
755
+ ti2pre=ti2
756
+ remain=ti9-eli
757
+ if (ti2-tia0) > to[0]:
758
+ te=et+f"({one:.1f}), {x1p}/{x9} , {eli:.1f} / {ti9:.1f}, {remain=:.1f}"
759
+ print(te)
760
+ pr(te)
761
+ tia0=ti2
762
+ if to[1] and eli > to[1]:return
763
+ if et=="return": return et
764
+
765
+ #---------
766
+ def rnz(te,li,opt=re.S|re.I):
767
+ for s,d in li:#src dist;
768
+ ## pr(s,"__",d);
769
+ ir=re.compile(s,opt);#DOTALL|IGNORE ##|re.X=VERBOSE
770
+ te=ir.sub(d,te);
771
+ return te
772
+ def rfor(url,li):
773
+ for l in li:
774
+ mo=re.match(l[0],url);
775
+ if mo :return l[1]
776
+ raise Exception ("no such url");
777
+ def sas(reg,te,bug=False,**ww):
778
+ teli=[te]
779
+ #reg=([(re.compile(f[0]),f[1]) for f in f2] for f2 in reg)
780
+ reg=([re.compile(f,re.S) for f in f2] for f2 in reg)
781
+ for ix,(ri,rx) in enumerate(reg):
782
+ li2=[]
783
+ for ta in teli:
784
+ #li2.extend([f for f in ri[0].sub(lambda e:ri[0].sub(ri[1],e), ta) if f])
785
+ li2.extend([f for f in ri.findall(ta) if f])
786
+ teli=li2
787
+ if bug: afdt(r"r:\fjpg-sas.txt","mrk{}\n".format(ix)+ppf(teli))
788
+ return teli
789
+ def traverse(reg,te,bug=False,**ww):
790
+ fn=reg; #fn.teli=[te]
791
+ def fp1(fn,pare,F,after):
792
+ if after:return
793
+ fn.teli=[]
794
+ for ta in pare.teli if pare else [te]:
795
+ rin,rx1,rx2=fn.pat
796
+ li=compilex(rin).findall(ta)
797
+ for t1 in li:
798
+ for rex in rx1:
799
+ if rex.search(t1):continue
800
+ fn.teli.append(t1)
801
+ from mlwebOrWeb import webrap
802
+ ## print(fn, f"{fn.flget=}")
803
+ if fn.flget: #fn.teli=[ webrap().gtoff(f,"utf-8") for f in fn.teli]
804
+ li=[]
805
+ for n1,f in enumerate(fn.teli):
806
+ print(f"download {n1+1} / {len(fn.teli)}")
807
+ li.append(webrap().gtoff(f,"utf-8"))
808
+ fn.teli=li
809
+ def mimi(fn):return fn.mimi
810
+ lamrec(fp1,fn, mimi,F=0,pare=None)
811
+ return
812
+ if 0:
813
+ ##class reg(re):
814
+ def compile(me,*w):
815
+ try:
816
+ return re.compile(*w)
817
+ except re.error as e:e
818
+ def sub(me,*w):
819
+ try:
820
+ return me.sub(*w)
821
+ except re.error as e:
822
+ e
823
+ compilev=lambda e:re.compile(e,re.S|re.I|re.X|re.M)
824
+ compilevs=lambda e:re.compile(e.replace(" ","\\s*"),re.S|re.I)
825
+ compilex=lambda e:re.compile(e.replace(" ","\\s*"),re.S|re.I|re.X)
826
+ compiled=lambda e:re.compile(e,re.S|re.I)
827
+ compilefn=lambda e:re.compile(e,re.I)
828
+ irealpha=re.compile(r"[_\.a-zA-Z0-9]")
829
+ def adcompile(fp):
830
+ if isinstance(fp,str): return compilevs(fp).search
831
+ if isinstance(fp,re.Pattern): return fp.search
832
+ return fp
833
+
834
+
835
+
836
+ # #-----------
837
+ def tae(p):#TryAndError例外で終了させずに表示する
838
+ try:
839
+ p()
840
+ except Exception as e:
841
+ orro4(e,lf,e.args,lf,type(e));
842
+ return(e)
843
+ def t1t(p): return ttt(p,times=1)
844
+ def ttt(p,times=10,interval=4):# try ten times
845
+ for n in range(times):
846
+ try:
847
+ return p()
848
+ except Exception as e:
849
+ if n+1 >= times: return e
850
+ time.sleep(interval)
851
+ continue
852
+ import th
853
+ cbTryLock=th.Lock()
854
+ def cbTry(f,ercb=None,lo=0,ww=(),pr=0):
855
+ ## flq=1 if hasattr(f, "__self__") and isinstance(f.__self__, orq) else 0
856
+ ## la=lambda e: a[1:]
857
+ counter=0
858
+ @functools.wraps(f)
859
+ def cb(*a,**k):
860
+ try:
861
+ #return f(**k) if a[flq:] is (False,) else f(*a,**k)
862
+ ## print("cb;", a,f,cb)
863
+ #return f(**k) if not a[flq:] or a[flq] is False else f(*a,**k)
864
+ if ww:
865
+ wwa=ww[0]
866
+ www=ww[1] if ww[1:] else {}
867
+ if lo==1:lg("cb", f.__qualname__, a,k,ww)
868
+ return f(*wwa,**k,**www) if not a or a[0] is False else f(*wwa, *a,**k,**www)#pass
869
+ if lo==1:lg("cb", f.__qualname__, a,k)
870
+ return f(**k) if not a or a[0] is False else f(*a,**k) #pass
871
+ ##except: except2(0,find="p",edit="npp")
872
+ except Exception as e: # exit is not exception
873
+ #except:
874
+ et=0
875
+ cb.counter+=1
876
+ if cb.counter>10:return
877
+ if ercb: et=cbTry(ercb)(e)
878
+ if et:return
879
+ if pr: print(except2(0,find=""))
880
+ else:
881
+ ## with cbTryLock:#?
882
+ except2(0,find="p",edit="note")
883
+ ## e2=except2()
884
+ ## Mini(te)
885
+ cb.counter-=1
886
+ cb.counter=0
887
+ return cb
888
+
889
+ def edipt(te="",find="p",edit=0,fntbl=()):
890
+ if edit:return edipt_edit(te,find,edit,fntbl)
891
+ e2=te or traceback.format_exc()
892
+ e2=e2.replace("Traceback (most recent call last):","-"*9)
893
+ if find:
894
+ if find=="p":
895
+ ## mo=compiled((r'(?<= File ")(.*?)", line (\d+), in (.+?)\n(.*?)')).findall(e2)
896
+ mo=compiled((r'(?<= File ")([^\n]+?)", line (\d+)(?:, in )?([^\n]*?)\n((?! File).*?(?=\n))?')).findall(e2)
897
+ mo=[[fppmobile(f) for f in f2] for f2 in mo if not any(((compilex(r"/python|\\Python\\|importlib").search(f2[0])), ("#pass" in f2[-1]) )) ]
898
+ return (fppmobile(omiterror(e2)),mo)
899
+ if find=="node":
900
+ mo=compiled(r'at ([\w\.]* )?\(?(C:.*?):(\d+):(\d+)').findall(e2)
901
+ mo=[[fppmobile(f) for f in f2] for f2 in mo if not any(((compilex(r"/python|\\Python\\|importlib").search(f2[0])), ("//pass" in f2[-1]) )) ]
902
+ mo=[[w[f] for f in (1,2,0,3)] for w in mo]
903
+ return (fppmobile(omiterror(e2)),mo)
904
+ if 0:
905
+ mo=re.findall(r'"<string>", line (\d+)(), in <module>\n(.*)',e2)
906
+ return mo
907
+ return fppmobile(omiterror(e2))
908
+ except2=edipt
909
+ def edipt_edit(te,find,edit=0,fntbl=()):
910
+ e2=edipt(te,find=find)
911
+ t1=e2[0].splitlines().pop()
912
+ if "dialog rejected;" in t1: return
913
+ if "SystemExit" in t1: return
914
+ from qNote1 import iniap, Mini, clhk
915
+ from dialog_ import orDialog
916
+ app=iniap()
917
+ mono=orDialog()
918
+ if not e2[1]: return Mini(e2)
919
+ if find=="p":
920
+ mo=[clhk(f, teh=(f"({cfile(f[0])}), {f[1]}, {f[2]}, \n{f[3]}")) for f in e2[1]]
921
+ if find=="node":
922
+ mo=[clhk(f, teh=(f"({cfile(f[0])}), {f[1]}, {f[2]}")) for f in e2[1]]
923
+ if (mf:=re.search("AssertionError: (.*)", e2[0])): mo=[clhk("*", teh=mf.group(1))]+mo
924
+ whw=[mo+[e2[0]]]
925
+ mono.xch(whw)
926
+ if not mono.fiFiles:return
927
+ fn,*_=mono.pickupli()
928
+ if type(fn)==str:return e2
929
+ (fn,pos,mod,te)=fn
930
+ if fn in fntbl: fn=fntbl[fn]
931
+ print(fn,fntbl)
932
+ #npp(fn,f"-n{pos}")
933
+ orPOA([HeartNote, fn, "-pos",pos,"0"])
934
+ return e2
935
+ def omiterror(e2):
936
+ return rnz(e2,(
937
+ ("NameError: name",""),
938
+ ))
939
+ def mpvstring(e2):
940
+ #t1=e2.splitlines().pop()
941
+ e2=re.sub(r'Traceback .+?\n','',e2)
942
+ e2=re.sub(r' File "C:\\cpy\\qt\\(?:clas\\)?(.+?)(?:\.pyw?)", line (\d+),',r'"\1",\2',e2)
943
+ if "mpv property does not exist" in te:
944
+ if(mo:=re.search(r"'(mpv property does not exist)',.*?b('.*?'),",te)): te=str(mo.groups())
945
+ else: te="mpv not exist"
946
+ ## te=rnz(te,(
947
+ ## (r"'(mpv property does not exist)',.*?b('.*?'),",r"\1 \2"),
948
+ ## (r"\d+",""),
949
+ ## ))
950
+ def orpopen(mp3):
951
+ import subprocess as p
952
+ return p.Popen([mp3],shell=True);
953
+ def orPOA(cmd,shell=True):
954
+ import subprocess as p
955
+ return p.Popen(cmd,shell=shell);
956
+ def popen1(cmd,shell=True):
957
+ import subprocess as p
958
+ return p.Popen(cmd,shell=shell).wait()
959
+ ##orPOA(r'start cmd /c "r:\c f.bat"')
960
+ def wiff(w):
961
+ orPOA([ordiMdirs()["wiff"],*w])
962
+ def npp(*w):
963
+ if not w: return ordiMdirs()["npp"]
964
+ orPOA([ordiMdirs()["npp"],*w])
965
+ def nppw(lis,fn=tfolder+"/log"):
966
+ wfd(fn).t(lis)
967
+ npp(fn)
968
+ class puni(dict):
969
+ ## def update(zl,k,v): dict.update(zl,[(k,v)])
970
+ def ez(zl,k):#di.get()
971
+ return zl[k] if(k in zl) else 0;
972
+ def ud(zl,k,v):
973
+ zl.update([(k,v)]);
974
+ def up(zl,k,L):#update append
975
+ if(k in zl):
976
+ zl[k].append(L);
977
+ else:
978
+ zl.update([(k,[L])]);
979
+ def uni(zl,k,L):#update append uni
980
+ if(k in zl and L not in zl[k]):
981
+ zl[k].append(L);
982
+ else:
983
+ zl.update([(k,[L])]);
984
+ def setclr(zl,li,la):
985
+ for nc,f in enumerate(li):
986
+ k=la(f)
987
+ zl.up(k,f)
988
+ return zl
989
+ def updateIncliment(zl,k):
990
+ zl.ul(k,1)
991
+ def ul(zl,k,L):#update vz Length
992
+ if(k in zl):
993
+ zl[k]+=L;
994
+ else:
995
+ zl[k]=L
996
+ def us(zl,k):#文字ごとの生起確率
997
+ for c in k:
998
+ zl.ui(c);
999
+ return zl;
1000
+ ## def counter(zl,w):
1001
+ def Clip(zl,count,regexpattern="."):
1002
+ "Clip key less than count"
1003
+ ire=re.compile(regexpattern)
1004
+ return puni([(k,v) for k,v in zl.items() if(v>count)and(ire.match(k))])
1005
+ def LetterFrequency(zl,te,llen=2):
1006
+ for k in range(len(te)-llen+1):
1007
+ zl.ui(te[k:k+llen])
1008
+ return zl;
1009
+ def sortedlist(zl):#oredered list by value;
1010
+ return [[k,v] for k, v in sorted(zl.items(), key=lambda x:x[1])]
1011
+ def olal(zl):#appended length
1012
+ tl={k:len(v) for k,v in zl.items()}
1013
+ return puni.ol(tl);
1014
+ def ok(zl):#oredered list by key;
1015
+ return [[k,v] for k, v in sorted(zl.items(), key=lambda x:x[0])]
1016
+ def ovk(zl,valuekey):#sort by appended list
1017
+ pass
1018
+ def tenchi(zl):
1019
+ li={v:k for k,v in zl.items()}
1020
+ ## li=map(lambda x: x,li);
1021
+ return li;
1022
+ d=puni()
1023
+ for k,v in zl.items():
1024
+ d[v]=k;
1025
+ return d;#X/2
1026
+ def xemj(zl,vn="v"):#moji for exec,Video
1027
+ tef="";
1028
+ for k in zl.keys():
1029
+ tei="%s=%s[%s];"%(k,vn,repr(k));#tei=k+"="++";";
1030
+ tef+=tei;
1031
+ return tef;
1032
+ def rms(zl,la):
1033
+ pops={k:v for k,v in zl.items() if la(k,v)}
1034
+ _=[zl.pop(k) for k in pops]
1035
+ return zl,pops
1036
+ #listDict
1037
+ def lipop(zl,k,cb):
1038
+ for k,v in zl.items():
1039
+ for n,v1 in enumerate(v):
1040
+ if(cb(v1)):return k,n
1041
+ def lipop1(zl,f,te):
1042
+ #{f,[[open,],[file,],[copy,],]};findcopy():lipop(f,"copy")
1043
+ return zl.lipop(f,lambda e: e[0]==te)
1044
+ ## def compres(zl,w0,fp=fpreturn,uni=0):
1045
+ ## for f in w0:
1046
+ ## zl.compresin(f,fp)
1047
+ ## return zl
1048
+ def compres(zl,f,fp=fpreturn,uni=0,te=""):#配列の長さは同じにする
1049
+ z2=zl
1050
+ if 1:
1051
+ z2=zl
1052
+ for w in f[:-1]:
1053
+ w=fp(w)
1054
+ if w not in z2: z2[w]=puni()
1055
+ z2=z2[w]
1056
+ assert isinstance(z2,puni), "not list len"#,f
1057
+ if te:
1058
+ assert f[-1] not in z2, "not list len. 123 12"#,f
1059
+ z2[f[-1]]=te
1060
+ else:
1061
+ z2.ul(f[-1],1)
1062
+ return z2[f[-1]]
1063
+ def flat(zl):
1064
+ li=[((x,),v) for x,v in zl.items()]
1065
+ for p,v in li:
1066
+ if isinstance(v,puni):
1067
+ li.extend(((*p,p2),v2) for p2,v2 in v.items())
1068
+ else:
1069
+ yield (*p,v)
1070
+ class pini(puni):
1071
+ def __init__(zl,d={},fn="pini00.ini"):
1072
+ dict.__init__(zl,d);
1073
+ zl.fn=lfn.abspath(fn);
1074
+ if lfn.isfile(fn):
1075
+ f=rfdv0(fn,["utf-8"])
1076
+ for j in f:
1077
+ a=j.split("\t");
1078
+ ## try:
1079
+ ## nm=float(a[1])
1080
+ ## except:
1081
+ ## pass;
1082
+ if(len(a)== 2):
1083
+ ## exete='zl["%s"]=' % a[0]#.replace("\\","\\\\");
1084
+ exete='zl[%s]=' % a[0]#.replace("\\","\\\\");
1085
+ et2= exete+a[1];
1086
+ exec(et2);
1087
+ else:
1088
+ notTheFormat
1089
+ def save(zl):
1090
+ te="";
1091
+ #print(os.getcwd())
1092
+ for f,v in fpn1(zl):
1093
+ ti= repr(f) +"\t" +repr(v)+"\n";
1094
+ te+=ti;
1095
+ wfd8(zl.fn,te);#Exceptions during cleanup are always ignored; see the object.__del__() documentation:
1096
+ ## deli=__del__#for
1097
+ ##class lazy:1
1098
+ ##diMdirs=None
1099
+ def ordiMdirs():# Dictionary of Directory
1100
+ global diMdirs
1101
+ diMdirs=globals().get("diMdirs") or dict([j.split("\t")[:2] for j in wfd(os.environ["cpa"]+r"\data\dirs-{}.txt".format(T45)).r(lines=True) if j[:2]])
1102
+ return diMdirs
1103
+ def mdir(f): return ordiMdirs()[f]
1104
+ #
1105
+ def fFlat(li,lirn):
1106
+ if(type(li)==list):
1107
+ for j in li:
1108
+ r1=fFlat(j,lirn)
1109
+ ## lirn.extend(r1)
1110
+ else:
1111
+ r1=li
1112
+ lirn.append(r1)
1113
+ return lirn
1114
+ class List(list):
1115
+ def rx(zl,te):
1116
+ ir1=re.compile(te)
1117
+ zl.res=[]
1118
+ for i,j in enumerate(zl):
1119
+ mo=ir1.search(j)
1120
+ if mo:
1121
+ zl.res.append(j)
1122
+ return zl.res
1123
+ def rxenu(zl,te):
1124
+ ir1=re.compile(te)
1125
+ zl.res=[]
1126
+ for i,j in enumerate(zl):
1127
+ mo=ir1.search(j)
1128
+ if mo:
1129
+ zl.res.append((i,j))
1130
+ return zl.res
1131
+ def __lt__(zl,f): return zl.append(f)
1132
+ def __lshift__(zl,li): return zl.extend(li)
1133
+ #def __getitem__(zl,f):
1134
+ def getx(zl,f,v):
1135
+ return zl.index(f) if f in zl else v
1136
+ def u(zl,f,v):
1137
+ zl[zl.index(f)]=v
1138
+ ## def up(zl,v):
1139
+ orList=List
1140
+ class ListHash(List):#from collections import OrderedDict
1141
+ def put(zl,k,v):#up
1142
+ 1
1143
+ class orLiset(set):#unique list
1144
+ pass
1145
+ def cmp(zl,ot):
1146
+ zl.cmp[x](zl[y],ot)
1147
+ ## if(role=="cmp"):split(sel)
1148
+ def get(zl,x,y,role="edit"):
1149
+ return zl[y][x]
1150
+ class LastOperation(List):
1151
+ def __init__(zl,li=(),threshold=30,wriIni=False,k="",uniq=True):
1152
+ zl.threshold=threshold
1153
+ zl.see=-1
1154
+ zl.uniq=uniq
1155
+ if(wriIni):#dict.setdefault()
1156
+ if(k in wriIni):
1157
+ li=wriIni[k]
1158
+ list.__init__(zl,li)
1159
+ wriIni[k]=zl
1160
+ else:
1161
+ list.__init__(zl,li)
1162
+ def rm(zl,te):
1163
+ if zl.uniq and (te in zl):
1164
+ zl.pop(zl.index(te))
1165
+ def ap(zl,te):
1166
+ if zl.uniq and (te in zl):
1167
+ zl._ap(zl.pop(zl.index(te)))
1168
+ else:
1169
+ if(len(zl)>=zl.threshold):zl.pop()
1170
+ zl._ap(te)
1171
+ zl.see=0
1172
+ def aprx(zl,te):#Word completion
1173
+ if zl.uniq and (zl.get(te)):
1174
+ zl._ap(zl.pop(zl.res[0][0]))
1175
+ else:
1176
+ if(len(zl)>=zl.threshold):zl.pop()
1177
+ zl._ap(te)
1178
+ zl.see=0
1179
+ ## def _ap(zl,element):
1180
+ ## zl.insert(0,element)
1181
+ _ap=lambda zl,x:zl.insert(0,x)
1182
+ def get(zl,te):
1183
+ r=zl.rxenu(te)
1184
+ return r[0]
1185
+ def up(zl):
1186
+ if(len(zl)-1>zl.see):
1187
+ zl.see+=1
1188
+ return zl[zl.see]
1189
+ def down(zl):
1190
+ if(zl.see>0):
1191
+ zl.see-=1
1192
+ return zl[zl.see]
1193
+ clHistry=LastOperation
1194
+ ##class cycle():
1195
+ class orLog(LastOperation):
1196
+ def __call__(zl,*w):
1197
+ if(len(zl)>=zl.threshold):zl.pop(0)
1198
+ zl.append((w[0],w[1:]))
1199
+ return zl
1200
+ def __repr__(zl):
1201
+ if not zl: return "[]"
1202
+ rn=[f[1] for f in zl.find(zl[-1][0])]#findByLastKey
1203
+ return str(rn)
1204
+ def find(zl,pat):
1205
+ ir1=re.compile(str(pat))
1206
+ rn= [f for f in zl if ir1.search(str(f[0]))]
1207
+ return rn
1208
+ imorLog=orLog(threshold=32100)
1209
+ ##logi=lambda *x:imorLog.ap(x[0],x[1:])
1210
+ lg=logi=imorLog
1211
+ lgf=logifind=lambda x="":imorLog.find(x)
1212
+ lgfv=lgf2=lambda x="":[f[1] for f in imorLog.find(x)]# value
1213
+ lglf=lambda x:jw(lf,[jw(" ",[str(f) for f in l]) for l in lgfv(x)])
1214
+ ##jw(lf,[l for l in lgfv(x)])
1215
+ lgc=lambda: imorLog.clear()
1216
+ def msri(proc,lp):#mashiroInner
1217
+ fil = sys.argv
1218
+ if(len(fil) == 1):
1219
+ pr("please drop off the file");input();exit()
1220
+ for fi in fil[1:]:
1221
+ proc(fi,lp);
1222
+ mashiro=msri;
1223
+ gif=r"(jpg|jpeg|png|gif|tiff|jfif|webp)$"
1224
+ ignoreFiles=(r"R:\TEMP",r"R:\Clip1.txt.txt",r"R:\OnClipChange1.txt",r"R:\Recycled",r'R:\System Volume Information')
1225
+ def listdir(r=None,iref="",walk=False,flat=False,isdir=False):
1226
+ "f in listdir() if not(f in ignoreFiles)"
1227
+ assert ifexist(r or "."),r
1228
+ if type(iref)==str:iref=re.compile(iref,re.I).search
1229
+ li=[(jwdir(r,f) if flat else f) for f in (os.listdir(r) if not walk else walky(r)) if ((os.path.abspath(jofn(r or "",f)) not in ignoreFiles) and (iref(f)))]
1230
+ if isdir: li=[f for f in li if isdir(jwdir(r,f) if r else f)]
1231
+ return li
1232
+ def walky(r):
1233
+ for p, ds ,fs in os.walk(r):
1234
+ for fn in ds+fs:
1235
+ yield jofn(p,fn)
1236
+ def unfoldfiles(ars,ap=False):
1237
+ for fn in ars:
1238
+ if os.path.isfile(fn):
1239
+ fn
1240
+ else:
1241
+ lifn=walky(fn)
1242
+ for fn in lifn:
1243
+ fn
1244
+ def orWalk(d,proc,lp):#CallBackWalk
1245
+ waw = os.walk(ddf[0])
1246
+ for r, ds ,fs in waw:
1247
+ mod=ddf[2].search(r)
1248
+ if mod :#除外子孫のフォルダをさらに(被除外リスト)出力からも除外
1249
+ lidex.append(r);
1250
+ else:
1251
+ ldir=[]
1252
+ for fc in fs:
1253
+ ldir.append(fc)
1254
+ orcb(ldir,r,ddf)
1255
+ def rnWalk(d,inc,exc):
1256
+ irInc=[re.compile(f,re.I) for f in inc]
1257
+ irExc=[re.compile(f,re.I) for f in exc]
1258
+ lii=[]
1259
+ for r, ds ,fs in os.walk(d):
1260
+ dsfs=ds+fs
1261
+ for fn in dsfs:
1262
+ for ire in irInc:
1263
+ mod=ire.search(fn)
1264
+ if mod :
1265
+ lii.append((r,fn));
1266
+ break
1267
+ for k,(r,fn) in enumerate(lii):
1268
+ for ire in irExc:
1269
+ mod=ire.search(fn)
1270
+ if mod :
1271
+ lii.pop(k);
1272
+ break
1273
+ return lii
1274
+ def ywalk(dn=None,dr=0,pop=-1):
1275
+ ds=[dn or os.getcwd()]
1276
+ while 1:
1277
+ cd=ds.pop(pop)
1278
+ ag=os.listdir(cd)
1279
+ if dr: ag=ag[::dr]
1280
+ for f in ag: yield cd,ag,jofn(cd,f)
1281
+ else:# not break return
1282
+ ds+=[fp for f in ag if os.path.isdir(fp:=jofn(cd,f))]
1283
+ if not ds : break
1284
+ continue
1285
+ break
1286
+ while 0:
1287
+ sn=hhwr(dn=listdir(r"c:\v\t",iref=isdir)[0])
1288
+ dnd=os.path.dirname(sn.dn)
1289
+ if(dnd in [r"c:\v"]): break
1290
+ for cd,fs,fp in ywalk(dnd):
1291
+ pass
1292
+ li=(list(listdir(dnd,iref=isdir)))
1293
+ ix=li.index(os.path.basename(sn.dn))
1294
+ ##prexit([f for f in ywalk(r"c:\v\t")])
1295
+ def nxDir(fn,ceil,fs=0,dr=1):
1296
+ for n in range(9):
1297
+ dn=lfnd(fn)
1298
+ if dn in ceil:
1299
+ return
1300
+ fs=listdir(dn,flat=1)
1301
+ if fn == fs[-dr]:# -1 | 0 # last sister
1302
+ fn=dn
1303
+ else:
1304
+ if not dr: fs.reverse()
1305
+ for nxf in fs[fs.index(fn)+1:]:
1306
+ fn=jofn(dn, fs[fs.index(fn)+1])
1307
+ if os.path.isfile(fn):
1308
+ yield fn
1309
+ else:
1310
+ for cd, ag, fnw in ywalk(fn,dr=0 if dr else -1):
1311
+ yield fnw
1312
+ def nxfortst(*a):
1313
+ for n,f in enumerate(nxDir(*a,dr=1)):
1314
+ print(n,f)
1315
+ ##prexit("nxfor:",nxfortst(r"C:\v\T\eva7\cover\..jpeg",(r"C:\v",)))
1316
+ def merge(li,fl="f"):
1317
+ l4=orList()
1318
+ for f1,f2 in li:
1319
+ if not f1.endswith("\\"): f1+="\\"
1320
+ li1=[f[len(f1):] for f in listdir(f1,walk=1)][::-1]
1321
+ for fe in li1:
1322
+ src=jofn(f1,fe)
1323
+ dst=jofn(f2,fe)
1324
+ assert dst.startswith(f2),(f1,f2,fe,dst)
1325
+ inidi(lfnd(dst))
1326
+ if isdir(src):
1327
+ inidi(dst)
1328
+ else:
1329
+ copy=1
1330
+ if ifexist(dst):
1331
+ copy=0
1332
+ if "f" in fl:# force, modi
1333
+ copy=1
1334
+ elif "m" in fl and (mtime(src)-mtime(dst) > 1):
1335
+ copy=1
1336
+ if copy:
1337
+ l4<(fe)
1338
+ shutil.copy2(src, dst)
1339
+ return l4
1340
+ #prexit(merge([[r"C:\v\T\lvlv",r"r:\hono"]],"m"))
1341
+ def listDrive(ignore="ABD"):
1342
+ return [L for L in (chr(c) for c in range(65,90+1)) if os.path.exists(L+':') and (L)not in ignore]
1343
+ def getFolderSize(folder):
1344
+ total_size = 0 #os.path.getsize(folder)#4096
1345
+ for item in os.listdir(folder):
1346
+ itempath = jofn(folder, item)
1347
+ if os.path.isfile(itempath):
1348
+ total_size += os.path.getsize(itempath)
1349
+ elif os.path.isdir(itempath):
1350
+ total_size += getFolderSize(itempath)
1351
+ return total_size
1352
+ def lamrec(fp1,fn, fpEnum,F=0,pare=None):
1353
+ fp1(fn,pare,F,0)
1354
+ #print(" "*F, fn)
1355
+ for f2 in fpEnum(fn):
1356
+ lamrec(fp1,f2, fpEnum,F+1,fn)
1357
+ fp1(fn,pare,F,1)
1358
+
1359
+ def abSize(size,M="",_1024=1024):# 1234 > 1,234
1360
+ # return f"{size:,}"
1361
+ li=[];mb=""
1362
+ for heavy in "KMGTE":
1363
+ m= size % _1024
1364
+ size= size // _1024
1365
+ li.append(m)
1366
+ if(heavy==M):
1367
+ li=[]
1368
+ mb=M
1369
+ if(size):mb
1370
+ else: break
1371
+ return jw(",",("{:03}".format(f) for f in li[::-1])).lstrip("0")+mb
1372
+ ##prexit(_:=(1,2026,3,4) ,abSize(sum([1024**n*f for n,f in enumerate(_[::-1])]),"K"))#
1373
+ def crbs(li):
1374
+ def binarySearchRec(goal,q0,q1,fpSave):
1375
+ mid = q0+(q1-q0)/2
1376
+ if q0>q1: return
1377
+ size=fpSave(mid)
1378
+ if goal == size:
1379
+ return mid
1380
+ elif goal > size:
1381
+ return binarySearchRec(goal,mid+1,q1,fpSave)
1382
+ else:
1383
+ return binarySearchRec(goal,q0,mid-1,fpSave)
1384
+ return binarySearchRec
1385
+ def binarySearch(fpSave,goal,q0,q1,li):
1386
+ while q0<=q1:
1387
+ mid = int(q0+(q1-q0)/2)
1388
+ size=fpSave(mid)
1389
+ li.append((mid,size))
1390
+ if(goal == size):
1391
+ return li#mid
1392
+ elif goal > size:
1393
+ q0 = mid + 1
1394
+ else:
1395
+ q1 = mid - 1
1396
+ if 0:
1397
+ mid = (q0+(q1-q0)/2)
1398
+ size=fpSave(mid)
1399
+ li.append((mid,size))
1400
+ return li
1401
+ ##print(binarySearch(lambda e:e*100,501,0,20,[]))
1402
+ def mvvideo(src,vfl,suffix):#VideoFolder,拡張子
1403
+ ire = re.compile(suffix,re.I)
1404
+ files = os.listdir(src)
1405
+ count=0
1406
+ for f in files:
1407
+ mo= ire.match(f)
1408
+ if(mo):
1409
+ sfi= src+"\\"+f;
1410
+ vfi= vfl+"\\"+f;
1411
+ #print(vfi,sfi)
1412
+ os.rename(sfi,vfi)
1413
+ count+=1;
1414
+ return count;
1415
+ def mvdir(src,vfl,suffix):#VideoFolder,拡張子
1416
+ ire = re.compile(suffix,re.I)
1417
+ files = os.walk(src)
1418
+ count=0
1419
+ for r,ds,fs in files:
1420
+ for f in ds:
1421
+ mo= ire.match(f)
1422
+ if(mo):
1423
+ sfi= r+"\\"+f;
1424
+ vfi= vfl+"\\"+f;
1425
+ #print(vfi,sfi)
1426
+ try:
1427
+ os.rename(sfi,vfi)
1428
+ except a as XP:
1429
+ pass
1430
+ count+=1;
1431
+ return count;
1432
+ def copyTree(src,dist,pat):
1433
+ pass
1434
+ def nxnum(WorkDir,fn):#Create sequencial number filename 001~99999
1435
+ 'r=nxnum(".","%sx.jpg")'
1436
+ pat=fn%r"(\d{1,3})"
1437
+ ire=re.compile(pat);
1438
+ xmax=0;
1439
+ for n in os.listdir(WorkDir):
1440
+ mo=ire.search(n);
1441
+ if mo:
1442
+ m1=mo.group(1)
1443
+ xi = int(m1)
1444
+ if(xmax < xi):
1445
+ xmax = xi
1446
+ xmax+=1
1447
+ rr = str(xmax).zfill(3);
1448
+ rr=fn%rr;
1449
+ return rr;
1450
+ def nxnu2m(WorkDir,fn,nZfill=3):
1451
+ ire=re.compile(re.escape(fn)%r"(\d{1,})");
1452
+ xmax=max([0]+[int(mo.group(1)) for mo in [ire.search(f) for f in os.listdir(WorkDir)] if mo])
1453
+ rr = str(xmax+1).zfill(nZfill);
1454
+ rr=fn%rr;
1455
+ return rr;
1456
+ def nxNumFull(WorkDir,fn,nZfill=3):#return FullPath
1457
+ resFn=nxnu2m(WorkDir,fn,nZfill=nZfill)
1458
+ return jofn(WorkDir,resFn)
1459
+ def nxNumFullSplit(fn,nZfill=3):#FullPath
1460
+ resFn=nxnu2m(*os.path.split(fn),nZfill=nZfill)
1461
+ return jofn(os.path.split(fn)[0],resFn)
1462
+ #
1463
+ montail=(0,31,28,31,30,31,30 ,31,31,30,31,30,31)
1464
+ import csv
1465
+ class oc:#orcsv
1466
+ ordelimiter="\t"
1467
+ def wcsw(fn,li):
1468
+ for code in ("cp932","utf-16"):
1469
+ try:
1470
+ with open(fn, 'w',encoding=code) as fpw:
1471
+ writer = csv.writer(fpw, delimiter=oc.ordelimiter, lineterminator='\n')
1472
+ for f in li:#
1473
+ writer.writerow(f);
1474
+ break
1475
+ except UnicodeEncodeError as XP:
1476
+ continue;
1477
+ def writecs8(fn,li):
1478
+ return wcsv(fn,li,("cp932","utf-8"))
1479
+ def wcsv(fn,li,cs=("utf-8",)):
1480
+ for code in cs:
1481
+ try:
1482
+ with open(fn, 'w',encoding=code) as fpw:
1483
+ writer = csv.writer(fpw, delimiter=oc.ordelimiter, lineterminator='\n')
1484
+ for f in li:#
1485
+ writer.writerow(f);
1486
+ break
1487
+ except UnicodeEncodeError as XP:
1488
+ continue;
1489
+ def acsw(fn,li,code="cp932"):
1490
+ with open(fn, 'a',encoding=code) as fpw:
1491
+ writer = csv.writer(fpw, delimiter=oc.ordelimiter, lineterminator='\n')
1492
+ for f in li:#
1493
+ writer.writerow(f);
1494
+ def acswvp84n534983v(fn,li):
1495
+ for code in ("cp932","utf-16"):#No good
1496
+ try:
1497
+ with open(fn, 'a',encoding=code) as fpw:
1498
+ writer = csv.writer(fpw, delimiter=oc.ordelimiter, lineterminator='\n')
1499
+ for f in li:#
1500
+ writer.writerow(f);
1501
+ break
1502
+ except UnicodeEncodeError as XP:
1503
+ continue;
1504
+ def rcsr(fn):
1505
+ for code in ("utf-8",):#("cp932","utf-8","utf-8"):
1506
+ try:
1507
+ lines =[];
1508
+ with open(fn, 'r',encoding=code, newline='') as fpr:
1509
+ reader = csv.reader(fpr, delimiter=oc.ordelimiter, lineterminator='\n')
1510
+ for line in reader:
1511
+ ## print(line)
1512
+ lines.append(line);
1513
+ return lines;
1514
+ except UnicodeDecodeError as XP:
1515
+ continue;
1516
+ #list(csv.reader(['"-f" 2 9'],delimiter=" "))
1517
+ ##X/
1518
+ def zelp0(lio,fi,irz0=re.compile(r"h/",re.I),irs=0,irx=()):
1519
+ "oList, fn, ir, List"
1520
+ tel=rfdlv(fi)
1521
+ for k,f in enumerate(tel):
1522
+ mo=irz0.search(f);
1523
+ if mo and not (irx and any(x.search(f) for x in irx)):
1524
+ if(irs):
1525
+ f=rnz(f,irs)
1526
+ lio.append((k,f))
1527
+ return lio
1528
+ def orgrepir(li,fi,ir1):
1529
+ tel=rfdlv(fi)
1530
+ for k,f in enumerate(tel):
1531
+ mo=irz0.search(f);
1532
+ if mo:
1533
+ lio.append((k,f))
1534
+ return lio
1535
+ def orgrep(li,fi,pat):
1536
+ ir1=re.compile(pat);
1537
+ li=orgrepir(li,fi,ir1);
1538
+ return lio;
1539
+ def orgrepdir(currentdir,pat):
1540
+ filelist=os.listdir(currentdir)
1541
+ matchlist=[orgrep(f) for f in filelist]
1542
+ return matchlist;
1543
+ if 1:#time
1544
+ #time.strptime("1970,1,1, ","%Y,%m,%d, ")
1545
+ #time.mktime(time.strptime("1976,2,29, 9,3,4.56","%Y,%m,%d, %H,%M,%S.%f"))
1546
+ #time.gmtime(232.324)
1547
+ #time.strftime("%Y")
1548
+ #time.time();time.mktime(time.localtime())
1549
+ def timea(te):
1550
+ time.mktime((1970,1,1, 9,10,10, 3,1,0))
1551
+ time.mktime((1970,2,31, 25,66,66, 1,1,1))
1552
+ return
1553
+ def hourmin(te): return te.replace("hour","H").replace("min","M").replace("second","S")
1554
+ letters='abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXY'
1555
+ def letter_digit(te,ln=2,zfill=0):
1556
+ for c in te:1
1557
+ def i2l(d,letters=letters):
1558
+ li2=[]
1559
+ while d:
1560
+ d,e=divmod(d,len(letters))
1561
+ li2.append(letters[e])
1562
+ return jw("",li2[::-1]) or letters[0]
1563
+ #
1564
+ #graph
1565
+ def fncore(fn,exist=False,cc=1,fldn=0):
1566
+ fn=fn.replace("\\","/")
1567
+ fnli=fn.split("/")#.__iter__()
1568
+ for nc,f in enumerate(fnli):
1569
+ if f not in ("Downloads","downfile","freerapid") and (len(f) >= 8 or f.endswith("-") or len(f) != len(f.encode("mbcs"))) and not(f.endswith("@")):
1570
+ if fldn: return jw("/",fnli[:nc+1])
1571
+ fn=jw("/",fnli[nc:])
1572
+ break
1573
+ pat=[("#.*?#",""),(r"[:_/]"," "),(r"\bv?(\d+)[sbw]?[e]?",r"\1"),(r" z(\d+)","")]
1574
+ ## pat+=[("\(.*?\)","")]#(1)
1575
+ if not exist: fn=rnz(fn,pat).strip()
1576
+ if cc==1:fn=fn.lower()
1577
+ if cc==2:pass # camel case
1578
+ return fn
1579
+ def fncx(fn): return fncore(fn,True)
1580
+ def findzv(fn):
1581
+ dir,fn=lfn.split(fn)
1582
+ if not dir:dir=os.getcwd()
1583
+ for f in range(9):
1584
+ #zl+[dir,fn]
1585
+ with pushd(dir):
1586
+ if ifexist(fn): return lfn.abspath(fn).replace("\\","/")
1587
+ if not lfnb(dir): return
1588
+ dir,_=lfn.split(dir)
1589
+ class clfn:
1590
+ def __init__(sl,**kw):
1591
+ sl.__dict__.update(kw)
1592
+ def __call__(sl,fn,dirs=()):
1593
+ for dn in dirs or sl.dirs:
1594
+ if lfn.exists(f2:=(dn+"/"+fn)):
1595
+ return f2
1596
+ if cpa:
1597
+ pmfolder=(#r"c:\v\jext",
1598
+ r"C:\Users\user\Downloads\dval\n2",
1599
+ #r"C:\Users\user\Downloads\dval\t1",
1600
+ r"C:\Users\user\Downloads\dval\t2",
1601
+ r"C:\Users\user\Downloads\dval\t5",
1602
+ r"C:\Users\user\Downloads\dval\t9",
1603
+ )+tuple(jofn(r"c:\v\zv",f) for f in os.listdir(r"c:\v\zv"))
1604
+ xcore=clfn(dirs=pmfolder)
1605
+ #
1606
+ def _gettps(fnzv,dncore):
1607
+ fnzv= fnzv or jofn(diMdirs["mtm"],"data","zv.txt")
1608
+ itemdict=eval(wfd(fnzv).r())
1609
+ tps=itemdict.setdefault(dncore,dict())
1610
+ return tps
1611
+ def gettps(fnzv,dncore=None):
1612
+ fnzv=jofn(*[fnzv] if fnzv else (diMdirs["mtm"],"data","zv"),dncore)
1613
+ if ifexist(fnzv):
1614
+ tps=puni(eval(wfd(fnzv).r()))
1615
+ else:tps=puni()
1616
+ tps.fn=fnzv
1617
+ return tps
1618
+ #
1619
+
1620
+ ##class hhwrproto(dict):pass
1621
+ class hhwrproto(p310, dict):
1622
+ def __init__(zl,*aw,**kw):
1623
+ ## super
1624
+ for f in aw: zl.update(f)
1625
+ zl.update(kw)
1626
+ for f,v in kw.items():
1627
+ if v==None: zl.pop(f)
1628
+ def str(zl,order=None, sp=" : ", lf=lf, ls=repr):
1629
+ return jw(lf,(key +sp+ ls(zl[key]) for key in order or zl if key in zl))
1630
+ def __setattr__(zl,at,v):
1631
+ zl[at]=v
1632
+ def __mod__(zl,li):pass
1633
+ def __sub__(zl,li): return zl.__x(li)
1634
+ def __truediv__(zl,l): return zl.__x((l,))
1635
+ def __x(zl,li):#exclude
1636
+ for f in li:
1637
+ zl.pop(f,0)
1638
+ return zl
1639
+ #def copy():
1640
+ #class hhwrx(hhwr):
1641
+ def hh(zl,li=None):
1642
+ zl.parser = ArgumentParser()
1643
+ zl.parser.add_argument("fil",nargs="*")#all other
1644
+ if li: zl+li
1645
+ return zl
1646
+ def __add__(zl,li):
1647
+ for f in li:
1648
+ f1,t=f[:2]
1649
+ lenli,default= f[2:] if(len(f)==4) else (None,None)
1650
+ if not isinstance(t,type):
1651
+ lenli=0
1652
+ if isinstance(t, (tuple,list)): lenli=len(t)
1653
+ default=t
1654
+ t=type(t)
1655
+ if t==bool and "store true": zl.parser.add_argument(f1, action="store_true")
1656
+ else:
1657
+ zl.parser.add_argument(f1, type=t, nargs=lenli or None, default=default)
1658
+ return zl
1659
+ def ho(zl,te=None):
1660
+ w=zl.parser.parse_args(te and csv.reader([te.strip()],delimiter=" ").__next__())
1661
+ zl.update(w.__dict__)
1662
+ zl.pop("parser")# need vn pickle
1663
+ return zl
1664
+ def __getattr__(zl,at):
1665
+ return zl[at]
1666
+ ## def __vars__(zl):wefw
1667
+ class hhwr(hhwrproto):
1668
+ def __getattr__(zl,at):
1669
+ return zl.get(at)
1670
+ return None
1671
+ hhwrproto().str
1672
+ ##prexit((hhwr(w=2,f=4) - ("w",)).str())
1673
+ ##prexit((hhwr(w=2,f=4,ff=4)/"w"/"f").str())
1674
+ ##w=hhwr();w.f=2;pr(w.f)
1675
+ ##print(hhwr({"e":1},{"e":4}))
1676
+ ##print("vars;",vars(w))
1677
+ ###print(hhwr().hh([("-f",str),("-re",str),("-ns",str)]).ho())
1678
+ ##print(dict(**hhwr(w=2)), {"ww":2})
1679
+ ##prexit(hhwr(w=2)==hhwr(w=3), hhwr()==hhwr())
1680
+ cls=hhwrproto()
1681
+ cls.mp4="mp3|mp4|mkv|flv|ogg|webm"
1682
+ #
1683
+ def set2(sl,ob,value):
1684
+ for f in value.split(): ob.__dict__[f]=sl.__dict__.get(f)
1685
+ import json
1686
+ ##def pl(fn,tfn="",pl="p"): return jsonload(fn,tfn=tfn,pl=pl)
1687
+ ##def typejson(te):
1688
+ ## try: json.loads(te)
1689
+ def jsonload(fn,tfn="",pl="json",flw=0,fltmp=1):
1690
+ if pl=="json":
1691
+ fp=(json.loads,json.dumps)
1692
+ elif pl=="p":
1693
+ import pickle
1694
+ fp=(pickle.loads, pickle.dumps)
1695
+ else:fp=()
1696
+ if not tfn:
1697
+ import hashlib
1698
+ te=hashlib.sha256(fn.encode()).hexdigest()
1699
+ tfn=jofn(tfolder,"wft;"+te)
1700
+ tfn=lfn.abspath(tfn)
1701
+ #print(tfn)
1702
+ if ifexist(tfn) and not flw:
1703
+ if pl=="json": te=wfd(tfn).r()
1704
+ if pl=="p": te=wfd(tfn).rb()
1705
+ js=fp[0](te or "")
1706
+ else:js={}
1707
+ def log(te=js):
1708
+ if fltmp:wfd(tfn).t(fp[1](te))
1709
+ else: wfd(tfn).w(fp[1](te), copy=0)
1710
+ if flw: log(flw)
1711
+ table=hhwr(t=js,l=len(js),fn=fn,tfn=tfn,log=log)
1712
+ return table, js, tfn, log
1713
+ def wfupdate(fn,pat,count):
1714
+ imw=wfd(fn)
1715
+ te=imw.r()
1716
+ if callable(pat):te=pat(te)
1717
+ else: te=rnz(te,pat)
1718
+ cs=[te.count(f) for f,c in count]
1719
+ assert not any(c!=co for (f,c),co in zip(count,cs)),cs
1720
+ imw.w(te,copy=0)
1721
+ return te
1722
+ if 1:
1723
+ def pmobile(*w,**W):
1724
+ pmobilelib=impt((os.environ["AlfiPython"]+f"/escape/nagano/e3escapeMtm"),reload=0);
1725
+ return pmobilelib.pmobile(*w,**W)
1726
+ def fppmobile(*w,**W):
1727
+ pmobilelib=impt((os.environ["AlfiPython"]+f"/escape/nagano/e3escapeMtm"),reload=0);
1728
+ return pmobilelib.fppmobile(*w,**W)
1729
+ def note():
1730
+ return impt(os.environ["AlfiPython"]+r"/qt/lib"+"/qNote1", reload=0)
1731
+ global_app=iniap()
1732
+ return "note+"
1733
+ def x4():
1734
+ return impt(cpy+"/Generator/x4orlexi")
1735
+ def xfil(ap,flinput=1):
1736
+ hh=hhwr().hh(ap).ho()
1737
+ fl=hh.fil
1738
+ if hh.fil:fl= hh.fil
1739
+ elif flinput:
1740
+ fl=input("w copy:")
1741
+ if fl:
1742
+ if fl[0]==";": fl=hh.ho(fl)
1743
+ else: fl=fl.split()
1744
+ #else:fl=[]
1745
+ return hh,fl
1746
+ hhfl=xfil
1747
+ ##def genefp(li):
1748
+ ## def fp1(fn,pare,F,after):l
1749
+ ## def fpEnum(fn):
1750
+ ## lamrec(fp1,li,fpEnum)
1751
+ import importlib; from importlib import import_module
1752
+ find_spec=getattr(importlib,b'\x75\x74\x69\x6C'.decode()).find_spec
1753
+ module_from_spec=getattr(importlib,b'\x75\x74\x69\x6C'.decode()).module_from_spec
1754
+ importtool=getattr(importlib,b'\x75\x74\x69\x6C'.decode())
1755
+ def fwfw_impt(fn,reload=True, lazy=False, **_):
1756
+ dir,fir=lfn.split(fn)
1757
+ #sys.path.append(os.path.abspath(dir))
1758
+ cf=cfile(fn)
1759
+ if cf in sys.modules:
1760
+ mod=sys.modules[cf]
1761
+ if reload: importlib.reload(mod)# orText() not found
1762
+ else:
1763
+ if not dir:
1764
+ mod=import_module(cf)#pass
1765
+ else:
1766
+ if not ifexist(fn): fn+=".py"
1767
+ spec=importtool.spec_from_file_location(cf,fn)
1768
+ assert spec, "import from file location;"+fn
1769
+ if lazy: spec.loader = LazyLoader(spec.loader)
1770
+ mod = module_from_spec(spec)
1771
+ sys.modules[cf] = mod
1772
+ if "import": getattr(spec.loader, b'\x65\x78\x65\x63_\x6D\x6F\x64\x75\x6C\x65'.decode())(mod)
1773
+ #if dir: sys.path.pop()
1774
+ return mod
1775
+ def impt(fn,reload=True, lazy=False, **_):
1776
+ dir,fir=lfn.split(fn)
1777
+ #sys.path.append(os.path.abspath(dir))
1778
+ cf=cfile(fn)
1779
+ if cf in sys.modules and not reload:
1780
+ mod=sys.modules[cf]
1781
+ #if reload: importlib.reload(mod)# orText() not found
1782
+ else:
1783
+ f9=fn
1784
+ if not dir:
1785
+ for p in [os.getcwd(), *sys.path]:
1786
+ if ifexist(f9:=jwdir(p,fn)): break
1787
+ if ifexist(f9:=(f9+".py")):break
1788
+ if 1:
1789
+ if not ifexist(f9): f9+=".py"
1790
+ spec=importtool.spec_from_file_location(cf,f9)
1791
+ assert spec, "import from file location;"+f9
1792
+ if lazy: spec.loader = LazyLoader(spec.loader)
1793
+ mod = module_from_spec(spec)
1794
+ sys.modules[cf] = mod
1795
+ if "import": getattr(spec.loader, b'\x65\x78\x65\x63_\x6D\x6F\x64\x75\x6C\x65'.decode())(mod)
1796
+ #if dir: sys.path.pop()
1797
+ return mod
1798
+ def zen(wfn):
1799
+ wfn=orsub({":":":", "<":"(",">":")","\\":"/"},wfn)
1800
+ return wfn
1801
+ def newthan(tfn,fn): return mtime(tfn)>mtime(fn)
1802
+ def memof(fp):
1803
+ fp._memof={}
1804
+ @functools.wraps(fp)
1805
+ def p(zl,*w):
1806
+ #print(fp._memof, w)
1807
+ if(mf:=fp._memof.get(w)): return mf
1808
+ else:
1809
+ pm=fp(zl,*w)
1810
+ fp._memof[w]=pm
1811
+ return pm
1812
+ return p
1813
+ if __name__ == '__main__':
1814
+ print(os.getcwd());
1815
+ hh={
1816
+ ## "ast":1,
1817
+ ## "dif3":5,
1818
+ }
1819
+ hw,fl=xfil([])
1820
+ hw.new36=1200
1821
+ if "dif3" in hw:
1822
+ t1="am,mm,gf,jpefg".split(",")
1823
+ t2="pm,mm,gif,jpg".split(",")
1824
+ prexit(dif3(t1,t2))
1825
+ if(0):
1826
+ eu=esfn(url);
1827
+ wfdt(eu,"lkjl");
1828
+ e2=exfn(eu);
1829
+ pr(bool(url==e2));
1830
+ pr(url,lf,e2,lf,eu);
1831
+ if "ast" in fl:
1832
+ import ast
1833
+ @cbTry
1834
+ def pcompile(te):1
1835
+ print(ast.dump(ast.parse("if 1:1")))
1836
+ w=ast.parse("sn.l[2]")
1837
+ q=[(f,list(ast.iter_fields(f))) for f in ast.walk(w)]
1838
+ for f,n in q:
1839
+ if n:print(len(n),n)
1840
+ ## prexit(emrestore("c"))
1841
+ if hw.new36:# f-string
1842
+ print(f"f-string: {hw.new36:,} str:left,{hh!s:>22}")
1843
+ #Operator precedence() ~ / + >> & ^ | in > not and or if
1844
+ ##npp(r'"C:/cpy/Mjmoji/pr/give it try.pyw" -n2')
1845
+ #compilev(r"(?<=1).*?(?=\n)").sub("2","1\nfw\n")