From e87279189c73e8229d3d2435a1eb52289478aa6a Mon Sep 17 00:00:00 2001
From: EmbraceLife <1227561934@qq.com>
Date: Sat, 13 May 2017 07:12:21 +0800
Subject: [PATCH 01/36] update Dense
---
kerasTUT/4-regressor_example.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py
index 050e0d8..3550f47 100644
--- a/kerasTUT/4-regressor_example.py
+++ b/kerasTUT/4-regressor_example.py
@@ -29,7 +29,7 @@
# build a neural network from the 1st layer to the last layer
model = Sequential()
-model.add(Dense(output_dim=1, input_dim=1))
+model.add(Dense(units=1, input_dim=1))
# choose loss function and optimizing method
model.compile(loss='mse', optimizer='sgd')
@@ -52,4 +52,4 @@
Y_pred = model.predict(X_test)
plt.scatter(X_test, Y_test)
plt.plot(X_test, Y_pred)
-plt.show()
\ No newline at end of file
+plt.show()
From 28944a12d0c6c591b893913e84b1c805be7739d5 Mon Sep 17 00:00:00 2001
From: EmbraceLife <1227561934@qq.com>
Date: Sat, 13 May 2017 07:18:17 +0800
Subject: [PATCH 02/36] add a line above
---
kerasTUT/4-regressor_example.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py
index 3550f47..2482fab 100644
--- a/kerasTUT/4-regressor_example.py
+++ b/kerasTUT/4-regressor_example.py
@@ -29,6 +29,7 @@
# build a neural network from the 1st layer to the last layer
model = Sequential()
+# update Dense arg 'units' here
model.add(Dense(units=1, input_dim=1))
# choose loss function and optimizing method
From ebe77987979016717438ef7fb7e07b96cb40776b Mon Sep 17 00:00:00 2001
From: EmbraceLife <1227561934@qq.com>
Date: Sat, 13 May 2017 07:19:48 +0800
Subject: [PATCH 03/36] add to the end of current line
---
kerasTUT/4-regressor_example.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py
index 3550f47..09967ea 100644
--- a/kerasTUT/4-regressor_example.py
+++ b/kerasTUT/4-regressor_example.py
@@ -29,7 +29,7 @@
# build a neural network from the 1st layer to the last layer
model = Sequential()
-model.add(Dense(units=1, input_dim=1))
+model.add(Dense(units=1, input_dim=1)) # new_change
# choose loss function and optimizing method
model.compile(loss='mse', optimizer='sgd')
From 1d496f4703564ee1bacdc287fc1ad2dc00d74846 Mon Sep 17 00:00:00 2001
From: EmbraceLife <1227561934@qq.com>
Date: Sat, 13 May 2017 07:25:04 +0800
Subject: [PATCH 04/36] added a line below current line
---
kerasTUT/4-regressor_example.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py
index 09967ea..e9eb804 100644
--- a/kerasTUT/4-regressor_example.py
+++ b/kerasTUT/4-regressor_example.py
@@ -29,7 +29,8 @@
# build a neural network from the 1st layer to the last layer
model = Sequential()
-model.add(Dense(units=1, input_dim=1)) # new_change
+model.add(Dense(units=1, input_dim=1))
+# new_change
# choose loss function and optimizing method
model.compile(loss='mse', optimizer='sgd')
From c2ec968ba36f69612078de5966ca29516f38ce16 Mon Sep 17 00:00:00 2001
From: EmbraceLife <1227561934@qq.com>
Date: Sat, 13 May 2017 08:26:07 +0800
Subject: [PATCH 05/36] back 2 commits
---
kerasTUT/4-regressor_example.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py
index 469c82b..0ec530c 100644
--- a/kerasTUT/4-regressor_example.py
+++ b/kerasTUT/4-regressor_example.py
@@ -30,8 +30,12 @@
# build a neural network from the 1st layer to the last layer
model = Sequential()
# update Dense arg 'units' here
+<<<<<<< HEAD
model.add(Dense(units=1, input_dim=1))
# new_change
+=======
+model.add(Dense(units=1, input_dim=1)) # edit same line1
+>>>>>>> kur_tutorials
# choose loss function and optimizing method
model.compile(loss='mse', optimizer='sgd')
From 73fea488242c6152aa8c8444ec10dad33467c68f Mon Sep 17 00:00:00 2001
From: EmbraceLife <1227561934@qq.com>
Date: Sat, 13 May 2017 08:27:44 +0800
Subject: [PATCH 06/36] edit on the conflict messages and add and commit
---
kerasTUT/4-regressor_example.py | 5 -----
1 file changed, 5 deletions(-)
diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py
index 0ec530c..df1bb75 100644
--- a/kerasTUT/4-regressor_example.py
+++ b/kerasTUT/4-regressor_example.py
@@ -30,12 +30,7 @@
# build a neural network from the 1st layer to the last layer
model = Sequential()
# update Dense arg 'units' here
-<<<<<<< HEAD
-model.add(Dense(units=1, input_dim=1))
-# new_change
-=======
model.add(Dense(units=1, input_dim=1)) # edit same line1
->>>>>>> kur_tutorials
# choose loss function and optimizing method
model.compile(loss='mse', optimizer='sgd')
From 309b821b321dafd94aeba306a705a9bc1f62bc94 Mon Sep 17 00:00:00 2001
From: EmbraceLife <1227561934@qq.com>
Date: Sat, 13 May 2017 08:46:57 +0800
Subject: [PATCH 07/36] update Dense with units
---
kerasTUT/4-regressor_example.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py
index df1bb75..e41e2ad 100644
--- a/kerasTUT/4-regressor_example.py
+++ b/kerasTUT/4-regressor_example.py
@@ -29,8 +29,8 @@
# build a neural network from the 1st layer to the last layer
model = Sequential()
-# update Dense arg 'units' here
-model.add(Dense(units=1, input_dim=1)) # edit same line1
+
+model.add(Dense(units=1, input_dim=1))
# choose loss function and optimizing method
model.compile(loss='mse', optimizer='sgd')
From 3c23b790d1aafd802a2dd0faa2ba1896ebc6b90f Mon Sep 17 00:00:00 2001
From: Morvan Zhou
+
+
+
+
+
+
+
+
697OkdaP_*J>3`TAnaFwUO+oWR~8*+j(JNOMHm4uA{pf! zI+=Vz#znYuJrnnmF2LK5Nqpsq$EYof>?}kB$=+yv^g1*GnULpjdo01*Dmg+xv|3~9 zb%WukOZl6#&66pW!kxm+UC}Q)QB)XmzJ{X{uA3Qx69nnjXo;*WF1VhlECsxiNPw$KOn5VOuA$a|3q4I9Wxsw|*V KDF65_S}#NdfP=6aP5obb+a-0;01ra-Zf zbDA-3V`Ap;XV#Of%p3b35Q=w)LXq6@&%G+)%d%M`b157b (s&MjCOunYH%`?z4%;$Lj=i@Dwyp__a z@@K-Sam_r9eSFYbH7eZ{19liG0fJ?xvHVS_&<1N5auOiEWgK{Js@X}~ZZy;T6O}N- zc2+O#hgj%yRfC5*biF&s%5@YBF9`*aAri3DGqT;yZ|v+=GqqMYDnkDI4lFk=C!7|p zMW||*XWRs-$ag49&<{vShdJQ^vzc2>oplsB?f7+$$}c>e+BOP5+e=C6Fwp=Xi?iRW zfr|Dwg=qoO=x&M?D%vN+Rdj$7=Ek~+no(Eemy!IlG)9UTcJh5-Q Ru?{pF^`>e3$DLHCsB`LbLb{>%~dmD}h81 z7k`H4in+>#LT4a0M)f@hQew5oSO&)LPG|WqTgi_L6%90B_lp_(rYWv;=IJ3B MQ%@pZIA{L8!B4F 1DA} zE^}jhjC5+E-9xPiHAZem1c&o_ a+>` z7#v$N*WB?IYR}f$Gd8HKa*J)Io74lHGAD?cz|5VBvd0&bUuksjs!KSxBsrc6LY%5T z7IxYfOs}4MBFMd)(rWVNAj4kiT8X(j4=rx(KK~3L%OZu_z(V<6D3U7 zvxt6OSJ}`X?foas?$Fsne237D=y6JuGplKViFp?4t8Yt%Y$>clh%}9z;!s0m-$jcp z-Rn`UJW;HTGJLLD5$%tZ+$UTuh^Tpa%Q{=xC0UR1FHNKL(FRgL!-=wzo?-(405nTU z_hr^iJU-cxW~-ujvt+m zzHvuWBuo5n-{>gazwKxrYz CEXq`PSN~)x*K!~o zKBmF1Md|gK6alADjG+1!ba*_{M^bi~z8RX_wlg>BWm| jbG8Ua_2?B@ zbsmh%LQVPjsVzpGsMhOh^my;w)+MKWvp;!?*>&Nb+_I|(_6PCYKXOS45ys!r6h;<7 zsD&hTcVl$U499*OE?v!hz~F$pP)3pxDy(3}J@9asd+tO~_Ghqa?M^-1Y^}VwT3nE> zckbF~1z5^Vzl`u`z4i>@aj*PvsF+a|`YvvQ^b1rS$4b~|6*cS&hUtG~-N6Y2GaxC` zNRdX8xy(NHSd4I)0 gPy?a)K}R@wMDB}wsxChm*RW%dqWWI_Yadi za%VNtT1O&L6MY7lT2$gd*fxr-nt9b{o8H@vDC@^!FCVo^xrKbr$LtcYsX~R5MRWO% zCovqVq;)Uq!DukDJ5Li;^_e?#n?>Tj5&JAcR`66s-^8JinKhKw8|x1Fs%>)M8EZ6} z+9ANi1G@6>nXS$1E7DFY?ZOax-p#cvwSS@JeEWgg6TyMJcPP`MDho6YcK{{y0ib#F zW{1-Rx9MY0 )^wyj)~o^)Z&f@BGBX+nOFu@*m5dUc9J7gQj&@LSuSnY zSS|&vA}YJrZ#fe~6q6>gfq{aC)LLDjf(?N%N#+P2h9wARM5-qP<9ra{rai-^X$UXE zB4g^bUj%XAhq*feCm9DNOkf%UvbfHpFl}M1xULY-vpNRGZ1i_vN2=jAd2^E6-L<46 z1q~@dx rdQzW<(p%sW;ws>sD1=q+NowSesz?oW3e#&-Gevl~) z^>dX@tR~V{k^1_s66cBBF!iONIV^8UW_MY?6l43ObX$S(tLrkMrOs`7T0jZ!ws2Zm zl(W9M-1#uO3b_nl$Yw`iwl{1*=2#RJcpcH9g@zxD!m!Qu`Xcr@Qsj%sZChPCb3*qM z6-t{SmU?Nu_-1RwIVRZVx`)_dt57+%P_9E#(Ah}&Bwtq4>};_z08gm`U4gmW+&XrP zeu`&Zx?IFn>egZJMU$_Yn7A9W_hk8(RVY6D)Uh=pEvvA2xKb+D*=b^}Ut#Brlr(l& zm6_?G9M!0(`Q6aC3do~)f>rKExtK)E_?1!a6&=hmP{&*5#U2fV_8$pxl_< L% z4H)j8Be6d%;lZZm;>H-j^6(+Vp3(1h9DGK^&4Rq-X>bl?Qy#$HgnhR5EAsp_QA6Qz zkP4QAYHq$AQ7(dzD^-2ootqgGsUCPD$5wrelwnbNT3oT>xCHIYzSoF`*HK6n_0AoO zw!uBYU6Z!eu1ERWMIX{l-Q{X>w|yqu2px|?sc1~g+)cW$EjQXUT(ymzZW>V_>8)4+ zKe~GDWHNf7a5;3dUnbpc`>fn$Dp$$TBEw%)Hvr7a#;kHRKExKPy; ?*F3Zc%qmZoOF*xs`gO2||TOB;ud(9)Y zS24Ph|EDs5@Bde2K$a>j@%%0>qo$Xum5U(U+6~j-X34xMnql0I8cOW+D>?!J$LiQb z`7+JLBu{=*HViGdC`i`?Ni8A( Bl`f- zy9arF*WM3R`(J){^JvjQ#fx8x@r7t{e!r*&-P2U6{bcGhMe6vE%ln@WiYjSd*4zeh zxM7rDn;9Mt(R=Q>aKzO;_mpiYSD3A>?dofO=EnW>EtVAy%QU;%XSSr86Wcr#p#0tJ z18LOXzt y;k?8K`!PiY0C*8+uV^uk(l3B%K4e4Mw 5q+ z{IPH;HCwVTSnW33dPd*;(`&B6vxaW~iMCXRZ-tRNs`c)IVtw@0uH~UVvzHXo-6zF@ zz~>64%Tjf?*+TrHm_&KaqU;RM4=jrrEkC*?vX{kuf~xhU+6qS%GNm+r_vA?!z_z1_ zMx88Crca-PV^4}QeFaeq4Q}f#U{cyl=CQ428}rr@FwM-%z)sNS#y@*XKbI{gm*d)p zF7aFQ(cAy@&n(BWRLR@RF w3rxAaG=&{=`U3Gh_b*IXK9AH-Oi--c3mtM<= zR^jBnUoAwC1YHLG40V~oczuWr m5}i(O$x&iG2&oxjo6It zPl6*4W?-9SdFsc}i>sQf9=SZ+&)z{-mHi>+VhWd-oAZ>J+1`(2Co59>Kg6 %{(REa|Ke&fw bjPH@GE^gJ9N78ko6YYI?X&CU+i{JVmA$4N zH0o8{i}^dC)nJrne|IJVI}Jp@)-!M`OXqQhvuSCf6(m1W?ewmG)dQVGcrp{D6cu`A z7CBufPr*B5XXV}mF^v_067E<*+7r=$e*R_t*_?3Y7y) h%FMT#hmALqz44e2P@B|#^VdUQQ!cR3@V#IDXB_3bS*HH#T% z7szaG8WXI^DtWAVh?05%g9klor_itzd2)-h@oYVNchoF{9uTg771n|4t(V!)q$s{) zIV6=4^5?zWjRB{#ybrb7EUk(eyLx!KxN>uk7gegq{z#AO{HScrj%c#kleP1NyizkG zvt^|q_aK6bY!)Tc8G9tXV`t^k@etHJgTAMinmUUC^H(rlwBfIcccR+O6YHh-l^)Vw zt qjPg&`wrcX7BeCzw;gZGSa#I%$YRi4iiW$*GuFgyIYzEWdFIW9-zhQW&Vua6O zM}kgs=VmJgFgGKfs_}*4<{%*WrF@#Jm=^WFXJ_(`HtWg-e hUG%o7NShWH0gjIGkN|rC^PB)6m`FTXRb%hfC Date: Thu, 19 Oct 2017 21:36:19 +0800 Subject: [PATCH 19/36] Resolve Error: "AttributeError" fix: tk11_msgbox.py Add a line to resolve "AttributeError" : import tkinter.messagebox --- tkinterTUT/tk11_msgbox.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tkinterTUT/tk11_msgbox.py b/tkinterTUT/tk11_msgbox.py index 10f4441..94bea1e 100644 --- a/tkinterTUT/tk11_msgbox.py +++ b/tkinterTUT/tk11_msgbox.py @@ -4,6 +4,7 @@ # Youku video tutorial: http://i.youku.com/pythontutorial import tkinter as tk +import tkinter.messagebox window = tk.Tk() window.title('my window') From 409edaac51d25b0ac41e5f43898343db43ed7064 Mon Sep 17 00:00:00 2001 From: Petrichor Date: Thu, 19 Oct 2017 21:42:55 +0800 Subject: [PATCH 20/36] docs : Add Annotations docs : Add Annotations After the code experiment, I add three annotations. --- tkinterTUT/tk11_msgbox.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tkinterTUT/tk11_msgbox.py b/tkinterTUT/tk11_msgbox.py index 94bea1e..bf54615 100644 --- a/tkinterTUT/tk11_msgbox.py +++ b/tkinterTUT/tk11_msgbox.py @@ -11,9 +11,9 @@ window.geometry('200x200') def hit_me(): - #tk.messagebox.showinfo(title='Hi', message='hahahaha') - #tk.messagebox.showwarning(title='Hi', message='nononono') - #tk.messagebox.showerror(title='Hi', message='No!! never') + #tk.messagebox.showinfo(title='Hi', message='hahahaha') # return 'ok' + #tk.messagebox.showwarning(title='Hi', message='nononono') # return 'ok' + #tk.messagebox.showerror(title='Hi', message='No!! never') # return 'ok' #print(tk.messagebox.askquestion(title='Hi', message='hahahaha')) # return 'yes' , 'no' #print(tk.messagebox.askyesno(title='Hi', message='hahahaha')) # return True, False print(tk.messagebox.asktrycancel(title='Hi', message='hahahaha')) # return True, False From 41a630acc1f356566c7516664a870104a3d5dd8f Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Mon, 23 Oct 2017 21:18:10 +1100 Subject: [PATCH 21/36] fixed mistake --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 47504f1..ce283d7 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ * [Matplotlib (绘图)](https://morvanzhou.github.io/tutorials/data-manipulation/plt/) * [其他](https://morvanzhou.github.io/tutorials/others/) * [Git (版本管理)](https://morvanzhou.github.io/tutorials/others/git/) + * [Linux 简易教学](https://morvanzhou.github.io/tutorials/others/linux-basic/) ## 赞助和支持 From 3105772337edcfd267e245fa8044ce5cd56fe9af Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Wed, 25 Oct 2017 19:47:23 +1100 Subject: [PATCH 22/36] fixed mistake --- basic/35_set.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/basic/35_set.py b/basic/35_set.py index 7b836e9..31340da 100644 --- a/basic/35_set.py +++ b/basic/35_set.py @@ -10,17 +10,20 @@ print(set(char_list)) print(set(sentence)) -print(set(char_list+ list(sentence))) +print(set(char_list + list(sentence))) unique_char = set(char_list) unique_char.add('x') -unique_char.add(['y', 'z']) +# unique_char.add(['y', 'z']) this is wrong print(unique_char) +unique_char.remove('x') +print(unique_char) +unique_char.discard('d') +print(unique_char) unique_char.clear() print(unique_char) -print(char_list.discard('d')) -print(char_list.remove('d')) -print(char_list.difference({'a', 'e', 'i'})) -print(char_list.intersection({'a', 'e', 'i'})) \ No newline at end of file +unique_char = set(char_list) +print(unique_char.difference({'a', 'e', 'i'})) +print(unique_char.intersection({'a', 'e', 'i'})) \ No newline at end of file From 3e018ce7c78bda95ed89f45b7500632bd0ddc8e5 Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Sat, 4 Nov 2017 11:43:06 +1100 Subject: [PATCH 23/36] update --- tensorflowTUT/tf20_RNN2.2/full_code.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tensorflowTUT/tf20_RNN2.2/full_code.py b/tensorflowTUT/tf20_RNN2.2/full_code.py index 6e1b4bc..7157bb7 100644 --- a/tensorflowTUT/tf20_RNN2.2/full_code.py +++ b/tensorflowTUT/tf20_RNN2.2/full_code.py @@ -100,7 +100,8 @@ def compute_cost(self): name='average_cost') tf.summary.scalar('cost', self.cost) - def ms_error(self, labels, logits): + @staticmethod + def ms_error(labels, logits): return tf.square(tf.subtract(labels, logits)) def _weight_variable(self, shape, name='weights'): From 2d5d28aac4fa5e766b0a4103c1ba6f8c78aef3cd Mon Sep 17 00:00:00 2001 From: Chunhua Jiang Date: Fri, 24 Nov 2017 23:30:44 +0800 Subject: [PATCH 24/36] clean up old code --- tensorflowTUT/tf5_example2/full_code.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tensorflowTUT/tf5_example2/full_code.py b/tensorflowTUT/tf5_example2/full_code.py index 4a857be..6b1a9ee 100644 --- a/tensorflowTUT/tf5_example2/full_code.py +++ b/tensorflowTUT/tf5_example2/full_code.py @@ -23,8 +23,6 @@ loss = tf.reduce_mean(tf.square(y-y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) - -init = tf.initialize_all_variables() ### create tensorflow structure end ### sess = tf.Session() From b26c095e7003e7b753fc86ba16990623283a5f6f Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Wed, 29 Nov 2017 21:17:04 +1100 Subject: [PATCH 25/36] update --- README.md | 1 + basic/36_RegEx.py | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 basic/36_RegEx.py diff --git a/README.md b/README.md index ce283d7..0b699f3 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ * [Theano (神经网络)](https://morvanzhou.github.io/tutorials/machine-learning/theano/) * [Keras (快速神经网络)](https://morvanzhou.github.io/tutorials/machine-learning/keras/) * [Scikit-Learn (机器学习)](https://morvanzhou.github.io/tutorials/machine-learning/sklearn/) + * [机器学习实战](https://morvanzhou.github.io/tutorials/machine-learning/ML-practice/) * [数据处理](https://morvanzhou.github.io/tutorials/data-manipulation/) * [Numpy & Pandas (处理数据)](https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/) * [Matplotlib (绘图)](https://morvanzhou.github.io/tutorials/data-manipulation/plt/) diff --git a/basic/36_RegEx.py b/basic/36_RegEx.py new file mode 100644 index 0000000..c9b535a --- /dev/null +++ b/basic/36_RegEx.py @@ -0,0 +1,95 @@ +import re + +# matching string +pattern1 = "cat" +pattern2 = "bird" +string = "dog runs to cat" +print(pattern1 in string) # True +print(pattern2 in string) # False + + +# regular expression +pattern1 = "cat" +pattern2 = "bird" +string = "dog runs to cat" +print(re.search(pattern1, string)) # <_sre.SRE_Match object; span=(12, 15), match='cat'> +print(re.search(pattern2, string)) # None + + +# multiple patterns ("run" or "ran") +ptn = r"r[au]n" # start with "r" means regular expression +print(re.search(ptn, "dog runs to cat")) # <_sre.SRE_Match object; span=(4, 7), match='run'> + + +# continue +print(re.search(r"r[A-Z]n", "dog runs to cat")) # None +print(re.search(r"r[a-z]n", "dog runs to cat")) # <_sre.SRE_Match object; span=(4, 7), match='run'> +print(re.search(r"r[0-9]n", "dog r2ns to cat")) # <_sre.SRE_Match object; span=(4, 7), match='r2n'> +print(re.search(r"r[0-9a-z]n", "dog runs to cat")) # <_sre.SRE_Match object; span=(4, 7), match='run'> + + +# \d : decimal digit +print(re.search(r"r\dn", "run r4n")) # <_sre.SRE_Match object; span=(4, 7), match='r4n'> +# \D : any non-decimal digit +print(re.search(r"r\Dn", "run r4n")) # <_sre.SRE_Match object; span=(0, 3), match='run'> +# \s : any white space [\t\n\r\f\v] +print(re.search(r"r\sn", "r\nn r4n")) # <_sre.SRE_Match object; span=(0, 3), match='r\nn'> +# \S : opposite to \s, any non-white space +print(re.search(r"r\Sn", "r\nn r4n")) # <_sre.SRE_Match object; span=(4, 7), match='r4n'> +# \w : [a-zA-Z0-9_] +print(re.search(r"r\wn", "r\nn r4n")) # <_sre.SRE_Match object; span=(4, 7), match='r4n'> +# \W : opposite to \w +print(re.search(r"r\Wn", "r\nn r4n")) # <_sre.SRE_Match object; span=(0, 3), match='r\nn'> +# \b : empty string (only at the start or end of the word) +print(re.search(r"\bruns\b", "dog runs to cat")) # <_sre.SRE_Match object; span=(4, 8), match='runs'> +# \B : empty string (but not at the start or end of a word) +print(re.search(r"\B runs \B", "dog runs to cat")) # <_sre.SRE_Match object; span=(8, 14), match=' runs '> +# \\ : match \ +print(re.search(r"runs\\", "runs\ to me")) # <_sre.SRE_Match object; span=(0, 5), match='runs\\'> +# . : match anything (except \n) +print(re.search(r"r.n", "r[ns to me")) # <_sre.SRE_Match object; span=(0, 3), match='r[n'> +# ^ : match line beginning +print(re.search(r"^dog", "dog runs to cat")) # <_sre.SRE_Match object; span=(0, 3), match='dog'> +# $ : match line ending +print(re.search(r"cat$", "dog runs to cat")) # <_sre.SRE_Match object; span=(12, 15), match='cat'> +# ? : may or may not occur +print(re.search(r"Mon(day)?", "Monday")) # <_sre.SRE_Match object; span=(0, 6), match='Monday'> +print(re.search(r"Mon(day)?", "Mon")) # <_sre.SRE_Match object; span=(0, 3), match='Mon'> + + +# multi-line +string = """ +dog runs to cat. +I run to dog. +""" +print(re.search(r"^I", string)) # None +print(re.search(r"^I", string, flags=re.M)) # <_sre.SRE_Match object; span=(18, 19), match='I'> + + +# * : occur 0 or more times +print(re.search(r"ab*", "a")) # <_sre.SRE_Match object; span=(0, 1), match='a'> +print(re.search(r"ab*", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> + +# + : occur 1 or more times +print(re.search(r"ab+", "a")) # None +print(re.search(r"ab+", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> + +# {n, m} : occur n to m times +print(re.search(r"ab{2,10}", "a")) # None +print(re.search(r"ab{2,10}", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> + + +# group +match = re.search(r"(\d+), Date: (.+)", "ID: 021523, Date: Feb/12/2017") +print(match.group()) # 021523, Date: Feb/12/2017 +print(match.group(1)) # 021523 +print(match.group(2)) # Date: Feb/12/2017 + +# findall +print(re.findall(r"r[ua]n", "run ran ren")) # ['run', 'ran'] + +# | : or +print(re.findall(r"(run|ran)", "run ran ren")) # ['run', 'ran'] + + + From 4d6bdaabced6d115b1e073f501f76a9ec271a745 Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Wed, 29 Nov 2017 22:52:09 +1100 Subject: [PATCH 26/36] update --- basic/36_RegEx.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/basic/36_RegEx.py b/basic/36_RegEx.py index c9b535a..d116f17 100644 --- a/basic/36_RegEx.py +++ b/basic/36_RegEx.py @@ -75,8 +75,8 @@ print(re.search(r"ab+", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> # {n, m} : occur n to m times -print(re.search(r"ab{2,10}", "a")) # None -print(re.search(r"ab{2,10}", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> +print(re.search(r"ab{2,10}", "a")) # None +print(re.search(r"ab{2,10}", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'> # group @@ -85,6 +85,10 @@ print(match.group(1)) # 021523 print(match.group(2)) # Date: Feb/12/2017 +match = re.search(r"(?P \d+), Date: (?P .+)", "ID: 021523, Date: Feb/12/2017") +print(match.group('id')) # 021523 +print(match.group('date')) # Date: Feb/12/2017 + # findall print(re.findall(r"r[ua]n", "run ran ren")) # ['run', 'ran'] @@ -92,4 +96,9 @@ print(re.findall(r"(run|ran)", "run ran ren")) # ['run', 'ran'] +# compile +compiled_re = re.compile(r"r[ua]n") +print(compiled_re.search("dog ran to cat")) # <_sre.SRE_Match object; span=(4, 7), match='ran'> + + From 567cc961055f3b661f09600956353dbe1f265c02 Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Thu, 30 Nov 2017 10:38:25 +1100 Subject: [PATCH 27/36] update for new plt --- matplotlibTUT/plt9_tick_visibility.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/matplotlibTUT/plt9_tick_visibility.py b/matplotlibTUT/plt9_tick_visibility.py index c0ec70e..a43fffd 100644 --- a/matplotlibTUT/plt9_tick_visibility.py +++ b/matplotlibTUT/plt9_tick_visibility.py @@ -18,7 +18,7 @@ y = 0.1*x plt.figure() -plt.plot(x, y, linewidth=10) +plt.plot(x, y, linewidth=10, zorder=1) # set zorder for ordering the plot in plt 2.0.2 or higher plt.ylim(-2, 2) ax = plt.gca() ax.spines['right'].set_color('none') @@ -32,5 +32,6 @@ for label in ax.get_xticklabels() + ax.get_yticklabels(): label.set_fontsize(12) - label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.7)) + # set zorder for ordering the plot in plt 2.0.2 or higher + label.set_bbox(dict(facecolor='white', edgecolor='none', alpha=0.8, zorder=2)) plt.show() From 38bbda844ca13ae8d96e0cf6a8bc3f22a0123af3 Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Fri, 1 Dec 2017 00:18:15 +1100 Subject: [PATCH 28/36] update --- basic/36_RegEx.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/basic/36_RegEx.py b/basic/36_RegEx.py index d116f17..5eb0411 100644 --- a/basic/36_RegEx.py +++ b/basic/36_RegEx.py @@ -95,6 +95,12 @@ # | : or print(re.findall(r"(run|ran)", "run ran ren")) # ['run', 'ran'] +# re.sub() replace +print(re.sub(r"r[au]ns", "catches", "dog runs to cat")) # dog catches to cat + +# re.split() +print(re.split(r"[,;\.]", "a;b,c.d;e")) # ['a', 'b', 'c', 'd', 'e'] + # compile compiled_re = re.compile(r"r[ua]n") From 69215f32868d4391fe755b498f81f40316589aea Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Sat, 16 Dec 2017 11:21:28 +1100 Subject: [PATCH 29/36] update --- basic/36_regex.ipynb | 648 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 648 insertions(+) create mode 100644 basic/36_regex.ipynb diff --git a/basic/36_regex.ipynb b/basic/36_regex.ipynb new file mode 100644 index 0000000..52aa22f --- /dev/null +++ b/basic/36_regex.ipynb @@ -0,0 +1,648 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python 正则表达 RegEx" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 导入模块" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 简单 Python 匹配" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "False\n" + ] + } + ], + "source": [ + "# matching string\n", + "pattern1 = \"cat\"\n", + "pattern2 = \"bird\"\n", + "string = \"dog runs to cat\"\n", + "print(pattern1 in string) \n", + "print(pattern2 in string) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 用正则寻找配对" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(12, 15), match='cat'>\n", + "None\n" + ] + } + ], + "source": [ + "# regular expression\n", + "pattern1 = \"cat\"\n", + "pattern2 = \"bird\"\n", + "string = \"dog runs to cat\"\n", + "print(re.search(pattern1, string)) \n", + "print(re.search(pattern2, string)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 匹配多种可能 使用 []" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='run'>\n" + ] + } + ], + "source": [ + "# multiple patterns (\"run\" or \"ran\")\n", + "ptn = r\"r[au]n\" \n", + "print(re.search(ptn, \"dog runs to cat\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 匹配更多种可能" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(4, 7), match='run'>\n", + "<_sre.SRE_Match object; span=(4, 7), match='r2n'>\n", + "<_sre.SRE_Match object; span=(4, 7), match='run'>\n" + ] + } + ], + "source": [ + "# continue\n", + "print(re.search(r\"r[A-Z]n\", \"dog runs to cat\")) \n", + "print(re.search(r\"r[a-z]n\", \"dog runs to cat\")) \n", + "print(re.search(r\"r[0-9]n\", \"dog r2ns to cat\")) \n", + "print(re.search(r\"r[0-9a-z]n\", \"dog runs to cat\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 特殊种类匹配" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 数字" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='r4n'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='run'>\n" + ] + } + ], + "source": [ + "# \\d : decimal digit\n", + "print(re.search(r\"r\\dn\", \"run r4n\")) \n", + "# \\D : any non-decimal digit\n", + "print(re.search(r\"r\\Dn\", \"run r4n\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 空白" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 3), match='r\\nn'>\n", + "<_sre.SRE_Match object; span=(4, 7), match='r4n'>\n" + ] + } + ], + "source": [ + "# \\s : any white space [\\t\\n\\r\\f\\v]\n", + "print(re.search(r\"r\\sn\", \"r\\nn r4n\")) \n", + "# \\S : opposite to \\s, any non-white space\n", + "print(re.search(r\"r\\Sn\", \"r\\nn r4n\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 所有字母数字和\"_\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='r4n'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='r\\nn'>\n" + ] + } + ], + "source": [ + "# \\w : [a-zA-Z0-9_]\n", + "print(re.search(r\"r\\wn\", \"r\\nn r4n\")) \n", + "# \\W : opposite to \\w\n", + "print(re.search(r\"r\\Wn\", \"r\\nn r4n\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 空白字符" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 8), match='runs'>\n", + "<_sre.SRE_Match object; span=(5, 11), match=' runs '>\n" + ] + } + ], + "source": [ + "# \\b : empty string (only at the start or end of the word)\n", + "print(re.search(r\"\\bruns\\b\", \"dog runs to cat\")) \n", + "# \\B : empty string (but not at the start or end of a word)\n", + "print(re.search(r\"\\B runs \\B\", \"dog runs to cat\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 特殊字符 任意字符" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 5), match='runs\\\\'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='r[n'>\n" + ] + } + ], + "source": [ + "# \\\\ : match \\\n", + "print(re.search(r\"runs\\\\\", \"runs\\ to me\")) \n", + "# . : match anything (except \\n)\n", + "print(re.search(r\"r.n\", \"r[ns to me\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 句尾句首" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 3), match='dog'>\n", + "<_sre.SRE_Match object; span=(12, 15), match='cat'>\n" + ] + } + ], + "source": [ + "# ^ : match line beginning\n", + "print(re.search(r\"^dog\", \"dog runs to cat\")) \n", + "# $ : match line ending\n", + "print(re.search(r\"cat$\", \"dog runs to cat\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 是否" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 6), match='Monday'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='Mon'>\n" + ] + } + ], + "source": [ + "# ? : may or may not occur\n", + "print(re.search(r\"Mon(day)?\", \"Monday\")) \n", + "print(re.search(r\"Mon(day)?\", \"Mon\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 多行匹配" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(18, 19), match='I'>\n" + ] + } + ], + "source": [ + "# multi-line\n", + "string = \"\"\"\n", + "dog runs to cat.\n", + "I run to dog.\n", + "\"\"\"\n", + "print(re.search(r\"^I\", string)) \n", + "print(re.search(r\"^I\", string, flags=re.M)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 0或多次" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 1), match='a'>\n", + "<_sre.SRE_Match object; span=(0, 6), match='abbbbb'>\n" + ] + } + ], + "source": [ + "# * : occur 0 or more times\n", + "print(re.search(r\"ab*\", \"a\")) \n", + "print(re.search(r\"ab*\", \"abbbbb\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1或多次" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(0, 6), match='abbbbb'>\n" + ] + } + ], + "source": [ + "# + : occur 1 or more times\n", + "print(re.search(r\"ab+\", \"a\")) \n", + "print(re.search(r\"ab+\", \"abbbbb\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 可选次数" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(0, 6), match='abbbbb'>\n" + ] + } + ], + "source": [ + "# {n, m} : occur n to m times\n", + "print(re.search(r\"ab{2,10}\", \"a\")) \n", + "print(re.search(r\"ab{2,10}\", \"abbbbb\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## group 组" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "021523, Date: Feb/12/2017\n", + "021523\n", + "Feb/12/2017\n" + ] + } + ], + "source": [ + "# group\n", + "match = re.search(r\"(\\d+), Date: (.+)\", \"ID: 021523, Date: Feb/12/2017\")\n", + "print(match.group()) \n", + "print(match.group(1)) \n", + "print(match.group(2)) " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "021523\n", + "Feb/12/2017\n" + ] + } + ], + "source": [ + "match = re.search(r\"(?P \\d+), Date: (?P .+)\", \"ID: 021523, Date: Feb/12/2017\")\n", + "print(match.group('id')) \n", + "print(match.group('date')) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 寻找所有匹配 " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['run', 'ran']\n" + ] + } + ], + "source": [ + "# findall\n", + "print(re.findall(r\"r[ua]n\", \"run ran ren\")) " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['run', 'ran']\n" + ] + } + ], + "source": [ + "# | : or\n", + "print(re.findall(r\"(run|ran)\", \"run ran ren\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 替换" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dog catches to cat\n" + ] + } + ], + "source": [ + "# re.sub() replace\n", + "print(re.sub(r\"r[au]ns\", \"catches\", \"dog runs to cat\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 分裂" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'b', 'c', 'd', 'e']\n" + ] + } + ], + "source": [ + "# re.split()\n", + "print(re.split(r\"[,;\\.]\", \"a;b,c.d;e\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## compile" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='ran'>\n" + ] + } + ], + "source": [ + "# compile\n", + "compiled_re = re.compile(r\"r[ua]n\")\n", + "print(compiled_re.search(\"dog ran to cat\")) " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} From 7213be1e5e2d990e0e3fb4e95bc5308c0c67e2de Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Fri, 29 Dec 2017 17:13:12 +1100 Subject: [PATCH 30/36] update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0b699f3..9de2579 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ * [数据处理](https://morvanzhou.github.io/tutorials/data-manipulation/) * [Numpy & Pandas (处理数据)](https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/) * [Matplotlib (绘图)](https://morvanzhou.github.io/tutorials/data-manipulation/plt/) + * [爬虫](https://morvanzhou.github.io/tutorials/data-manipulation/scraping/) * [其他](https://morvanzhou.github.io/tutorials/others/) * [Git (版本管理)](https://morvanzhou.github.io/tutorials/others/git/) * [Linux 简易教学](https://morvanzhou.github.io/tutorials/others/linux-basic/) From 0475773beba9b047b441e3ad6c12a35d979e0878 Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Sat, 30 Dec 2017 16:50:45 +1100 Subject: [PATCH 31/36] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9de2579..1c64e70 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@
-我是 周沫凡, [莫烦Python](https://morvanzhou.github.io/about/) 只是谐音, 我喜欢制作, +我是 周沫凡, [莫烦Python](https://morvanzhou.github.io/) 只是谐音, 我喜欢制作, 分享所学的东西, 所以你能在这里找到很多有用的东西, 少走弯路. 你能在[这里](https://morvanzhou.github.io/about/)找到关于我的所有东西. ## 这个 Python tutorial 的一些内容: From 003611340ac29d561e6547e781ddde6973f8f4a8 Mon Sep 17 00:00:00 2001 From: Morvan ZhouDate: Thu, 8 Mar 2018 00:26:22 +1100 Subject: [PATCH 32/36] fix typo --- basic/36_RegEx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basic/36_RegEx.py b/basic/36_RegEx.py index 5eb0411..b68dd3a 100644 --- a/basic/36_RegEx.py +++ b/basic/36_RegEx.py @@ -17,7 +17,7 @@ # multiple patterns ("run" or "ran") -ptn = r"r[au]n" # start with "r" means regular expression +ptn = r"r[au]n" # start with "r" means raw string print(re.search(ptn, "dog runs to cat")) # <_sre.SRE_Match object; span=(4, 7), match='run'> From 37de6e0d0e9291085d0876971baefb7bab00ace2 Mon Sep 17 00:00:00 2001 From: Morvan Zhou Date: Fri, 9 Mar 2018 16:25:07 +1100 Subject: [PATCH 33/36] fix typo --- kerasTUT/6-CNN_example.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kerasTUT/6-CNN_example.py b/kerasTUT/6-CNN_example.py index fe59ae2..a2223ad 100644 --- a/kerasTUT/6-CNN_example.py +++ b/kerasTUT/6-CNN_example.py @@ -23,7 +23,7 @@ from keras.optimizers import Adam # download the mnist to the path '~/.keras/datasets/' if it is the first time to be called -# X shape (60,000 28x28), y shape (10,000, ) +# training X shape (60000, 28x28), Y shape (60000, ). test X shape (10000, 28x28), Y shape (10000, ) (X_train, y_train), (X_test, y_test) = mnist.load_data() # data pre-processing From 19081c81655c25022044b7a7fdcbf620c01149e9 Mon Sep 17 00:00:00 2001 From: morvanzhou Date: Thu, 29 Oct 2020 21:11:02 +0800 Subject: [PATCH 34/36] up --- README.md | 54 +- Reinforcement_learning_TUT/README.md | 2 +- .../36_regex-checkpoint.ipynb | 648 ++++++++++++++++++ kerasTUT/10-save.py | 2 +- kerasTUT/2-installation.py | 2 +- kerasTUT/3-backend.py | 2 +- kerasTUT/4-regressor_example.py | 2 +- kerasTUT/5-classifier_example.py | 2 +- kerasTUT/6-CNN_example.py | 2 +- kerasTUT/7-RNN_Classifier_example.py | 2 +- kerasTUT/8-RNN_LSTM_Regressor_example.py | 2 +- kerasTUT/9-Autoencoder_example.py | 2 +- kerasTUT/README.md | 20 +- matplotlibTUT/README.md | 58 +- pyTorch tutorial/README.md | 2 +- tensorflowTUT/README.md | 46 +- .../events.out.tfevents.1494075549.Morvan | Bin 0 -> 135292 bytes .../events.out.tfevents.1490697566.Morvan | Bin 0 -> 289151 bytes .../events.out.tfevents.1490697588.Morvan | Bin 0 -> 287104 bytes .../events.out.tfevents.1493818356.Morvan | Bin 0 -> 258988 bytes .../events.out.tfevents.1493818411.Morvan | Bin 0 -> 259456 bytes .../events.out.tfevents.1493818762.Morvan | Bin 0 -> 287104 bytes .../events.out.tfevents.1509756112.Morvan | Bin 0 -> 304158 bytes .../events.out.tfevents.1509756156.Morvan | Bin 0 -> 304278 bytes .../MNIST_data/t10k-images-idx3-ubyte.gz | Bin 0 -> 1648877 bytes .../MNIST_data/t10k-labels-idx1-ubyte.gz | Bin 0 -> 4542 bytes .../MNIST_data/train-images-idx3-ubyte.gz | Bin 0 -> 9912422 bytes .../MNIST_data/train-labels-idx1-ubyte.gz | Bin 0 -> 28881 bytes tensorflowTUT/tf21_autoencoder/full_code.py | 2 +- tensorflowTUT/tf22_scope/tf22_RNN_scope.py | 2 +- tensorflowTUT/tf22_scope/tf22_scope.py | 2 +- tensorflowTUT/tf23_BN/tf23_BN.py | 2 +- theanoTUT/README.md | 26 +- 33 files changed, 765 insertions(+), 117 deletions(-) create mode 100644 basic/.ipynb_checkpoints/36_regex-checkpoint.ipynb create mode 100644 tensorflowTUT/tf15_tensorboard/logs/events.out.tfevents.1494075549.Morvan create mode 100644 tensorflowTUT/tf20_RNN2.2/logs/events.out.tfevents.1490697566.Morvan create mode 100644 tensorflowTUT/tf20_RNN2.2/logs/events.out.tfevents.1490697588.Morvan create mode 100644 tensorflowTUT/tf20_RNN2.2/logs/events.out.tfevents.1493818356.Morvan create mode 100644 tensorflowTUT/tf20_RNN2.2/logs/events.out.tfevents.1493818411.Morvan create mode 100644 tensorflowTUT/tf20_RNN2.2/logs/events.out.tfevents.1493818762.Morvan create mode 100644 tensorflowTUT/tf20_RNN2.2/logs/events.out.tfevents.1509756112.Morvan create mode 100644 tensorflowTUT/tf20_RNN2.2/logs/events.out.tfevents.1509756156.Morvan create mode 100644 tensorflowTUT/tf20_RNN2/MNIST_data/t10k-images-idx3-ubyte.gz create mode 100644 tensorflowTUT/tf20_RNN2/MNIST_data/t10k-labels-idx1-ubyte.gz create mode 100644 tensorflowTUT/tf20_RNN2/MNIST_data/train-images-idx3-ubyte.gz create mode 100644 tensorflowTUT/tf20_RNN2/MNIST_data/train-labels-idx1-ubyte.gz diff --git a/README.md b/README.md index 1c64e70..2d5a776 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,41 @@
-我是 周沫凡, [莫烦Python](https://morvanzhou.github.io/) 只是谐音, 我喜欢制作, -分享所学的东西, 所以你能在这里找到很多有用的东西, 少走弯路. 你能在[这里](https://morvanzhou.github.io/about/)找到关于我的所有东西. +我是 周沫凡, [莫烦Python](https://mofanpy.com/) 只是谐音, 我喜欢制作, +分享所学的东西, 所以你能在这里找到很多有用的东西, 少走弯路. 你能在[这里](https://mofanpy.com/about/)找到关于我的所有东西. ## 这个 Python tutorial 的一些内容: -* [Python 基础](https://morvanzhou.github.io/tutorials/python-basic/) - * [基础](https://morvanzhou.github.io/tutorials/python-basic/basic/) - * [多线程 threading](https://morvanzhou.github.io/tutorials/python-basic/threading/) - * [多进程 multiprocessing](https://morvanzhou.github.io/tutorials/python-basic/multiprocessing/) - * [简单窗口 tkinter](https://morvanzhou.github.io/tutorials/python-basic/tkinter/) -* [机器学习](https://morvanzhou.github.io/tutorials/machine-learning/) - * [有趣的机器学习](https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/) - * [强化学习 (Reinforcement Learning)](https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/) - * [进化算法 (Evolutionary Algorithm) 如遗传算法等](https://morvanzhou.github.io/tutorials/machine-learning/evolutionary-algorithm/) - * [Tensorflow (神经网络)](https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/) - * [PyTorch (神经网络)](https://morvanzhou.github.io/tutorials/machine-learning/torch/) - * [Theano (神经网络)](https://morvanzhou.github.io/tutorials/machine-learning/theano/) - * [Keras (快速神经网络)](https://morvanzhou.github.io/tutorials/machine-learning/keras/) - * [Scikit-Learn (机器学习)](https://morvanzhou.github.io/tutorials/machine-learning/sklearn/) - * [机器学习实战](https://morvanzhou.github.io/tutorials/machine-learning/ML-practice/) -* [数据处理](https://morvanzhou.github.io/tutorials/data-manipulation/) - * [Numpy & Pandas (处理数据)](https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/) - * [Matplotlib (绘图)](https://morvanzhou.github.io/tutorials/data-manipulation/plt/) - * [爬虫](https://morvanzhou.github.io/tutorials/data-manipulation/scraping/) -* [其他](https://morvanzhou.github.io/tutorials/others/) - * [Git (版本管理)](https://morvanzhou.github.io/tutorials/others/git/) - * [Linux 简易教学](https://morvanzhou.github.io/tutorials/others/linux-basic/) +* [Python 基础](https://mofanpy.com/tutorials/python-basic/) + * [基础](https://mofanpy.com/tutorials/python-basic/basic/) + * [多线程 threading](https://mofanpy.com/tutorials/python-basic/threading/) + * [多进程 multiprocessing](https://mofanpy.com/tutorials/python-basic/multiprocessing/) + * [简单窗口 tkinter](https://mofanpy.com/tutorials/python-basic/tkinter/) +* [机器学习](https://mofanpy.com/tutorials/machine-learning/) + * [有趣的机器学习](https://mofanpy.com/tutorials/machine-learning/ML-intro/) + * [强化学习 (Reinforcement Learning)](https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/) + * [进化算法 (Evolutionary Algorithm) 如遗传算法等](https://mofanpy.com/tutorials/machine-learning/evolutionary-algorithm/) + * [Tensorflow (神经网络)](https://mofanpy.com/tutorials/machine-learning/tensorflow/) + * [PyTorch (神经网络)](https://mofanpy.com/tutorials/machine-learning/torch/) + * [Theano (神经网络)](https://mofanpy.com/tutorials/machine-learning/theano/) + * [Keras (快速神经网络)](https://mofanpy.com/tutorials/machine-learning/keras/) + * [Scikit-Learn (机器学习)](https://mofanpy.com/tutorials/machine-learning/sklearn/) + * [机器学习实战](https://mofanpy.com/tutorials/machine-learning/ML-practice/) +* [数据处理](https://mofanpy.com/tutorials/data-manipulation/) + * [Numpy & Pandas (处理数据)](https://mofanpy.com/tutorials/data-manipulation/np-pd/) + * [Matplotlib (绘图)](https://mofanpy.com/tutorials/data-manipulation/plt/) + * [爬虫](https://mofanpy.com/tutorials/data-manipulation/scraping/) +* [其他](https://mofanpy.com/tutorials/others/) + * [Git (版本管理)](https://mofanpy.com/tutorials/others/git/) + * [Linux 简易教学](https://mofanpy.com/tutorials/others/linux-basic/) ## 赞助和支持 这些 tutorial 都是我用业余时间写出来, 录成视频, 如果你觉得它对你很有帮助, 请你也分享给需要学习的朋友们. -如果你看好我的经验分享, 也请考虑适当的 [赞助打赏](https://morvanzhou.github.io/support/), 让我能继续分享更好的内容给大家. \ No newline at end of file +如果你看好我的经验分享, 也请考虑适当的 [赞助打赏](https://mofanpy.com/support/), 让我能继续分享更好的内容给大家. \ No newline at end of file diff --git a/Reinforcement_learning_TUT/README.md b/Reinforcement_learning_TUT/README.md index 38fccff..e08425e 100644 --- a/Reinforcement_learning_TUT/README.md +++ b/Reinforcement_learning_TUT/README.md @@ -31,7 +31,7 @@ diff --git a/basic/.ipynb_checkpoints/36_regex-checkpoint.ipynb b/basic/.ipynb_checkpoints/36_regex-checkpoint.ipynb new file mode 100644 index 0000000..984c91f --- /dev/null +++ b/basic/.ipynb_checkpoints/36_regex-checkpoint.ipynb @@ -0,0 +1,648 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python 正则表达 RegEx" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 导入模块" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 简单 Python 匹配" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "False\n" + ] + } + ], + "source": [ + "# matching string\n", + "pattern1 = \"cat\"\n", + "pattern2 = \"bird\"\n", + "string = \"dog runs to cat\"\n", + "print(pattern1 in string) \n", + "print(pattern2 in string) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 用正则寻找配对" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(12, 15), match='cat'>\n", + "None\n" + ] + } + ], + "source": [ + "# regular expression\n", + "pattern1 = \"cat\"\n", + "pattern2 = \"bird\"\n", + "string = \"dog runs to cat\"\n", + "print(re.search(pattern1, string)) \n", + "print(re.search(pattern2, string)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 匹配多种可能 使用 []" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='run'>\n" + ] + } + ], + "source": [ + "# multiple patterns (\"run\" or \"ran\")\n", + "ptn = r\"r[au]n\" \n", + "print(re.search(ptn, \"dog runs to cat\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 匹配更多种可能" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(4, 7), match='run'>\n", + "<_sre.SRE_Match object; span=(4, 7), match='r2n'>\n", + "<_sre.SRE_Match object; span=(4, 7), match='run'>\n" + ] + } + ], + "source": [ + "# continue\n", + "print(re.search(r\"r[A-Z]n\", \"dog runs to cat\")) \n", + "print(re.search(r\"r[a-z]n\", \"dog runs to cat\")) \n", + "print(re.search(r\"r[0-9]n\", \"dog r2ns to cat\")) \n", + "print(re.search(r\"r[0-9a-z]n\", \"dog runs to cat\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 特殊种类匹配" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 数字" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='r4n'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='run'>\n" + ] + } + ], + "source": [ + "# \\d : decimal digit\n", + "print(re.search(r\"r\\dn\", \"run r4n\")) \n", + "# \\D : any non-decimal digit\n", + "print(re.search(r\"r\\Dn\", \"run r4n\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 空白" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 3), match='r\\nn'>\n", + "<_sre.SRE_Match object; span=(4, 7), match='r4n'>\n" + ] + } + ], + "source": [ + "# \\s : any white space [\\t\\n\\r\\f\\v]\n", + "print(re.search(r\"r\\sn\", \"r\\nn r4n\")) \n", + "# \\S : opposite to \\s, any non-white space\n", + "print(re.search(r\"r\\Sn\", \"r\\nn r4n\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 所有字母数字和\"_\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='r4n'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='r\\nn'>\n" + ] + } + ], + "source": [ + "# \\w : [a-zA-Z0-9_]\n", + "print(re.search(r\"r\\wn\", \"r\\nn r4n\")) \n", + "# \\W : opposite to \\w\n", + "print(re.search(r\"r\\Wn\", \"r\\nn r4n\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 空白字符" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 8), match='runs'>\n", + "<_sre.SRE_Match object; span=(5, 11), match=' runs '>\n" + ] + } + ], + "source": [ + "# \\b : empty string (only at the start or end of the word)\n", + "print(re.search(r\"\\bruns\\b\", \"dog runs to cat\")) \n", + "# \\B : empty string (but not at the start or end of a word)\n", + "print(re.search(r\"\\B runs \\B\", \"dog runs to cat\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 特殊字符 任意字符" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 5), match='runs\\\\'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='r[n'>\n" + ] + } + ], + "source": [ + "# \\\\ : match \\\n", + "print(re.search(r\"runs\\\\\", \"runs\\ to me\")) \n", + "# . : match anything (except \\n)\n", + "print(re.search(r\"r.n\", \"r[ns to me\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 句尾句首" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 3), match='dog'>\n", + "<_sre.SRE_Match object; span=(12, 15), match='cat'>\n" + ] + } + ], + "source": [ + "# ^ : match line beginning\n", + "print(re.search(r\"^dog\", \"dog runs to cat\")) \n", + "# $ : match line ending\n", + "print(re.search(r\"cat$\", \"dog runs to cat\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 是否" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 6), match='Monday'>\n", + "<_sre.SRE_Match object; span=(0, 3), match='Mon'>\n" + ] + } + ], + "source": [ + "# ? : may or may not occur\n", + "print(re.search(r\"Mon(day)?\", \"Monday\")) \n", + "print(re.search(r\"Mon(day)?\", \"Mon\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 多行匹配" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(18, 19), match='I'>\n" + ] + } + ], + "source": [ + "# multi-line\n", + "string = \"\"\"\n", + "dog runs to cat.\n", + "I run to dog.\n", + "\"\"\"\n", + "print(re.search(r\"^I\", string)) \n", + "print(re.search(r\"^I\", string, flags=re.M)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 0或多次" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(0, 1), match='a'>\n", + "<_sre.SRE_Match object; span=(0, 6), match='abbbbb'>\n" + ] + } + ], + "source": [ + "# * : occur 0 or more times\n", + "print(re.search(r\"ab*\", \"a\")) \n", + "print(re.search(r\"ab*\", \"abbbbb\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1或多次" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(0, 6), match='abbbbb'>\n" + ] + } + ], + "source": [ + "# + : occur 1 or more times\n", + "print(re.search(r\"ab+\", \"a\")) \n", + "print(re.search(r\"ab+\", \"abbbbb\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 可选次数" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "<_sre.SRE_Match object; span=(0, 6), match='abbbbb'>\n" + ] + } + ], + "source": [ + "# {n, m} : occur n to m times\n", + "print(re.search(r\"ab{2,10}\", \"a\")) \n", + "print(re.search(r\"ab{2,10}\", \"abbbbb\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## group 组" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "021523, Date: Feb/12/2017\n", + "021523\n", + "Feb/12/2017\n" + ] + } + ], + "source": [ + "# group\n", + "match = re.search(r\"(\\d+), Date: (.+)\", \"ID: 021523, Date: Feb/12/2017\")\n", + "print(match.group()) \n", + "print(match.group(1)) \n", + "print(match.group(2)) " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "021523\n", + "Feb/12/2017\n" + ] + } + ], + "source": [ + "match = re.search(r\"(?P\\d+), Date: (?P .+)\", \"ID: 021523, Date: Feb/12/2017\")\n", + "print(match.group('id')) \n", + "print(match.group('date')) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 寻找所有匹配 " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['run', 'ran']\n" + ] + } + ], + "source": [ + "# findall\n", + "print(re.findall(r\"r[ua]n\", \"run ran ren\")) " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['run', 'ran']\n" + ] + } + ], + "source": [ + "# | : or\n", + "print(re.findall(r\"(run|ran)\", \"run ran ren\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 替换" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dog catches to cat\n" + ] + } + ], + "source": [ + "# re.sub() replace\n", + "print(re.sub(r\"r[au]ns\", \"catches\", \"dog runs to cat\")) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 分裂" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['a', 'b', 'c', 'd', 'e']\n" + ] + } + ], + "source": [ + "# re.split()\n", + "print(re.split(r\"[,;\\.]\", \"a;b,c.d;e\")) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## compile" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_sre.SRE_Match object; span=(4, 7), match='ran'>\n" + ] + } + ], + "source": [ + "# compile\n", + "compiled_re = re.compile(r\"r[ua]n\")\n", + "print(compiled_re.search(\"dog ran to cat\")) " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/kerasTUT/10-save.py b/kerasTUT/10-save.py index 8838296..ff2670f 100644 --- a/kerasTUT/10-save.py +++ b/kerasTUT/10-save.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/2-installation.py b/kerasTUT/2-installation.py index 7c8c921..51765ef 100644 --- a/kerasTUT/2-installation.py +++ b/kerasTUT/2-installation.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/3-backend.py b/kerasTUT/3-backend.py index 93a68e9..8e7ee00 100644 --- a/kerasTUT/3-backend.py +++ b/kerasTUT/3-backend.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/4-regressor_example.py b/kerasTUT/4-regressor_example.py index e41e2ad..2af1e03 100644 --- a/kerasTUT/4-regressor_example.py +++ b/kerasTUT/4-regressor_example.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/5-classifier_example.py b/kerasTUT/5-classifier_example.py index 20cecb3..9e744c6 100644 --- a/kerasTUT/5-classifier_example.py +++ b/kerasTUT/5-classifier_example.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/6-CNN_example.py b/kerasTUT/6-CNN_example.py index a2223ad..eda3ec8 100644 --- a/kerasTUT/6-CNN_example.py +++ b/kerasTUT/6-CNN_example.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/7-RNN_Classifier_example.py b/kerasTUT/7-RNN_Classifier_example.py index 92001df..368c357 100644 --- a/kerasTUT/7-RNN_Classifier_example.py +++ b/kerasTUT/7-RNN_Classifier_example.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/8-RNN_LSTM_Regressor_example.py b/kerasTUT/8-RNN_LSTM_Regressor_example.py index 0b6581d..83aee5e 100644 --- a/kerasTUT/8-RNN_LSTM_Regressor_example.py +++ b/kerasTUT/8-RNN_LSTM_Regressor_example.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/9-Autoencoder_example.py b/kerasTUT/9-Autoencoder_example.py index 2cf8cce..754c2bd 100644 --- a/kerasTUT/9-Autoencoder_example.py +++ b/kerasTUT/9-Autoencoder_example.py @@ -1,6 +1,6 @@ """ To know more or get code samples, please visit my website: -https://morvanzhou.github.io/tutorials/ +https://mofanpy.com/tutorials/ Or search: 莫烦Python Thank you for supporting! """ diff --git a/kerasTUT/README.md b/kerasTUT/README.md index 55f37c4..5ecff5e 100644 --- a/kerasTUT/README.md +++ b/kerasTUT/README.md @@ -2,19 +2,19 @@ In these tutorials for Tensorflow, we will build our first Neural Network and try to build some advanced Neural Network architectures developed recent years. -All methods mentioned below have their video and text tutorial in Chinese. Visit [莫烦 Python](https://morvanzhou.github.io/tutorials/) for more. +All methods mentioned below have their video and text tutorial in Chinese. Visit [莫烦 Python](https://mofanpy.com/) for more. If you speak Chinese, you can watch my [Youtube channel](https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg) as well. -* [Install](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/2-installation.py) -* [Backend (Tensorflow/Theano)](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/3-backend.py) +* [Install](kerasTUT/2-installation.py) +* [Backend (Tensorflow/Theano)](kerasTUT/3-backend.py) * Networks - * [Simple Regressor](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/4-regressor_example.py) - * [Simple Classifier](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/5-classifier_example.py) - * [CNN](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/6-CNN_example.py) - * [RNN classifier](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/7-RNN_Classifier_example.py) - * [RNN LSTM regressor](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/8-RNN_LSTM_Regressor_example.py) - * [Autoencoder](https://github.com/MorvanZhou/tutorials/blob/master/kerasTUT/9-Autoencoder_example.py) + * [Simple Regressor](kerasTUT/4-regressor_example.py) + * [Simple Classifier](kerasTUT/5-classifier_example.py) + * [CNN](kerasTUT/6-CNN_example.py) + * [RNN classifier](kerasTUT/7-RNN_Classifier_example.py) + * [RNN LSTM regressor](kerasTUT/8-RNN_LSTM_Regressor_example.py) + * [Autoencoder](kerasTUT/9-Autoencoder_example.py) # Donation @@ -31,7 +31,7 @@ If you speak Chinese, you can watch my [Youtube channel](https://www.youtube.com \ No newline at end of file diff --git a/matplotlibTUT/README.md b/matplotlibTUT/README.md index b260de2..1378d31 100644 --- a/matplotlibTUT/README.md +++ b/matplotlibTUT/README.md @@ -1,50 +1,50 @@ # Python Matplotlib methods and tutorials -All methods mentioned below have their video and text tutorial in Chinese. Visit [莫烦 Python](https://morvanzhou.github.io/tutorials/) for more. +All methods mentioned below have their video and text tutorial in Chinese. Visit [莫烦 Python](https://mofanpy.com/tutorials/) for more. -* [Install](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt2_install.py) -* [Basic usage](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt3_simple_plot.py) - * [Figure](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt4_figure.py) - * [Axis setting1](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt5_ax_setting1.py) - * [Axis setting2](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt6_ax_setting2.py) - * [Legend](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt7_legend.py) - * [Annotation](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt8_annotation.py) - * [Deal with Tick](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt9_tick_visibility.py) +* [Install](matplotlibTUT/plt2_install.py) +* [Basic usage](matplotlibTUT/plt3_simple_plot.py) + * [Figure](matplotlibTUT/plt4_figure.py) + * [Axis setting1](matplotlibTUT/plt5_ax_setting1.py) + * [Axis setting2](matplotlibTUT/plt6_ax_setting2.py) + * [Legend](matplotlibTUT/plt7_legend.py) + * [Annotation](matplotlibTUT/plt8_annotation.py) + * [Deal with Tick](matplotlibTUT/plt9_tick_visibility.py) * Drawing - * [Scatter](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt10_scatter.py) - * [Bar](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt11_bar.py) - * [Contours](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt12_contours.py) - * [Image](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt13_image.py) - * [3D plot](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt14_3d.py) + * [Scatter](matplotlibTUT/plt10_scatter.py) + * [Bar](matplotlibTUT/plt11_bar.py) + * [Contours](matplotlibTUT/plt12_contours.py) + * [Image](matplotlibTUT/plt13_image.py) + * [3D plot](matplotlibTUT/plt14_3d.py) * Subplots - * [Subplot1](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt15_subplot.py) - * [Grid Subplot](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt16_grid_subplot.py) - * [Plot in Plot](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt17_plot_in_plot.py) - * [Second y-axis](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt18_secondary_yaxis.py) + * [Subplot1](matplotlibTUT/plt15_subplot.py) + * [Grid Subplot](matplotlibTUT/plt16_grid_subplot.py) + * [Plot in Plot](matplotlibTUT/plt17_plot_in_plot.py) + * [Second y-axis](matplotlibTUT/plt18_secondary_yaxis.py) * Animation - * [Function Animation](https://github.com/MorvanZhou/tutorials/blob/master/matplotlibTUT/plt19_animation.py) + * [Function Animation](matplotlibTUT/plt19_animation.py) # Some plots from these tutorials: - + - + - + - + - + - + - + - + - + # Donation @@ -60,7 +60,7 @@ All methods mentioned below have their video and text tutorial in Chinese. Visit \ No newline at end of file diff --git a/pyTorch tutorial/README.md b/pyTorch tutorial/README.md index b26a2ce..0de04b9 100644 --- a/pyTorch tutorial/README.md +++ b/pyTorch tutorial/README.md @@ -31,7 +31,7 @@ diff --git a/tensorflowTUT/README.md b/tensorflowTUT/README.md index 934e55a..058fbe4 100644 --- a/tensorflowTUT/README.md +++ b/tensorflowTUT/README.md @@ -1,6 +1,6 @@ @@ -14,38 +14,38 @@ In these tutorials for Tensorflow, we will build our first Neural Network and try to build some advanced Neural Network architectures developed recent years. -All methods mentioned below have their video and text tutorial in Chinese. Visit [莫烦 Python](https://morvanzhou.github.io/tutorials/) for more. +All methods mentioned below have their video and text tutorial in Chinese. Visit [莫烦 Python](https://mofanpy.com/tutorials/) for more. If you speak Chinese, you can watch my [Youtube channel](https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg) as well. **As many requests about making these tutorials available in English, please find them in this playlist:** ([https://www.youtube.com/playlist?list=PLXO45tsB95cJHXaDKpbwr5fC_CCYylw1f](https://www.youtube.com/playlist?list=PLXO45tsB95cJHXaDKpbwr5fC_CCYylw1f)) * Tensorflow Basic - * [Basic example](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf5_example2/full_code.py) - * [Session](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tensorflow6_session.py) - * [Variable](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tensorflow7_variable.py) - * [Placeholder](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tensorflow8_feeds.py) + * [Basic example](tensorflowTUT/tf5_example2/full_code.py) + * [Session](tensorflowTUT/tensorflow6_session.py) + * [Variable](tensorflowTUT/tensorflow7_variable.py) + * [Placeholder](tensorflowTUT/tensorflow8_feeds.py) * Build your first NN - * [Adding layer](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tensorflow10_def_add_layer.py) - * [Build NN](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf11_build_network/full_code.py) - * [Visualize update](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf12_plot_result/full_code.py) + * [Adding layer](tensorflowTUT/tensorflow10_def_add_layer.py) + * [Build NN](tensorflowTUT/tf11_build_network/full_code.py) + * [Visualize update](tensorflowTUT/tf12_plot_result/full_code.py) * Tensorboard - * [Visualization 1](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf14_tensorboard/full_code.py) - * [Visualization 2](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf15_tensorboard/full_code.py) -* [Classification](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf16_classification/full_code.py) -* [Overfitting and dropout](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf17_dropout/full_code.py) -* [Save Network](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf19_saver.py) + * [Visualization 1](tensorflowTUT/tf14_tensorboard/full_code.py) + * [Visualization 2](tensorflowTUT/tf15_tensorboard/full_code.py) +* [Classification](tensorflowTUT/tf16_classification/full_code.py) +* [Overfitting and dropout](tensorflowTUT/tf17_dropout/full_code.py) +* [Save Network](tensorflowTUT/tf19_saver.py) * CNN - * [CNN layers](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf18_CNN2/full_code.py) - * [CNN training](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf18_CNN3/full_code.py) + * [CNN layers](tensorflowTUT/tf18_CNN2/full_code.py) + * [CNN training](tensorflowTUT/tf18_CNN3/full_code.py) * RNN - * [Classification](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf20_RNN2/full_code.py) - * [Regression](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf20_RNN2.2/full_code.py) -* [Autoencoder](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf21_autoencoder/full_code.py) + * [Classification](tensorflowTUT/tf20_RNN2/full_code.py) + * [Regression](tensorflowTUT/tf20_RNN2.2/full_code.py) +* [Autoencoder](tensorflowTUT/tf21_autoencoder/full_code.py) * Scope - * [Scope in TF](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf22_scope/tf22_scope.py) - * [Training Testing for RNN](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf22_scope/tf22_RNN_scope.py) -* [Batch Normalization](https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf23_BN/tf23_BN.py) + * [Scope in TF](tensorflowTUT/tf22_scope/tf22_scope.py) + * [Training Testing for RNN](tensorflowTUT/tf22_scope/tf22_RNN_scope.py) +* [Batch Normalization](tensorflowTUT/tf23_BN/tf23_BN.py) @@ -63,7 +63,7 @@ If you speak Chinese, you can watch my [Youtube channel](https://www.youtube.com diff --git a/tensorflowTUT/tf15_tensorboard/logs/events.out.tfevents.1494075549.Morvan b/tensorflowTUT/tf15_tensorboard/logs/events.out.tfevents.1494075549.Morvan new file mode 100644 index 0000000000000000000000000000000000000000..561ea24050bef5e66b2793a4265237ccdbbdf0b9 GIT binary patch literal 135292 zcmeHQ34B!5)qj()B#(Vq#E2LMup}x85fuaS21G v8Z zs)(Y|T17?cZj0K9yR|MTsAy5+zEmsLtt#qw-@E63XWp5)d2a%=T3&uXICJj1+q>Jj z=l{+ GTa z`B&dk=fsOVy*6Z?YId!fSKHW7U$S7j^CR48a&>H0<(!)8ipsj;pP5~!*EBYW2-EB5 z#A+++!@bR( l9(*2U&k)XbeeucmHpthz*2z5RhT^XeOlcQxD3k5xBThI@?-=jDdm ziTBHi%)p`xO4erqMgEq^85A2NrvTGUZat4?VUBvw~3$!Xkh zuS}r@K02h>G~3lzR#t>_`WnR@&Cpaad~%EXr?p9E(=5-kN1^y >SGMEX>s* zv#{0b&uy#@=N{fzU6B1-7WnA{yhO MARy&x_3!lV1dR^ Wp)*7N>xRyp;9iSb{XcPklC9@Evc)FRfO{nsSt~I zRl~ycSJ}2TGk=-3O0gO>#Aajd7>ZSD@YsQQ9mB@hU0GZ=>t|8vXkHjHThAukeL_`z zL(S~E*xV_NbLYnD7N!krcey2^$_1GlHraTZrB$q^Jt?=DRk8ZY`jXQt>uT!J0xsDQ z3MW?`xn6sX?iBeDGLPjY#VRUF7NVqdiSYDOPaWW=Nkir-W)Jr}h@9n$k?GwESfEpl zWJ7tplX*_a?B*_Q=6_*T5L=l(tQLGx;I%ABZ=|hS2qJ1B=xg=~_exy|XeiCptOIA6 zy?EW(D!}XRyL*a#)XF@=+|6CSn@d>%_QVP>aO?nQ1=z(M)y4T4tR2n8A+xniGR%Ij z$`)j7&1945rhZdWvP@ery|%ise)`Ok!($C%M-c8HX#v|U>y{ax`(`s)DItOy#HO^q zwnhk|m=F(+_)G@Pw1doFsF9Maq1Xw?$qliXd_ 88OdG|(G|L_6%k!I+d&c06_rWlXjKu>W#njv*(xHYqY|eI zdyOKZE0rlCx@ei+k`xhL64?jIfvT78&PyZ}5lx1viijpkiFg~@v1wxnRoH)>lp>PM zZd)oMviF!GlHR3BMI@yfe9s{jk(3Ceh$KVAnx6zB+PMFamD4IB$-<^-HXuq7Nr{?S z5lM;QyTkM U+)=Vf5mA9zDI%ey zBBC^0 UUf} R53^f&7uPp08|yx$va)u1Mb+GTM>C&lnog B3ztu@t+y<4T3@8o*8 z{jI2-{Xcbx{hBESW_}aRm`bnwv1V7N80SB+%Bs#OK (>ruyK?(U%5EsvJU%^VSD&WuhYZ8-2eebnUcA=htE#KR?d<;xGQUxJu>4G^ z#;dN0=9_!+!kqrKN6~b<*-DP8bktk-=g+O4kK!}i?*0l6ccdB=WNem#tm@zDf}t9# zv)N&)^V0U5H>=G-9yO&w<&fmmOO8+d*WgfbS2ItDrs?$IJJ Tfh4-2>7CT&&av%IpcpYZcM z2Z3w;XPzHftm*f94}-~dH5K7@_Wz#4fSTQN7|2B hj>)}@YsT?xng&uKKq3sxAMn!6mrY3 zcS4#4-YvF%@4f0$Vd0MSqrhL&7WjS%tTNgrGOr1lKl5mkldEfL>ME+{hx5kUzs6O~ zFYsD5eN7a4Y417;c+soC17r0K;db`_1%6-09!gW{W=R_sU5|=5 !?+$IK zYpk?eN{G=|wV#G^1dE@SLo4~)4GZazIa9IIlRFJ(m4awU-JT~4(o52uG)Y=vMlz0~ zWO-GmtF2)Al*;ipr7jAY16nUeAT?6yZAHl_@KIH?LT+oD81r(^`pgw#Lr$B+h3N3E z{I;uGjb@!r_K3YZ_mT`*Xnm)cMXmRZ0M=($mee=I>KY)9(no?X6T4htP~oevipuJS zn7%NdEBQ0J^+&a(^J?Mt;`7h!$^u_CbDF_VZ~M#6c~O^eY-RSEIx(o;$JTyIq|GI5 z9MXHrXXA-)_#X2uMd8XU|5UZGwaP62RJ3I6{Y~R@bId(jAG+ff3VXS#SyO}o*sM9> zE-qFh3{`EMvEeoK#X8}YkKD!kXiI;1i89|5KPCxl%p9{yvlCEnvhDUpcj ;ZV@B@2_|!;cnbYPWPMXWx4zl|pu_$G}h9Dz!Gd@9}J0Qu349zL#oC` Z%)!hsK3nvWRS z6#YWT+&klNRArB?tBF<25=z#=gz=846UcP$jKLalrt)fS-E&8pJ`7EnTU?d~85f%U z*{1-;nvd#s>B(a7ox;}ym_DqaE$!smohkTJgMo`hG7aqclWtvC?~%5yXI3~=e6bAr z>L&k-qIxg)%Klf~4m!0e_Kde{ ;|9Lj8(8blz z4(Y|EDNgxh1~pWX)bXMP6@c&2^>+O-i%^xRGeboU{eE4 U%(YK&5IXn0TmjbV?AkXe$}9QOG{_7y*a)R#8isqv(BMY21yk-=w+ z1ASRm#NG=?aNl(n#&u3IJM-kPL#E}w5*ekxZc~tLD;H$n8ff^oZ5BQWnS1$vcOkB% z%xd#wD%jeV-fDTaDXSqz3rJGVWY<~+*$#lMmOh_lH??h ^5u5MD;RI)NCf#gv@gPEzHF%?JdgErL$M_6b#QkjgT$( AE2A z*z{KxBLjyBUADX1paohvRWFZ*sHH8 v_a(`=Kdh3ZHD9n}8KgZfj!!TiMS=}gCK>L@C zXomCft6 @zm)_R~W%*1@M9 znlY^nGH2FrGDo)!W&G-)DVrBJ3i`HA56xU=QV-3d4>K#C84JkRhuc%}%vcNGif6{u zq93)2XXXUb mf87B$b3_$c&64m z{gqP`PuL8Qug8LI& z=w?WV7jX&(>45rhDpA>c&(G@a8>< z)B9SdG__uhtyly@{&i1X9pqc+bx&P7T@$)i!pyp-E=y|AVcV`5y_Q4Yx~Er_Z8xA& zb%(XgxXSuj;$UP+b!Dt>o^We8y-s)^gqDlYK+ tJ6xx z)YeunWRb(YGKHr5JA_>WOYVNHg3PdmuF>>EC*ARaay{zlwNvlsB&99PyK_w1IP*7h zw;p`PWz%@vO`N~B%M5#`ww X}t&X~s z#Qs_?^QcSzIxi8EZ9eM!`~C4b>QbCDWYKusCy2kc%RK5*+iv@gx{%&AVzL>`Kjz># zIGe4s%{Y*-UiP%aJ(uBiI`c|cFxFQltu6=!ekzhOzB8^WzABPzoQ!#xpNGuw;gxmb z?2Yrk(3)+Rt>Mn8TtVv|Ukh4u2&s16BxT6^2W6RjMRE>8O;1^>%F|QXrs@k4g(6EI z&JM(v75g|t$4E|IpJR{x`1Bi3u^o3C#u~F*r~JQ;TIhIMKlI9%LgxFu!_W0L_cv|N z&EXDaXhB3cv=(%spap`SE@-5{_Hy0MJ~3Y2&FoUvsb?ssU5EC$`FY`vW;|qO6q(^p zX72o0ok$)Jg~F!UK2}{jCuZj^emf_1>=HyI@mexcWY=UdVY7Q#*HBJ=Zo3}sJLH8s zb?(wLvXgr$Z#T21rn 52`l2!+g}%*=MbqFr+8OGUxXk70HVL`a<-;{32fBE41l1>!7wxp4bXmXn)rjxe1g zoMBPD1rg_PW`X#*FyfrSjC7{+noe)noO3eM;Y3OaHWzd=JIJ? 6=?D#*!#V?4j)L6P)O^4s-3fRAIkHXM3#WR?TY| z5-JU)G^#n=bR0;8^F&(VkECy|-SetPL>^Q}kw>yC%+aPgVVm7}?BNVZb3aNijv8vy z_f#!kF1+NIwad*9<(N~ ^`r_i}~bk-i r>tyDab#xj{w6~b$ zwpp)vpqYB3Mf!|&PtZs&IG~sJSriBlF@0qR*r&{Y6dfQAsAs%W!LD4rjXB$+IK#>$ zFH^7=kOFZXLZrKh?c9x^LWH}93ddWC)9K|M&Gu!vqB$cyl1)r&=MvE$Gfa5`RSbak z&iPU~_-wYiYHn3Sl9fV84$ZD=Xga(Q2o9A(&lzXVLSc`5^8gbk+tKSb^%j`4K#egS z55=NFc_&xK8XD^=okgX)*(oMGQO%Fp-l*)5NZ;i9u~lV?sXo$*l{$YmoDGRoJX`U2 zW^C3eV(F;$$n*sJwVaN!S38muB10iNWcQJa8uv6#uH2%{;KU|e8xjfXSvj`I9>Eg^b7Yq8!|$2o|wWtKgJwh14xI$+Z~z)N>~9W7>|-5It=O=oWzU zLw35ksWtzvt(mjzQ7&Bjq)4XlPG-LHu@g!0x1;U${w}XP>0MuMrrgFM76505CTFzR z8AiI&@Cwr?V+)_Cj{P}C-rmunzM)P)Mg_t
3Maow;-*!u`OoEGr#GRkP#X^z1;9{YW?fXF9 z{h9oZB*5R~1uZ3+w&=mdLiQE9&MmWk>;Rpw*1^R>;){TNeWd(`pW=Z$6kIH%j;rad zr?N18zzwI#DNUbw@l`%$8xmYB gTr89nyqa4I%pL7wA=k;;Wb^1xw1 )EI}qMEVx)GtBZv+>c93X4Kuh{sGjYbf{TT`L}YNW5ci-fj!9$TZ|z#h^vgkm zi-mmOX_M|^sHVQYMBR9j(QDsUdtUr6UM!?p%Kd(_G=qzUghL@(+|?+tb>pAH#X?)# z`N73P6;&C!UwXCKDi>nG#X`w%+r`1fLM{`u;9{XR-9i{#EaV8P44X ;9cHW is*Xrb~B#>*3!yHL<6ALFE<>2L-mB^{bhF?aq(# zVxcrc-xR0S`jH?HXSmV^7Yn&>bxlWJxKv9Y+d8krse?K-m3|WY1U!O^h3xNo`eyW+ z0lu9(>v|CWsDq1zk{8a)Hc1L3y%}aYG_1YvHlwrSDRO@Y`#il`8eA-7w^V(&(ClB{ z#kGxMtQlM^RNYuVU3iedEn08{rxcdVdT8eH*_MliG|Gx!iC_j73niB#-izLfr>-B{ zcCnDAFZE){R%=XCt9WLt9T$JCE1ns%@K8KkOA}ly)as44tu>uq@ywV?_H+7;Os?xR zGH+Wm=BHFSo#L4>6(4O$Iqxy5{VSds%T=}2E1s$8Qn%Uiw};}HnpiCxx+YgH&bPhd znc>*wkM&|9m;M+Nmm>MnJ)I>kUAs0+?WMM tcSG*`^XhI3`e=AdP zu~4cHge)4aJM%R&&EMrX!No$t(j?6%h`+WAE*5H_tKWRx=i{*;1Q!d*yNZ(Y-#w$Z z_F^GiAf)qYX *-TI->ZnFyJ1?TNN>H >@Q~>wEx<~ZNmotGk$T4)os@kt8du 2)SmBk}EzistttogRK z%exlkZ_PU7vEJ<;`qWxG`J!Q0FZs;c+j_s>AAj+MCG8$Q`DOWvkgPZU-)!L*(Wsl} z&$l0MUK27~yB4l^QONFv=1mvhV>!KW)}s5}y>NeI%O_UR{a(2D^^5mf)R-1EZn9B^xZgRC+Mqj8@P=VNVw%!p)-XArhn3KLF22dMD;3}S zXd^0zM(qt^XvBYe=IP6qM2lvXtUP?kS7%4d;_XpZj}P}+bophc9?)*tQ++oNj9TqG zzH!%p2gg{OF1vb4eTQk*_02QKzBA=GD_;HK fPTGRWJYEHJg zPd@YV-`_IFdi}Z=hs+*)iuL8B-CCw?nrn?5(PPQ1>RPLD+QK*2cdxVN^xSRX5wF)< zyU%>#Dsxk#RlM7g6aLU?fz`X_!e{rXKi&FU&%2(S+V@PW&*(n+zcb?2JFk9!{sAi& zS#LFef9R_xo@4E`;r8|yO+3%4tm;1HnYoLtfj8_i 7uOx1OH8 z_`c<*t+uxO<&D{!Ke)*{ |c^>EdM+pJp`|9sGx4{o=vKf_r4_?>rJ zUcElx?lmuUy)R*{zjVaXTk9XR&bCI6s4sii>b7v)pm%nC)cWek!@B;W{Bdh(^v~TQ z7yZ?0|M+1&tX-b6K0bc^^hZB@#=5f8q6c>iJ!jEWwP@;EG?guy+Sau9t3FH2{JZtd zJI4=RzuRk;*AyC;@K97O0m&ig48_kcreThOX)xaJl*cqdd>vK!Q#pu-aO4BZ!+TLW zK0OiMm!9_{its|>@jOC2!gnVgbO`Z#5* %ZTnrbOh0Iq9Y}Zk0BZ*dLTU? z&*-7VPb7MTq;aAK;vYic6hBV!qmyNL^O2H9i5e7+eBy`Ga|%a1gd3>GVKSaENzyo# zYtVZccyF{9r)WR4yI4kl2a&7xQP>`l1TOx}5xLE$t@)QDa*c!I|8_6-E8b~*!74iS zrO#eJ|C(K+WlbRxc?lAMX(E^ASAs-lf<$P7){6wK9|^t=@Ocf9i}}h$E}xHT-ZgoM zUNsL4`3D}9f{pFR+c%I(5uAB9TO4!tLF;yXP)cC?2knD4TlPLEYKIgVi_Yr3?1*Jn zSzo@^scP%*E?F*`>$NIPEPtBzm`dhDvX)vv*;WuR89`@y$g) z40!T}ZujpKEnC+fT}- 1 zNZZxX#w2YBl1NLCh)a;jOOOamkVs6Bh)j^kOppjokVs9Ch)s~lO^^sqkVsCDh)$5m zPLK#skVsFE$WPD~AVFJ%1Z^1-w3SHE)*?Y$k_2s061^HXt$8#$B60Vk!K;qxyl-OE zxWi^$_Rpzmi{rIL;aiX$b<3fq%{sMvl=B9nYfx135uymkQVh|Br5GZvn59ELNDm58 z3JQ^mB^`Ws$`3S;c>WyWoEj9LQ?=yLbMSttfj{K0;gKI6Z*N|`CkkZsL;0YHrg#=# z<>wKOc1L{Vhj7j#9-e2*V?1CS?4#;ub~lrkaQ8m{-19~+sOxn?p{+}azdyZj<{$DW z?;Ce?_3mZG%Oc6G!>|&Kwl230@mucO;>d}nr6>OjQc7y;O$Q$HMWU$szK@nK|Fh86 zo6@v(udM`a<&_+P)($zr*L$u4_}${GdEeHpgKR}(yKNaTPK4Y(C%1L&U1BK4{EoNE zUKusy1$VFPIe3N8-k)q5xN+4X&sYLO;nI&wJ+A0-Mbb+l( z{@a?z>`U)m^AYTx((#E-4n9%U(S=VKC3)B1b$+zywKK Z!Vi?ozgVyq;Kkvu;v|hMf}o LDH(byq*QY%3jpPt^CdebpqL?U>ZtLl& z%g-wu&p}a3@SvFP;2}&o58;e(@JJ8g3ySB+51Tt|>NsCW?TAfcgm`QwhY*iVCh(C` z3Wv}KUI03Zo*zIoDrtNyQNl^$z&%E@c)(RCp29~Cru4u`2*&{aVGu47KT5`n9xZ7z zQG@ZoN17*7`N$9W3*jliVGMc?1Nacy2NdlDihdBnRDF`r;v-U=&RBlPCyqERyfo)q zw>X`8*xGNbBJ1tj&e^B5zx_#qe}bS*h{8djB=b)b94FP`o*Wn9pCC9s=_yVzjt%;2 zE8o_1q91(WA *_q+=a*|_nMjuV=To;2s~^vM$=qh&4aIrN1t=lj_J7jZsaC|m@12;mP2 z`UH}oPbCT$p-(Ug`Xr-p5Zc-#&YipemI<3qu&@Q $))l)tCqqo^@a@I-n4ARX@~@SO5-fbju}@l;6VA)KcZBFTl9 z958jlsKxKxaZzD+S?|9L{`kB6mOajvcu7U^vO?c@$&8$9C0^3}=xBzQZ0`TMz)QNG zc*g^~zqC#85^n9laq=AjFS*16FOeu#%ktkfOT6Utq8Hs8yf=S-;y ^jt@CpqMtq4z$=J0PquFtyVqDr2bU#3LQg2SSm@2hS z;5Y@@TcqI>Q)T|qV LH4>j_>bn=mCtg1CJFDpGEz|$d@pOStEcJ~~aFa=Hufbt^*lFOS zi*H VZ4IkVYa+M?V5dhe|SXnh3RKIdj{u+3y*L@ij4j1o_%%a-U5%H59~^j zRcneKkGKV27}D%BE|GY|V_}I$%y@kG1{WT2|A0eI6L`c`_a+{wtF)qJw*`2FG<|Hd zod$3S*lBQkjEXfUj$3u?0TxV5`6n8VH^2l`XX3e|ns%ybaT~)IF!doSu!I8I#u5q& zQ52yi03r$$B2GtpQ97<)>Ub MYw@K$`>r+fqI4e&5!59dB5c$ z9;hxKJl9dw8_&UeQM5lO`VHy8qn|nD;{vz=Xe27%sE{bf3+_BTH0qJ&Bjz7Lc)_=m z+O5t%d&IdCFSs;R-0UAPXu9zN2^h5OUBUo^r(W* zT*2ZSF|~>=kb@NeV-kUSg=6yYc;38uE;cV|<`Ew{>ivwO#P=@s{@F8Eek6`> z)E@9~c%P->_(qcw08sDGtr}N6@sXEDA9Ta*v5%*18vTD&`^NYGpue?z%DElJ8w1kJ zCHk8WeS7gW2U{E#033jC0~`(rj(G&fJX$;Ep=MWdh&mHuGlv6o(~M6azwwX`GR!ZJ z{6Uc((;HOx9N~xu*$E!96Fi il7b;qj1pS#P3TKdqEtR z0EOB;mf~q(0hm3g<0BM5PVfPq AU0onub0on-^?Ux07U_AJ&gb$+U9Kqm&=BclJZxwwxXH{w4O|8NQ{2MplN_a`F z9S%N--+0t-ogIYp!v!BWAw|aX!#01ndZ>U8_;~@f2I=90ry+sU;Db9I_@HI{iSl?y z^PKM3zsTbqPrN#5k$?~Sv}=0rvyM^QQZYE*;hdms^YIQ2AK;h=P$3Q{aPtPfW#K1M zx%mQ4lJXOyJK70RHBFeMqJbrnL SaWghRw39HLN1xyUrA z+%{8#{wN=aZcY)+E1bvsPxGiB%2n-xfGB=Qiuj=FDaAuLDDvYx!gUn=iRa*Xe? z0u WfkVCoD;W6F5A;tpxxN zaIX*?F5t2_@D34phsfj|Ld~A!P;{n8;U&6hLbFFdEhqw|*Tq9PD5f8!PBTe_3`2ZS zqyw*H6P1tWka^%C^AOH?$UuaH2aQnvg+#GOgBpyz9IOn6Q#@{6FoMECaSDRq0jT}P zSc*s11yK9r6DXYE0K|*y;!TwC;pIV{W;lxSnJOvZ0pnN-Cz!yPLg``MfbtKec(5*j z^#M+6pdA1YpncF@*wbbK4@5V-OQ#=tp32~X;>BSjTC`{Vx_%$OxK;3gmvP$;2M^3R zY3lEs9f0%01rInOMbVr3tr}i4O27l$&45~K^zgtcEj)0J^!{+-3vbHL8@)!o 6mQ#o#q=zU34^ajR(Wj$%R1T=2;SmlB zQ4FdJ$8%5ve^d@wq}TCC4~lr(ir3}i6^`d#6z_+4;5p^}famBxJO|Gy#sk7JE;ucu z_6J42T-`sl?B OVh07+47eRsz1P z1d>D58M5Pa>V9&1$f50*&o&<7>nJ7`rZXtwg9nAo!gKJTkb#^>I4Jf?kdcs~2#4B= z=TL7E59%#wX;i*R8By% HdKH@3Lo?|Hk#bX{H&p{FIe}%_;fa3ko4hRSJ3deI$^ecE!gzG5A2d5ZM zg;7~kPVt<>506b;Ida{zW9PcyhgUBAwS*tm vi@hwOxmL_CB8jzBuTrvs0#@ldz1C**Jh_J$+qeROaHd@y29i9-VuC>_*)I^@9N z2pl#rCQ^J4I08No;>XJP%~K^+aK(7ahssYoyny-uRzZ89eb6p|DFE+?W!SH8#-?!{ zHcKph^-=~$tXZ)^z!5#a>iza%J$7r&H)C7j2(A;f8HU*2Uo }h?xTmSjJ`iBV03Qf|AqX~5z8T4VQUZq<$eO{zc}?zKDS#i^cI}m#HXMGy)Gn1v zGmvNl24WCh5&7JJhy%qE4ABP4MIb~W!m-47@rb9TSd*xJDjp9f9`6f^Xy8G4_)ne3 zdx7G8bnS(BpekOJQfjDIf8seP#sw(G4=Bc0A(h7|haXl>T{`m0=t(mcb(i&Qd^Gk! z{@>?aB;kkGa*F@u-}=FLa6bt@G}Uxr@WX~nJ`>It<45({XG(_vexM=Y5H(;Z5Im=% z >>b}R~5=}MT7(h|GwE%^Z zb~MY9(@6$E@kh9hVv-_0cpe|&s@$jyK{`-KO{7PBghPsgA{}^0Q-njBMyNbUUGPx6 zIW49504P9V3kwRniBS|EP8tDBfD%BVjz>(O_^^XuUKrv4GKd;D)-Xw?gLehvD9JZ- zdkH!=0jG@0y8;6!l=lYY4}c;{^+P+LeK 3lBTTDVjQe@`h8oG4tPUfMUfDS6(OpiZ$m~K7H&a0Z=^Ao}0w%=$B}EU7pFk zD{w%9F276wn4oVli9N 11?; |bG}mupfW+!vpT2Gttvca~nty&J0Eu`SAfYpa$QFozK?K||Xn}}0 z10s^cR8Ai?t!Ossc!YCG$&|%KI&Xfi^~dmv^v7`bVmAQs>>;c21ORdQ>CgP@g82e~ zSfNA%EF?Z`y!5pFIt{n@EtonB2^`$;YY`C~*a!}6_&TtW9GcF+|Ah{Cz_dx99uyMA z6G?e|zta}!I7NCM4j#KB@Q4p72_6&x0-hs1ct}fxg9nY!`(n2S9-o^)vD*W{P)h0c zCW_lD0XV=i0>A?-32;CIfCCOjkiri@0hSKx00)2x#G~D49Do1=9GZ`m^#b4kiwO8@ zh)$KyVG*G|w;|s{>Ag6G{|U4M+JyrSXzwflhv@0uB;XKVc@YB~M*ney034=%b-~m- z1_ywHk@BbJ35Dr-e}F^boc*tLRDS1&3vh5kilR;DNB{lc)a?T}7$r{=;Be2_mt6-k z`ra5?E&zwT<~#nd?27jmI2_WW@-CNdwu2ml8|{$U_-D)wmp4q&t#cdrB-jK^MKfJ0%? zWv^L9>kfM1y3>w-A;STTr)Mv|Z~1AfE#MB@4QF5nFw`VrZ9uH@BZoFYICxMVp3Zyv zhlq}!>4q1gXPo=R;%Lz~z3+T|uj4cNhuHapo8Nxr*E?IVM%2L#?K{44*MJAdsM{oP zAOmm%>>jv(2wW}+nI6Cm0o>pVZeac)v~UBTCVr=rE}mC7e~#&oa89wOK|D|%4>A+a z!Gj_n@Q|V4xh%!=NL02EWGi?MJ7DjJ0~nw>_yM;{KwSp~{4iFQt6Yc^tbl_Sak4K^ z6m}034|`J_oG?7#2l#{F@Ph$+2xdotd=-Vg1KvXiKLCb6`(^<@G!^xb@I%uF+&{#` zGfoolL#G!{9(~Hswh8<|&W|lRo|yJga)&*T(b92G2|qYLT=0VvQWR~O^40~v-%jwu zjEC )*5I`PN^ zH_Z&-hqfKS@Pr>|3B}TDV9A9DDwLul?EnTu9H&@{K_L=Bxkv>M3egH46e1ctD8l_x zgZ_AY9{y9~@jkrXJRI$Yc;FEa6ybg;`VAEQ&3Qg9Fn$n@tr2KpRMr#}`Eq-Q;@a~@ z?%Oi`vfaqu;rau+4a|RI#w8Md_&m3GsegNi!gV{5|Az;^|CDfPa(uX8)MEmEIIH~M zXZA3*iM<1TK~KQ$VMnlc@CQE_yW~A54`6hDhQSZNxTES-tLV*vLk9O=Yr_u&!Y24R z3=TuU{{x33xLZn?H{dpLt(gOZA24}9G0C(%4Q|9!lZ^tj=?wF2t#!kbj&(!f(x?l5 zh@U?6inj&)aNEoIW1hAI{IE35x`D$A+$WRH-veL;F0%ue;j4$MCfsK6(Uz_E5k4CE zC3RfApjqJi(*!rEB9knOZd9}SG}e4u+vQ!0t0`WdaJ}5yr5&e84oPSH$8}Z>m@c~M z;T5iX&hte)P)twopa_So14THekYS*R4;hGX@Su>DpoLLc;|Njk98MTQ&jBNp5xv1hOK)o>B)p;P?b?pTO}6STn$CA$qhdubGZd zARN{Vh7P8ndI07yM#+2(zzJv 8ir-ub0~6KX&I{p60j z2XKOs@~7qxh3R>J)(r6*9+Sr>oF6VY!3ilc&Rsa?u|yk>PduPKKJk0!_(XKZ3W5`Q zJ?MrLnyjYF1e|csDP2B(vzLGq{uCUacw$u3n5(bQS~0+n1FRT0d;m9+fDy>RGC^NF z65QaD;#+_b2!^m=#h|;D0&XOCv`Z a8I7Ga|!4e*b|NBo29++_CxJ_2kTSw2?I7VC> zEsjHQeBil~js1&9UvB{);MY|6)!4XZro{=`dK@CzDzcq9ucjO8t@K{;1Pq#gHoyfK zH1BftN6!nuVDG=Zam3eyGXe(OK7j)U+#dt?zrdw52N1Y@0v(dHxN~UQ1z23l!&VVa zqq)?_VM(%)w7hl!JNg|}_?Ylx1q^)KC8SS}%+m|g4U|te&Z~G-0Hm3U7j>6|_)1E# z=ST;shy1`J9S?_81TCa|!2?{!?hG_S@k)u}Ff4cg1^oEK2#P;x0rYU z25A2*0E5CWyG#3n=&Jb)Fj#Q>RRS=$tGTZK _< z44jZ6W8t!IR~&g%+m1gxtpyD3bO3`HA1{!ALCe+ex&edI-n(2O00X0D|JN?xRR9Lf z0boFYf!FZ|4jgbtko+DBx-tv)1_}O+gN{j9*kbT4gx8iK01oVf51;(9yqN(95IGZR zDFtwVB^Dx!Q;0B7h(b_^L>+}l#dGjp6iW@LijTF3-UBRuj&z`i_fzF{_2%Kc9l#?V zD8jR)=tqcPP=sS#aEkE*T1fqetx<${ ;rxY0v!jiZ25I0h7k27&x5z2M~6 6e~+Cr;yMdJ0?s*bAmREmT6gge0|R{0{V@Xw8?+V& zYo$Mhf46r52=QH74tqoZ2vhEjZ8)&I01%ca5deP* 8tm&W`+0|yLX zaS+@r(fY8v@wy=cF5h^+HQ??wFLk{yVR5$}d|2`e?qJCLleIKR4n=24S _A4Q0yDx8ABgF#R8f|WcomQF2 I1+4787{iAygkwv{xR5X8{<@*hqkZall*#805UXRsaUSS^eF*M|KSW z10&@R^9n(F-XCCK99JiAkZ^vu00Sqa$mm|O?_2M+@dgPm3xoLXhe^O-#+Dwhxcnuw zm{+Y3fWcqlOAr5YKwx3u!(Rdi3g9OJfB^>z=vzdBwipS1){=jd2!Mh%`bXdv22jih z^Hp~SLj>VDrx0D7LKJ#YgO+H-1Mfw##DF3`cpc?S6yo^}=kfmAyx;nxeNbQUNDqqe zY$^H=A{P|ld *!oWcfItl*@dE>gQ{MnV%hwwuK+yc| zZy7)keRaVrR?)@l-#c#VA2R|3 qlE?*HU{!bbw*JT+w`w00>IEHvePJckyUhJPjaNKIPmF 4fLtkq;=O zpyH8$@_|%BdQOoJ(u_+(gd-o&LdqXBLi`X$q38k#03A;8K;b}f1cl@HDLw}Q7#K^> z$4RObep1YF)WE 5)TUkSSF}^0SEvn0Pp}n z02UJfQi^512HFYznFS!w{BHsT3NM(&0D+s{d|m(oU;m@?ll}SzfPj(mhjEV}J?{?? zXzBUKtDT*h^TP!QI3Y!a$IhGe`AJ8#?Mg{6K%n{c{Rt2_YacftFz7UEr2qtOThgmv zY;XVw2tYt*Iq+eJeoeRUesKbT00#odh%f;_05>$?>PWsN;YNzw_>dbLQu!8+8U#j$ zRi7nh{yph1kpluGn$!{wCpVF(oYbHYQ4nQZp#u-m=S8tZBOZ9)R8}v|2N{+iP7z(@ zPXW4k2uHe~3Xghniub_#r#+8Sj4Ubok8g<(-iz`Bk8z@-g%m$R6zMr2u bBp`6V00jJ7479xUr33^DYd&It!2KuOE&zei?@Z`3_@e+2FjD^b00J*M z%HNfcEi<}3FNJ;X84M7ZFznHnt)k6$l*V8GTmS+~(vBR^h0+#)0ay;`fB_vKfKRu+ zfdPIcB&HJ@CfN!y#EWlxdh;$AL=G#Vb2T-M4YiF8^~EbY^$?{;-+Ivn5JYR1eSebx z2=2Uh;L*qYQvd`>Q2+~qYsdE)fBC_N^=`cH(DR2P(g)OsVo=JmTRw=OI PWi5!NTdw0Fd}|x5!0* zwYJtxlA0b&lp7?%;KoK7uSKGA{(wR>fkO0g3dIwm4SXKu2Oc7m^9c8(vU&j^LG6Hb zPDjyPXjdK&;n`C3ANm&*;d~tM@xu8+8YdB=NY4R@_6rw|eEWjjM~@^6g~JwJb#eaM zwO2_%;-Bq{AMy`K6khg;1SDp3e4halR~~tX03 b=BBk&_z?jT=V}3o z4;_nz=qHc30Ey bciTOQI8Qck6hq6C&N3rBiR zA?1)SDDvmhl*fnEL^vqIv1 Un Q3P{iW^!>7fkjXW!V$m!P*z|eSeO= K{Kj=Dzs>z>ulcMJsR60t{;%i-#Fc-RlAv; 9d3s1)gd;w7d!P|2 z9|vWJ5D!Hhw3Na@y#NdNZs35$SjvYiB6LSIl-=&3GQI*dCJ;~I05*)t6iz-H;!~&` zvWPI4MTG8%h5{&HDFKU!5tQHd04y#9V6p2223U-GyjM=NsAtz}hAz!*6JWu88grj4 z9DnDxw|L#oqO_3}A;a~j#w~?zEsuGDLj33F53p!@ZRHgXVB!350Txb3QQ@=e$_`q0 zumCJxVqOMS8*GI|#Qxv5NSo1TFLDDGYtBB-wum@5`uIP`3=05@6hjn#RD&PU;1&@a zupp<62>=&&FB-h+n9loJ_%_2&fpWlt`-KjUXzbTB=h_!7-?u_QG?DQe{QinN^yDOm z2m^)4f+7hD(Z(tAhsXp)xLQ)EJl{OlAfAqg6OW||6w$zg^6;M;kN3!y`fm3qwFpu4 zBl;B-;TR9#FuP9CB8`L>YI z?YPi7XtB2PZA~Y7!Ry+|=)O0)0FCI(LGLaWfX0voYu~u#F#%{K@A%VMOmLurAJu@R zL|Xv~ZV$;_JO@WJcCe!v$sy@XtaC4kVuDHPce?1}>B3P8o W`A(eyO9Ow`V2ZbdBXem7(P82``6z>rf4vPrp3nD(2o{uAn zYbQyehed?4!=>G)0wN~Jblg`&{0IuCqZDxZsJnJDO7UR%pnO08P(Xda12DmRqJ2Qo zKB`~+TSOGbyUAN53TH+cz;I8&PysL`Ce{`GdQ1PP5O;g@`sV4s4BDKaYg-fjfBl>H zzrFRt1OWpHe&rMwivhr(HXUWybj0!v!)U&1!{v^O@BDB93{Hr!i1_HxmY2tEAArI5 zcAW$m3Oiom1{g-%+x1ETFmxR==Is50BNwSBT{yr%z84ZYpn;q@CIB?h79oM_C&?lr zK>$O7e;eT!QE`BQd{0;a8Uh~>9zG!QNCaSsrKR17P&g<=7^e_*5V@R3I4DFY=MkPY zHRzA(3s&Vr0T2nGhzA~&hyU1lUA+ tq;QacmiKY<%8z{ z!)Y_>Mjp31G|2@p^tG;&0K>T*vjG?i$802kVbaSCVAwLOSpW 9IKP=Bb{ix3v{IX9qeW;1hI%u)B^8VAApKF~)zTzCgh@W$%3s7kJ+j|XX2|(fH z&)- `B#5dzMaQamWo-~lXvLh%MA%LQYkOs|ewM2Y7X4CLE^`*cvwCgJ;G0;Puq z13PkoTPI+_fLkZv(*aH=4FVXHlS$g;0&q~2$}`#kF#OK*$i-*Qk&AdO0SxgAM=*e4 z?NNscfML)>dlpXkQUDB1X#fL&g+7fn-_~|{cdG#gTtC}pONOTHY{|gqkwJe5_vZas zG_-UXxkB0$*gsr=gY&4UuwCijLdT62fCJZb)mA`n(QpfF7Rzu72VR;kajvb5AM=m| z9GZXifE#dlV(-0er;~4=lzaW1rNW}&wjK7`N^VF(*FYw8Km!LD;A|2=1G%wE&}q^H zzd4)YTL2pN+HiaOizc3D0chX=L*Q)kfm`Riv(dtmqNc@dYBwn-D~T?JA;Vn{L=i+4 zC`1@U9VkQ|C`2EpMpTxIaPXj1A9bWcEiIG|@f4NWsrX>Mo+DpSqyrDi!+-2N>g|`R zc8b!Q`J}x6z;lZ6z$wN}A(e-5#d!`eY Q<`@Yu#4pKZ z07H4fUthF}Ual_h_~jA-Fr-^BkhHgSKm+&faO-0CA^H&|t!r?;fd+2Dpr#Qu6