From 2a349318991892b1d657460d7f695a53b251539b Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 30 May 2018 07:39:18 -0400 Subject: [PATCH] update --- .../How2ReadData/html/How2ReadData-bs.html | 30 ++++++++-------- .../html/How2ReadData-reveal.html | 30 ++++++++-------- .../html/How2ReadData-solarized.html | 30 ++++++++-------- doc/pub/How2ReadData/html/How2ReadData.html | 30 ++++++++-------- doc/pub/How2ReadData/ipynb/How2ReadData.ipynb | 33 ++++++++---------- .../ipynb/ipynb-How2ReadData-src.tar.gz | Bin 113365 -> 113365 bytes .../How2ReadData/pdf/How2ReadData-minted.pdf | Bin 407489 -> 407560 bytes doc/src/How2ReadData/How2ReadData.do.txt | 29 +++++++-------- 8 files changed, 84 insertions(+), 98 deletions(-) diff --git a/doc/pub/How2ReadData/html/How2ReadData-bs.html b/doc/pub/How2ReadData/html/How2ReadData-bs.html index 77c33d5d6..412777604 100644 --- a/doc/pub/How2ReadData/html/How2ReadData-bs.html +++ b/doc/pub/How2ReadData/html/How2ReadData-bs.html @@ -142,7 +142,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

May 29, 2018

+

May 30, 2018


@@ -481,7 +481,7 @@ example of the functionality of scikit-learn. from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error x = np.random.rand(100,1) -y = 2.0+ 5*x+0.5np.random.randn(100,1) +y = 2.0+ 5*x+0.5*np.random.randn(100,1) linreg = LinearRegression() linreg.fit(x,y) ypredict = linreg.predict(x) @@ -594,6 +594,7 @@ plt.show()

Similarly, using R, we can perform similar studies. The following R code illustrates this. +(more details on R will be inserted later).

Non-Linear Least squares in R

@@ -650,7 +651,7 @@ display(data_pandas)

We present here several examples, with pertinent Python codes that we -will us to illustrate various machine learning methods and ways to +will use to illustrate various machine learning methods and ways to analyze, from simple to complex, various data sets. Many of these examples allow us to generate the data we want to analyze, following much of the same philosophy we discussed above when @@ -678,7 +679,7 @@ Here we will construct a model for cell growth based on a simple difference equa interval \( \Delta t \) as \( N \) cells would: \( \Delta N \propto N \)

  • \( N \) cells result in twice as many new individuals \( \Delta N \) in time \( 2\Delta t \) as in time \( \Delta t \): \( \Delta N \propto\Delta t \)
  • -
  • Same proportionality wrt death
  • +
  • Same proportionality with respect to death
  • Proposed model: \( \Delta N = b\Delta t N - d\Delta tN \) for some unknown constants \( b \) (births) and \( d \) (deaths)
  • Describe evolution in discrete time: \( t_n=n\Delta t \)
  • @@ -691,7 +692,7 @@ Here we will construct a model for cell growth based on a simple difference equa

    -The difference equation can be programmed in a simple was, and in order to get started we +The difference equation can be programmed in a simple way, and in order to get started we set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads

    @@ -702,13 +703,12 @@ set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads t = np.linspace(0, 10, 21) # 20 intervals in [0, 10] dt = t[1] - t[0] N = np.zeros(t.size) - N[0] = 1 r = 0.5 for n in range(0, N.size-1, 1): N[n+1] = N[n] + r*dt*N[n] - print 'N[%d]=%.1f' % (n+1, N[n+1]) + print('N[%d]=%.1f' % (n+1, N[n+1]))

    and it generates the following output @@ -739,7 +739,7 @@ N[20]=86.7

    This forms our data which later will define our training set. In this case we defined the value of the parameter \( r \). We could alternatively assume that we just received the -above data file and where asked to use find \( r \). How can we estimate \( r \) from data? +above data file and where asked to find \( r \). How can we estimate \( r \) from data? This will be one of our tasks later.

    We can use the difference equation with the experimental data @@ -749,12 +749,13 @@ Suppose now that \( N^{n+1} \) and \( N^n \) are known from data. Then we could $$ r = \frac{N^{n+1}-N^n}{N^n\Delta t} $$ Suppose we set \( t_1=600 \), \( t_2=1200 \), -\( N^1=140 \) and \( N^2=250 \). We obtain then \( r=0.0013 \). The exact value is \( r = 0.000694 \) -The following code plot +\( N^1=140 \) and \( N^2=250 \). +The following code plots the data

    import numpy as np
    +import matplotlib.pyplot as plt
     
     # Estimate r
     data = np.loadtxt('ecoli.csv', delimiter=',')
    @@ -762,10 +763,9 @@ t_e = data[:,0<
     N_e = data[:,1]
     i = 2  # Data point (i,i+1) used to estimate r
     r = (N_e[i+1] - N_e[i])/(N_e[i]*(t_e[i+1] - t_e[i]))
    -print 'Estimated r=%.5f' % r
    +print('Estimated r=%.5f' % r)
     # Can experiment with r values and see if the model can
     # match the data better
    -
     T = 1200     # cell can divide after T sec
     t_max = 5*T  # 5 generations in experiment
     t = np.linspace(0, t_max, 1000)
    @@ -776,7 +776,6 @@ N[0] = <
     for n in range(0, len(t)-1, 1):
         N[n+1] = N[n] + r*dt*N[n]
     
    -import matplotlib.pyplot as plt
     plt.plot(t, N, 'r-', t_e, N_e, 'bo')
     plt.xlabel('time [s]');  plt.ylabel('N')
     plt.legend(['model', 'experiment'], loc='upper left')
    @@ -1038,7 +1037,7 @@ parameters result in a slightly modified initial conditions, namely
     \( H(0) = 34.91 \) and \( L(0)=3.857 \).
     
     

    -The following Python demonstrates how we can use linear regression to fit for example the population of lynx. +The following Python code demonstrates how we can use linear regression to fit for example the population of lynx. Similarly, we have also used a decision tree algorithm to fit the lynx population data. As expected, the linear regression is not exactly impressive

    @@ -1063,7 +1062,7 @@ plt.plot(x, y, label.show()

    -The similar code for linear regression in R reads +The similar code for linear regression in R reads (more details to come)

    @@ -1172,7 +1171,6 @@ Our task is to first set up an algorithm which simulates the above transactions \( w_m\Delta m \). You will need to set up a value for the interval \( \Delta m \) (typically \( 0.01-0.05 \)). That means you need to account for the number of times you register an income in the interval \( m,m+\Delta m \). The number of times you register this income, represents the value that enters the histogram. - You will also need to find a criterion for when the equilibrium situation has been reached.

    diff --git a/doc/pub/How2ReadData/html/How2ReadData-reveal.html b/doc/pub/How2ReadData/html/How2ReadData-reveal.html index 34e634731..f6744726e 100644 --- a/doc/pub/How2ReadData/html/How2ReadData-reveal.html +++ b/doc/pub/How2ReadData/html/How2ReadData-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({

    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    May 29, 2018

    +

    May 30, 2018


    Introduction

    @@ -498,7 +498,7 @@ example of the functionality of scikit-learn. from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error x = np.random.rand(100,1) -y = 2.0+ 5*x+0.5np.random.randn(100,1) +y = 2.0+ 5*x+0.5*np.random.randn(100,1) linreg = LinearRegression() linreg.fit(x,y) ypredict = linreg.predict(x) @@ -621,6 +621,7 @@ plt.show()

    Similarly, using R, we can perform similar studies. The following R code illustrates this. +(more details on R will be inserted later).

    Non-Linear Least squares in R

    @@ -674,7 +675,7 @@ display(data_pandas)

    We present here several examples, with pertinent Python codes that we -will us to illustrate various machine learning methods and ways to +will use to illustrate various machine learning methods and ways to analyze, from simple to complex, various data sets. Many of these examples allow us to generate the data we want to analyze, following much of the same philosophy we discussed above when @@ -700,7 +701,7 @@ Here we will construct a model for cell growth based on a simple difference equa interval \( \Delta t \) as \( N \) cells would: \( \Delta N \propto N \)

  • \( N \) cells result in twice as many new individuals \( \Delta N \) in time \( 2\Delta t \) as in time \( \Delta t \): \( \Delta N \propto\Delta t \)
  • -

  • Same proportionality wrt death
  • +

  • Same proportionality with respect to death
  • Proposed model: \( \Delta N = b\Delta t N - d\Delta tN \) for some unknown constants \( b \) (births) and \( d \) (deaths)
  • Describe evolution in discrete time: \( t_n=n\Delta t \)
  • @@ -711,7 +712,7 @@ Here we will construct a model for cell growth based on a simple difference equa

    -The difference equation can be programmed in a simple was, and in order to get started we +The difference equation can be programmed in a simple way, and in order to get started we set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads

    @@ -722,13 +723,12 @@ set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads t = np.linspace(0, 10, 21) # 20 intervals in [0, 10] dt = t[1] - t[0] N = np.zeros(t.size) - N[0] = 1 r = 0.5 for n in range(0, N.size-1, 1): N[n+1] = N[n] + r*dt*N[n] - print 'N[%d]=%.1f' % (n+1, N[n+1]) + print('N[%d]=%.1f' % (n+1, N[n+1]))

    and it generates the following output @@ -759,7 +759,7 @@ N[20]=86.7

    This forms our data which later will define our training set. In this case we defined the value of the parameter \( r \). We could alternatively assume that we just received the -above data file and where asked to use find \( r \). How can we estimate \( r \) from data? +above data file and where asked to find \( r \). How can we estimate \( r \) from data? This will be one of our tasks later.

    We can use the difference equation with the experimental data @@ -773,12 +773,13 @@ $$ r = \frac{N^{n+1}-N^n}{N^n\Delta t} $$

     
    Suppose we set \( t_1=600 \), \( t_2=1200 \), -\( N^1=140 \) and \( N^2=250 \). We obtain then \( r=0.0013 \). The exact value is \( r = 0.000694 \) -The following code plot +\( N^1=140 \) and \( N^2=250 \). +The following code plots the data

    import numpy as np
    +import matplotlib.pyplot as plt
     
     # Estimate r
     data = np.loadtxt('ecoli.csv', delimiter=',')
    @@ -786,10 +787,9 @@ t_e = data[:,0]
     N_e = data[:,1]
     i = 2  # Data point (i,i+1) used to estimate r
     r = (N_e[i+1] - N_e[i])/(N_e[i]*(t_e[i+1] - t_e[i]))
    -print 'Estimated r=%.5f' % r
    +print('Estimated r=%.5f' % r)
     # Can experiment with r values and see if the model can
     # match the data better
    -
     T = 1200     # cell can divide after T sec
     t_max = 5*T  # 5 generations in experiment
     t = np.linspace(0, t_max, 1000)
    @@ -800,7 +800,6 @@ N[0] = 100for n in range(0, len(t)-1, 1):
         N[n+1] = N[n] + r*dt*N[n]
     
    -import matplotlib.pyplot as plt
     plt.plot(t, N, 'r-', t_e, N_e, 'bo')
     plt.xlabel('time [s]');  plt.ylabel('N')
     plt.legend(['model', 'experiment'], loc='upper left')
    @@ -1070,7 +1069,7 @@ parameters result in a slightly modified initial conditions, namely
     \( H(0) = 34.91 \) and \( L(0)=3.857 \).
     
     

    -The following Python demonstrates how we can use linear regression to fit for example the population of lynx. +The following Python code demonstrates how we can use linear regression to fit for example the population of lynx. Similarly, we have also used a decision tree algorithm to fit the lynx population data. As expected, the linear regression is not exactly impressive

    @@ -1095,7 +1094,7 @@ plt.plot(x, y, label= "Linear Regression" plt.show()

    -The similar code for linear regression in R reads +The similar code for linear regression in R reads (more details to come)

    @@ -1216,7 +1215,6 @@ Our task is to first set up an algorithm which simulates the above transactions \( w_m\Delta m \). You will need to set up a value for the interval \( \Delta m \) (typically \( 0.01-0.05 \)). That means you need to account for the number of times you register an income in the interval \( m,m+\Delta m \). The number of times you register this income, represents the value that enters the histogram. - You will also need to find a criterion for when the equilibrium situation has been reached.

    diff --git a/doc/pub/How2ReadData/html/How2ReadData-solarized.html b/doc/pub/How2ReadData/html/How2ReadData-solarized.html index a84d765ae..b81301af6 100644 --- a/doc/pub/How2ReadData/html/How2ReadData-solarized.html +++ b/doc/pub/How2ReadData/html/How2ReadData-solarized.html @@ -120,7 +120,7 @@ MathJax.Hub.Config({

    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    May 29, 2018

    +

    May 30, 2018


    Introduction

    @@ -457,7 +457,7 @@ example of the functionality of scikit-learn. from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error x = np.random.rand(100,1) -y = 2.0+ 5*x+0.5np.random.randn(100,1) +y = 2.0+ 5*x+0.5*np.random.randn(100,1) linreg = LinearRegression() linreg.fit(x,y) ypredict = linreg.predict(x) @@ -570,6 +570,7 @@ plt.show()

    Similarly, using R, we can perform similar studies. The following R code illustrates this. +(more details on R will be inserted later).

    Non-Linear Least squares in R

    @@ -625,7 +626,7 @@ display(data_pandas)

    We present here several examples, with pertinent Python codes that we -will us to illustrate various machine learning methods and ways to +will use to illustrate various machine learning methods and ways to analyze, from simple to complex, various data sets. Many of these examples allow us to generate the data we want to analyze, following much of the same philosophy we discussed above when @@ -653,7 +654,7 @@ Here we will construct a model for cell growth based on a simple difference equa interval \( \Delta t \) as \( N \) cells would: \( \Delta N \propto N \)

  • \( N \) cells result in twice as many new individuals \( \Delta N \) in time \( 2\Delta t \) as in time \( \Delta t \): \( \Delta N \propto\Delta t \)
  • -
  • Same proportionality wrt death
  • +
  • Same proportionality with respect to death
  • Proposed model: \( \Delta N = b\Delta t N - d\Delta tN \) for some unknown constants \( b \) (births) and \( d \) (deaths)
  • Describe evolution in discrete time: \( t_n=n\Delta t \)
  • @@ -665,7 +666,7 @@ Here we will construct a model for cell growth based on a simple difference equa

    -The difference equation can be programmed in a simple was, and in order to get started we +The difference equation can be programmed in a simple way, and in order to get started we set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads

    @@ -676,13 +677,12 @@ set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads t = np.linspace(0, 10, 21) # 20 intervals in [0, 10] dt = t[1] - t[0] N = np.zeros(t.size) - N[0] = 1 r = 0.5 for n in range(0, N.size-1, 1): N[n+1] = N[n] + r*dt*N[n] - print 'N[%d]=%.1f' % (n+1, N[n+1]) + print('N[%d]=%.1f' % (n+1, N[n+1]))

    and it generates the following output @@ -713,7 +713,7 @@ N[20]=86.7

    This forms our data which later will define our training set. In this case we defined the value of the parameter \( r \). We could alternatively assume that we just received the -above data file and where asked to use find \( r \). How can we estimate \( r \) from data? +above data file and where asked to find \( r \). How can we estimate \( r \) from data? This will be one of our tasks later.

    We can use the difference equation with the experimental data @@ -723,12 +723,13 @@ Suppose now that \( N^{n+1} \) and \( N^n \) are known from data. Then we could $$ r = \frac{N^{n+1}-N^n}{N^n\Delta t} $$ Suppose we set \( t_1=600 \), \( t_2=1200 \), -\( N^1=140 \) and \( N^2=250 \). We obtain then \( r=0.0013 \). The exact value is \( r = 0.000694 \) -The following code plot +\( N^1=140 \) and \( N^2=250 \). +The following code plots the data

    import numpy as np
    +import matplotlib.pyplot as plt
     
     # Estimate r
     data = np.loadtxt('ecoli.csv', delimiter=',')
    @@ -736,10 +737,9 @@ t_e = data[:,0]
     N_e = data[:,1]
     i = 2  # Data point (i,i+1) used to estimate r
     r = (N_e[i+1] - N_e[i])/(N_e[i]*(t_e[i+1] - t_e[i]))
    -print 'Estimated r=%.5f' % r
    +print('Estimated r=%.5f' % r)
     # Can experiment with r values and see if the model can
     # match the data better
    -
     T = 1200     # cell can divide after T sec
     t_max = 5*T  # 5 generations in experiment
     t = np.linspace(0, t_max, 1000)
    @@ -750,7 +750,6 @@ N[0] = 100for n in range(0, len(t)-1, 1):
         N[n+1] = N[n] + r*dt*N[n]
     
    -import matplotlib.pyplot as plt
     plt.plot(t, N, 'r-', t_e, N_e, 'bo')
     plt.xlabel('time [s]');  plt.ylabel('N')
     plt.legend(['model', 'experiment'], loc='upper left')
    @@ -1006,7 +1005,7 @@ parameters result in a slightly modified initial conditions, namely
     \( H(0) = 34.91 \) and \( L(0)=3.857 \).
     
     

    -The following Python demonstrates how we can use linear regression to fit for example the population of lynx. +The following Python code demonstrates how we can use linear regression to fit for example the population of lynx. Similarly, we have also used a decision tree algorithm to fit the lynx population data. As expected, the linear regression is not exactly impressive

    @@ -1031,7 +1030,7 @@ plt.plot(x, y, label= "Linear Regression" plt.show()

    -The similar code for linear regression in R reads +The similar code for linear regression in R reads (more details to come)

    @@ -1140,7 +1139,6 @@ Our task is to first set up an algorithm which simulates the above transactions \( w_m\Delta m \). You will need to set up a value for the interval \( \Delta m \) (typically \( 0.01-0.05 \)). That means you need to account for the number of times you register an income in the interval \( m,m+\Delta m \). The number of times you register this income, represents the value that enters the histogram. - You will also need to find a criterion for when the equilibrium situation has been reached.

    diff --git a/doc/pub/How2ReadData/html/How2ReadData.html b/doc/pub/How2ReadData/html/How2ReadData.html index ee631f1c0..28d565b93 100644 --- a/doc/pub/How2ReadData/html/How2ReadData.html +++ b/doc/pub/How2ReadData/html/How2ReadData.html @@ -125,7 +125,7 @@ MathJax.Hub.Config({

    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    May 29, 2018

    +

    May 30, 2018


    Introduction

    @@ -462,7 +462,7 @@ example of the functionality of scikit-learn. from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error x = np.random.rand(100,1) -y = 2.0+ 5*x+0.5np.random.randn(100,1) +y = 2.0+ 5*x+0.5*np.random.randn(100,1) linreg = LinearRegression() linreg.fit(x,y) ypredict = linreg.predict(x) @@ -575,6 +575,7 @@ plt.show()

    Similarly, using R, we can perform similar studies. The following R code illustrates this. +(more details on R will be inserted later).

    Non-Linear Least squares in R

    @@ -630,7 +631,7 @@ display(data_pandas)

    We present here several examples, with pertinent Python codes that we -will us to illustrate various machine learning methods and ways to +will use to illustrate various machine learning methods and ways to analyze, from simple to complex, various data sets. Many of these examples allow us to generate the data we want to analyze, following much of the same philosophy we discussed above when @@ -658,7 +659,7 @@ Here we will construct a model for cell growth based on a simple difference equa interval \( \Delta t \) as \( N \) cells would: \( \Delta N \propto N \)

  • \( N \) cells result in twice as many new individuals \( \Delta N \) in time \( 2\Delta t \) as in time \( \Delta t \): \( \Delta N \propto\Delta t \)
  • -
  • Same proportionality wrt death
  • +
  • Same proportionality with respect to death
  • Proposed model: \( \Delta N = b\Delta t N - d\Delta tN \) for some unknown constants \( b \) (births) and \( d \) (deaths)
  • Describe evolution in discrete time: \( t_n=n\Delta t \)
  • @@ -670,7 +671,7 @@ Here we will construct a model for cell growth based on a simple difference equa

    -The difference equation can be programmed in a simple was, and in order to get started we +The difference equation can be programmed in a simple way, and in order to get started we set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads

    @@ -681,13 +682,12 @@ set \( r=1.5 \), \( N^0=1 \), \( \Delta t=0.5 \). The program reads t = np.linspace(0, 10, 21) # 20 intervals in [0, 10] dt = t[1] - t[0] N = np.zeros(t.size) - N[0] = 1 r = 0.5 for n in range(0, N.size-1, 1): N[n+1] = N[n] + r*dt*N[n] - print 'N[%d]=%.1f' % (n+1, N[n+1]) + print('N[%d]=%.1f' % (n+1, N[n+1]))

    and it generates the following output @@ -718,7 +718,7 @@ N[20]=86.7

    This forms our data which later will define our training set. In this case we defined the value of the parameter \( r \). We could alternatively assume that we just received the -above data file and where asked to use find \( r \). How can we estimate \( r \) from data? +above data file and where asked to find \( r \). How can we estimate \( r \) from data? This will be one of our tasks later.

    We can use the difference equation with the experimental data @@ -728,12 +728,13 @@ Suppose now that \( N^{n+1} \) and \( N^n \) are known from data. Then we could $$ r = \frac{N^{n+1}-N^n}{N^n\Delta t} $$ Suppose we set \( t_1=600 \), \( t_2=1200 \), -\( N^1=140 \) and \( N^2=250 \). We obtain then \( r=0.0013 \). The exact value is \( r = 0.000694 \) -The following code plot +\( N^1=140 \) and \( N^2=250 \). +The following code plots the data

    import numpy as np
    +import matplotlib.pyplot as plt
     
     # Estimate r
     data = np.loadtxt('ecoli.csv', delimiter=',')
    @@ -741,10 +742,9 @@ t_e = data[:,0<
     N_e = data[:,1]
     i = 2  # Data point (i,i+1) used to estimate r
     r = (N_e[i+1] - N_e[i])/(N_e[i]*(t_e[i+1] - t_e[i]))
    -print 'Estimated r=%.5f' % r
    +print('Estimated r=%.5f' % r)
     # Can experiment with r values and see if the model can
     # match the data better
    -
     T = 1200     # cell can divide after T sec
     t_max = 5*T  # 5 generations in experiment
     t = np.linspace(0, t_max, 1000)
    @@ -755,7 +755,6 @@ N[0] = <
     for n in range(0, len(t)-1, 1):
         N[n+1] = N[n] + r*dt*N[n]
     
    -import matplotlib.pyplot as plt
     plt.plot(t, N, 'r-', t_e, N_e, 'bo')
     plt.xlabel('time [s]');  plt.ylabel('N')
     plt.legend(['model', 'experiment'], loc='upper left')
    @@ -1011,7 +1010,7 @@ parameters result in a slightly modified initial conditions, namely
     \( H(0) = 34.91 \) and \( L(0)=3.857 \).
     
     

    -The following Python demonstrates how we can use linear regression to fit for example the population of lynx. +The following Python code demonstrates how we can use linear regression to fit for example the population of lynx. Similarly, we have also used a decision tree algorithm to fit the lynx population data. As expected, the linear regression is not exactly impressive

    @@ -1036,7 +1035,7 @@ plt.plot(x, y, label.show()

    -The similar code for linear regression in R reads +The similar code for linear regression in R reads (more details to come)

    @@ -1145,7 +1144,6 @@ Our task is to first set up an algorithm which simulates the above transactions \( w_m\Delta m \). You will need to set up a value for the interval \( \Delta m \) (typically \( 0.01-0.05 \)). That means you need to account for the number of times you register an income in the interval \( m,m+\Delta m \). The number of times you register this income, represents the value that enters the histogram. - You will also need to find a criterion for when the equilibrium situation has been reached.

    diff --git a/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb b/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb index 95954d7ff..00b3d6745 100644 --- a/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb +++ b/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **May 29, 2018**\n", + "Date: **May 30, 2018**\n", "\n", "Copyright 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -410,7 +410,7 @@ "from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error\n", "\n", "x = np.random.rand(100,1)\n", - "y = 2.0+ 5*x+0.5np.random.randn(100,1)\n", + "y = 2.0+ 5*x+0.5*np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", "ypredict = linreg.predict(x)\n", @@ -588,7 +588,7 @@ "metadata": {}, "source": [ "Similarly, using **R**, we can perform similar studies. The following **R** code illustrates this.\n", - "\n", + "(more details on **R** will be inserted later).\n", "\n", "## Non-Linear Least squares in R" ] @@ -653,7 +653,7 @@ "## Examples\n", "\n", "We present here several examples, with pertinent Python codes that we\n", - "will us to illustrate various machine learning methods and ways to\n", + "will use to illustrate various machine learning methods and ways to\n", "analyze, from simple to complex, various data sets. Many of these\n", "examples allow us to generate the data we want to analyze, following\n", "much of the same philosophy we discussed above when\n", @@ -678,7 +678,7 @@ "3. $N$ cells result in twice as many new individuals $\\Delta N$ in\n", " time $2\\Delta t$ as in time $\\Delta t$: $\\Delta N \\propto\\Delta t$\n", "\n", - "4. Same proportionality wrt death \n", + "4. Same proportionality with respect to death \n", "\n", "5. Proposed model: $\\Delta N = b\\Delta t N - d\\Delta tN$ for some unknown\n", " constants $b$ (births) and $d$ (deaths)\n", @@ -693,7 +693,7 @@ "\n", "\n", "\n", - "The difference equation can be programmed in a simple was, and in order to get started we\n", + "The difference equation can be programmed in a simple way, and in order to get started we\n", "set $r=1.5$, $N^0=1$, $\\Delta t=0.5$. The program reads" ] }, @@ -710,13 +710,12 @@ "t = np.linspace(0, 10, 21) # 20 intervals in [0, 10]\n", "dt = t[1] - t[0]\n", "N = np.zeros(t.size)\n", - "\n", "N[0] = 1\n", "r = 0.5\n", "\n", "for n in range(0, N.size-1, 1):\n", " N[n+1] = N[n] + r*dt*N[n]\n", - " print 'N[%d]=%.1f' % (n+1, N[n+1])" + " print('N[%d]=%.1f' % (n+1, N[n+1]))" ] }, { @@ -758,7 +757,7 @@ "source": [ "This forms our data which later will define our training set. \n", "In this case we defined the value of the parameter $r$. We could alternatively assume that we just received the \n", - "above data file and where asked to use find $r$. How can we estimate $r$ from data?\n", + "above data file and where asked to find $r$. How can we estimate $r$ from data? This will be one of our tasks later.\n", "\n", "We can use the difference equation with the experimental data" ] @@ -793,8 +792,8 @@ "metadata": {}, "source": [ "Suppose we set $t_1=600$, $t_2=1200$,\n", - "$N^1=140$ and $N^2=250$. We obtain then $r=0.0013$. The exact value is $r = 0.000694$\n", - "The following code plot" + "$N^1=140$ and $N^2=250$. \n", + "The following code plots the data" ] }, { @@ -806,6 +805,7 @@ "outputs": [], "source": [ "import numpy as np\n", + "import matplotlib.pyplot as plt\n", "\n", "# Estimate r\n", "data = np.loadtxt('ecoli.csv', delimiter=',')\n", @@ -813,10 +813,9 @@ "N_e = data[:,1]\n", "i = 2 # Data point (i,i+1) used to estimate r\n", "r = (N_e[i+1] - N_e[i])/(N_e[i]*(t_e[i+1] - t_e[i]))\n", - "print 'Estimated r=%.5f' % r\n", + "print('Estimated r=%.5f' % r)\n", "# Can experiment with r values and see if the model can\n", "# match the data better\n", - "\n", "T = 1200 # cell can divide after T sec\n", "t_max = 5*T # 5 generations in experiment\n", "t = np.linspace(0, t_max, 1000)\n", @@ -827,7 +826,6 @@ "for n in range(0, len(t)-1, 1):\n", " N[n+1] = N[n] + r*dt*N[n]\n", "\n", - "import matplotlib.pyplot as plt\n", "plt.plot(t, N, 'r-', t_e, N_e, 'bo')\n", "plt.xlabel('time [s]'); plt.ylabel('N')\n", "plt.legend(['model', 'experiment'], loc='upper left')\n", @@ -1180,7 +1178,7 @@ "$H(0) = 34.91$ and $L(0)=3.857$. \n", "\n", "\n", - "The following Python demonstrates how we can use linear regression to fit for example the population of lynx.\n", + "The following Python code demonstrates how we can use linear regression to fit for example the population of lynx.\n", "Similarly, we have also used a decision tree algorithm to fit the lynx population data. As expected, the linear regression is not exactly impressive" ] }, @@ -1216,7 +1214,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The similar code for linear regression in **R** reads" + "The similar code for linear regression in **R** reads (more details to come)" ] }, { @@ -1383,8 +1381,7 @@ " This histogram contains the number of times a value $m$ is registered and represents\n", " $w_m\\Delta m$. You will need to set up a value for the interval $\\Delta m$ (typically $0.01-0.05$).\n", " That means you need to account for the number of times you register an income in the interval\n", - " $m,m+\\Delta m$. The number of times you register this income, represents the value that enters the histogram.\n", - " You will also need to find a criterion for when the equilibrium situation has been reached." + " $m,m+\\Delta m$. The number of times you register this income, represents the value that enters the histogram." ] }, { diff --git a/doc/pub/How2ReadData/ipynb/ipynb-How2ReadData-src.tar.gz b/doc/pub/How2ReadData/ipynb/ipynb-How2ReadData-src.tar.gz index b5cdbf9505a8e6f9f47665230545f54f29fd71e4..e3418a6a2110edbb9ef7a3f8096d1f09ce1d127d 100644 GIT binary patch delta 21 dcmccmmF?i7_dA70wyK1J^~#F1nwC87niXM0TZ)w31BY*GcuEK-z$HU+qM;c z-(SITlUb^@5aLD>$@rlcH=R!MP-my@jP2~u612-PMJgosqRAw`y$3gnpt$nt;*Fi@ z!%83ooI4JH!*8SDDu{w_&m#N%my5Hn{*I$4NRfzR7F;X>%qfa74q~1lLV0j84_=2w zUe@wz^7i7NXAxpiu=%L3fKkat+adW4Op$#o+$=`T-v6RW0ZFtUZZtClJ_*qlNB^j1wd%H8QV?_Bb9z zWvw#NVwbC<$Yt*uMeP7fhSMRf&P|V{@Rdg)LXrBFtB=S|@_Jr5iHCoTwFZj$bIU!U zFaz5UO~~unM8dPWdNx9BEZB~9Ty~#pQ@`GaN;IVMe4p7E9XCHZZoalKxNk_~?a;!> zX)JtSWbb65Y`jMpg!Lc@A2sRxi~BFmpD1wFPpQ@$OqpCYc~O;@KdXmj)?U}kpKDoU zZGJ0%`Q^iUpU9nU-WGrIY1DpYwKFMI)^$}sm3N!#>aM?y!j_%{0_c-i@8~EZFfihpyR7PER+!)CdDGVUyPFm^e%O4d5aFGgZkc~9Gxe}GCPG4_PHak1 z5~l$N@d=BK*w-*P4R6(lnoe1mnXd-eDSniORc*S8tiF=AZNspeM~$=4WXf0^UQ9ra zdToZbl^L)qtYG>ntE-!GZbsbYpsH@ob5QwBM5(N0sff3hMxEuQva3=G4;7*@A_5zQ z=2@E=4vlOZt5SanR4uQjy_s7Pl((K}~1pm96lJj{w4`=}k$|Gl$9 zGO&Uc6GeC!F@zyXt?B=)rHjI)G|mTaDt~J^G3>57oGSH`G4pd1m4x)8(lQ_nOabRj zk3lob-{OjEZe^gtV>9eeKb|FI#VuEODJ-ATu#;`Ie4)3$&WQxNTGz)3F?;#rCgai+-!~DayB9tYkZ-^|-n0y&_+d^I3&a`T;>31yqC|{ya!TjU zMk?M+uWWzX95xBrKu%y(gwBl0L@pPwp5b{U0vPlrth?=_1Wn(%a>n%;ot|!f=h2*BzGZ7_y^<@GxmS3m+BzptEW3h#q`>+TNQTH)~bh? z?*)A7GMX93{AGvTM)Qa>HG~7~gquqwL#Ys;2St?GtsItMRkvfOb@;$OW!JMg0+u(+ z)%t*=zMh;l2eV!6&(lA_9H%xc3Uyg4@^@&pR;{NuL3cPgzy>yi^>R6oee+&NBPw*+ z;BtRi&1G?@5k`EmUH#w?vMQHp$%n;?gBQfq5k9qD;7nHMv*u%(gkqFN+?ix4v+}a} z=_Z5Q{-w_0wu(@b%Vt*9(ms0Qit5T6tAB)BcvalA()^+m;M6hm>K*qdDb5^O<)~q= zaPB&SMDH^4xchf>&qbK4|kCR7>i-+`VHFxFOKQZCLx3f6gziZ4n3f$a*GMt$ECf z)phpuSaC=j!XxQ=Mzp~Z+~DH06Ax2X?p<*jsw@!0-4=bmy^v1j)6OK9M|pIL8AgAE zJgr~d*Btel#J-6D} zdmtIWrS~Ibxa5f<>QPFaAk`6qs5p6y(T@{i<3){!0?zat8Fn!&LZ0jnJ6C^6`FuCj z^PS3^Vn_83-JeCA`Sr06Wi?e|j8IJZNnfB3p+b)H0VtX2Q=w$GWHw*V_ln25I{&0W zJ?OWE_26wt&fc(|WLt*+!+JhlSkLQ)CGSQ>g{~u6PPKu3kl`o1I!7IQ37PW$yXL!VPBEoG~NsH zqz53{1vyB7F!u>R06FLjMB!{c5XZdIj>GDvHvHd2l(nYs?m92z4&zY4z)Q?0n3of< zjVlQ5mWMH-4?`Y-buNo}vqO89zvFXVq9!&85oh zr6ZAzX4ohOOVfW~N@66U)a=&ZPo_8$;SaFKr{T+y6+}3qG4*b=(^!N*jxeAoO}a|G ziu^eIW`rV+5aqCZAuHQ|togC~|Bg-HuOkemkSo$2hi%#%kqvIe*p4KrdAX;rs&Fxe zZJU_^rXun3;_Roh4U&=~tnv{Nh{FkKwmf_NHVWqOql$k-3OmW29=ZfxdRr-iAI|<| z{)fo7Mn?&bTB$X+TT}w15D86nff14?WF>*fU=$_2QB3E&PBZhK7%0WPF)<>fD?Zr6 z6J>n^g6$Kq@RaDCQ;+-ah)6I>p>zmF1lwWx2tR^S+*Pe!L}R|j2t&HWYPV&6QDh`| z_|Ub&GeB3GDpVk1f_WlQ>;(Xa=iZ>6sRlt9v)J)_Fxcop5_y~`f&-l|kvrIW#x$#k z>6p>u$cRvIBuj#6Z_qcxa+C*1jbK}c`BR#pnA>|v?9G7S{~yBDj>WS-LuU*FG&C`j zaNj9^8{3ZCHuinK!Wb+NI~^;c?#iMM+ucoXi$#$gpas&T;7IhCh)lU6RgYi#?LE9m zmSownERWlw`;f6niHGM-o=fb>0})8h!FaBit{Kd7%Ewttsm~+qxIA`tJY|%U2Xl)vwiZj2(y z7MBt9e<&lkcq;|VIn9~zt$pksxMweapCtGn?zYVxP-w-jYb3hPaxu!>|6I~++U-x{ zY0tzcEF}Vp;Jca9jnM*M7bK;L7P9(_2u6-v}>3W89Y zxg)JL)3a%8dC055u;W{L7IK__>f^1VbTW5b%Xfno?!ci@N2+Azp!jRvg|KA}9Xbib zt9=k>OLDG-(=?5Oz`snar0~=Ke(TllbA(~)sgb+s(%!PjB zKbN>r#KM3w{rmQ8(?K!p4lc|E3-XLx=R{bX0RG2}#|=UG;->Ko@g86}hi@};1G{f#kvmX<;wWGxE3B1g^B3oSczo91~Ly{*H) zi$L3@s^%du0=4uX+`3AO@`GWH&I6o@(67hHTVXod-<%fFf6MX>GjZ%LowA`~sh?Eh z{?s^skai;A-5%1zPms2Ha`N+l*kW*zaFm^+z184r9)Zz+S2$SqiwlPiJfr;?9RI2; zz|ToAe7Hzupi1$G?NwOh9M11t#};M%g`H|^tIHICGd?s5?(tsd*sUK}UKCZ9`1SGA z1n$M*xra$d8C6Dpqp!q9!17GH2shK(SOhM_^^a=gA#3N|GRnp2xgE(?#hB+$B=%{z zVH|`~2^q_OxKnZgYT^AMTRSfeAfspp!n1Z=4Rd}x4bVEkRM0pQ4Gpk$mnl~(Tx^d= zR5Is-dhvi0LceU+wT3CnnWE~F*AD!OykzO8*&Fnn_`|oBZm9NHBUyT?vHY#8qDf8` z3z|^E1b;W``tg2noO8H#Kaate_+C3rFBQb%hyFFB|D<7_h;1^j*Uh91qRQz2(soSQR{V1crXNmGI zW6XU3dU*eLL(F734`=-_L=|J_KX9iw}^6;<~i8#$1qr zVUyYVv|P(p3-uK!m zk%)es^Q)P!cgSiwWmNfpH9949#|Eo%V_nsM{aV&F5t`;@p&v4ms6J^kZC)33W33)z zHiJLemQ(Yg>egYYStXXFr~p);u=(B0Wc@bF4C7oB%BfhDbmePZ>4m41@}$%mg}ur& ziX~y5sZ29n|7}*F0lm5i?M;7~`N0$yG%tByH5wS=?9xLAtI>7Xv?y63fEPHULRIm9 z6^i@K3Mh0QiU>iT;*WNfo68N-NBx zRtNdb8hDR+kAX;tn!t-2LpoUc_605SXXnbL-Y=wU`53KQ5VWs19!2z32R z(YP*hDcxUaD*G3J^}%#WAD8pGAtEn-R+uH^PQN3VZ|5SP12^PEsMC|`6&FQWDZq=)gF1q_oPu_>ifFxzcS5WunxGdSTFk+LSz~-V7A?e0aKCe-&kkn zHF?6jfn?ZHf6Voa8R>O(hX}k#u%B#B(iw6d0bb z@W+|yh=4T$KV*t$k{1i}TLOkg@l;V$Hf_YyuSj7uY|{Xck{@l?W9AJutE9CHGvGv+ zWlFE&TCZ4=m8sr5oHD#3T*=v7nl#1@PS|*o6ce zplZsKo?@M8mT^5JbVrR_sS8YhDUK^Z`qyw=ew^#yf?xws$qZ|pBQ%w5I^d?hmu*G{ z9pk3piIe{38H8fEeYzDf#sqNPtzwkkHT>xKq!2C-ezdzIROa3BORi^yyY98Ssw+l& zy)`ZbNC-_!-FM`AwW~~W#)$G^daSFU>W$3eQmF$8-o00KD=yOSwdC;~Y#lQ6m{f3;d$Z``;Qe$THE@)FG^!-zLg3J?_8 z?q<7-Y!I{t_8|!hW+cxD(MVHCW5+G}-+RbI>SlSy-ncIoMUjW+_I*6$I108w6#Vie z@=p>)K}4ka1FdEo%zFO*%ab23p1gcZDGw5o#<2)4E(0n#i75?YsR-jTxX6N!VX;5d ze@(ageDT{{Jp7?k@xBMd2Ormx$?%}7Ot(w3Pb%kTFVDQ!y4l0mjDofG1=@Yt)cZfX z`mY~ux?Nq7tY{CVzWKA}FSs5;217<6s{} z10nr$yi0s1FL~m>pSQ_e$Dcr*w+*n>r$|OdH+a&q+VO;F{U~RFAN=wyqXDHPm692j zUelB$f(L7+i0v{We*UKShca(*0#!i@;#q9QMhTJseh~z z8Rn}s=Sg^g)Xl3EOTrF2cKM2ie~tUv=2zxZ-sloLa=$8tklLQ>qT4x9tF;~571cx{ z?q;T~!c7f>(l9fNwD`H(X*clNuI0s+B~CfEIeHMR8X2YHB#<#DLJ7301JN7=z{F$Q zHM-03{c0susGFibw%D=P8?(?3)WnW5*G*MaTlYB!b*(9xn*hPVhE-6Te?K?wlV4O< zy1e;!ZhaEr=5PDk!nn)ppVGMjk`hVNkpb36X3n=4_y+37gZj{6_h1(t@M71J)mlgz z{;sXlZ}3}viKDw6#21@=?ChH^%X(#Pa$a`hof6x;%AF5UinRd>6&lZN;3<)@3xZRQ zDdQ_;gNbe9BGc1h5Bg1wfBgn;m$g+2Cb(#*aBp6Z7%=RymNC@HHd??Nwhp_ZtlRpq zGm~y^>jALafXj|;n`dax+!jDs93^Or{$jJhdg-c9O%Y!2Kt^8S%cqEou0wS>pGQkr zP=Lo6aR5g3UN?f0AFeoquzSS@?m2 z3X59!vTZQbI2lsBwga==eRmKv;PDvAbr0cDn(vE!u`#m0_K;L_7e;UjNWBXyM;ja1 zzOh*vw<48z!YKBRFKi~W5kIBjrWc{xqIAi?0%OU>IVaY}T*+9-%zJb0G-@uzL zw{-(?-CH21QTV2+L952iABPIw{kg)XP&(IGr9>sp_YNPhTybezacHx@$g7Pd0qDSR z%VBI=uQ$L9)hF!LKpYI7bQea=IBnh9xm33KWO+XkAIt~Lk*=zus?t=^adx5XYr zczy{}XgG*8fOn8i9V7OugN$ql0h^g4B}tU(%`r6l73L{1)fC<_I~BOC%5W{{bof?2 zBG70}<{%4}f3`NqZp(r&8T4F#UI7u0E z@a=4Df!ENd#)>lE982#l0h?82{cJM^2BNpP_o63X=&=xir^bn32nbnc2K+6Ug+by_ zdTim1xH^c9%Ni(vBosiYD}WrQB*JluAq~SRoEc6re_n&^;ndK|?HXy!z)VJvgenj; zAv|`;_y)J~&hDv)VuSic;X!xcL1PQlF>Q{_5}|d_gPc|$j<9|oFZe#drgalqoM5@v z19~2eD28Hlf@h-vvixDl2M}W^9(Fq?^-{N;r4ShJ$`{}1i&k67+S1lFu{0JU3jf$y ztN*gHe{a7!jSVT~C`mi3j#ZX7<&E2|4di5ml|$KAzQ!&-GmNK#2*20ubEHV{n68R; zKQF3{8UVb%^{e+hVcJ+HLJKkx%D&^qZCM(7C$NLYrOjkBJogi)yCaZ-Muvwbdbbxg zs^;dQ;t3+{BBN5emGtw&+IuP;%=46h+}*!7VKc%ZjTab8Gb^4wy_vFiIoB z{q51k63ik3HI*OH!WL0wPJG?-0aKwrW^CPhCXwpOy|`MmFjO-?;I3%|;Dsg3A&HvZ zf7&d>$n4sS@!9#vhfgLXRx;o)TbMgb6F#uu6*jR@xQ&kGJa%tdpm9%O@vsVy`nbGp+uh!`q! zF2JU?sgQwQBdY#u^BLDsjWVi*{cN?NI|6P;dY0?u!Y%u#Ex-mb2?rd z93fLb;^mSx09t#@8)S@ckjI9sDGcUtuARV---2H)Y?BZ&Ge~$4N zH5V1_vFxyIvx_o=nbczjUbP!K!VIMjGj^6m-%+1MP7FbVj}ukSAqUhq1FgXhSVB^$GbWSHfrCRWCT5ZGzV1V@tnUC9sQv*b49Eh^ zKIu}E*F9pEbOTm{{Dq|A7}F zKqGL@b%kit+1k43`u&3US9ZeO^U<(%=Wts&^(DN3nn}aB$vV+g4LMU|d?0d6$aq4c zG{(?=K((NF#R@Csqq=x0WFvu$r-U&&6?i7EnNTE7(&?P{XV!@$636j$f6nVuizwg) zIh*k1%p#ERinE6qlSnd~(Jf}EBz&Ca(K5q}ev`;f>&j^i5tk3rl`}zNsQMSRou9+{ zg#;xm71K#rDnp{QwM}klnWI(pwZijGg?+a8cQ=fuHfW(ZVUbu2))aQ!T*m=ltnnh= zyHiGAil*D)T|L&XRkpAof0S8x2|sr6WQBytXhah-vUqD3N?b^mNXjYn;zb7dDQ`DT z;chkD$-|b`b$J|)AO0k6u0xx=a{~=mzglvgqCoI7=4ELR11<4nVBR%_1CaAmwUAN? z&~Gpr^ZIP%u_Q&3f#koRTN%`8DV>q4T68UN*S697^<`7!RaQDGf351y9!wS;#|44o z!l_DUS_kTGNeZ6a&bVJKxqp^!N{F%li*`8x5lv<)PgY9-H-J@u_js|p>q9spG6=_- zLDdHvr=5~4diZyZ+Y%og+L!za5RQfd_WnA;pm;P$z)83V=ySS6f*hEX0~HK{Uf-`= zzOO#h@+5{bYP{I_vQ8*w^4ZnWSg-HPhm!NLLb?j5fzxRLeLJf=s4_ke(uhJ2IBC3HTJ@@sJ`P ztLOCd%KZv$AJFAGp5vqWA?tpyy{FGd?#CnZ&pOQC6khCde}Atqy@yIB_fY+hEB!sV zzk0WZ?eR)Cb=$?__4~CsYT*x}<~N%cZeTT=SvMJ8M%s&wrRy^a{$~C{aGSeI)c*42 zZQ9s63N!v5t}UGVjD;0@!SThFk~|&`Z)|?8U+wu&F1v zm^MDe8quOfM2yEXiW-|W#q-3h7YpJhNH6%4p9x`}LZOu0yT0{^U`P_;Nf98*gm=C4 zZv14m&Wma?zy7^Xe;z(amwYn=U4e;%T=Y<`;W8+bb!1SiVdUR5xRM_rz-Ru|iBw7Xmwl&^c0@%$VouzmOtd;vz3~epDxsDU&a8 z6P}HlHVUp@z;ef1X-v*`S$CaPd^Is3fk%UTzv?t#%#852d9gQpi9(8o4K!p{Rd66i zKz3IdIx`Noe<9*zi!e!cj2d0JI3kob1dAxUiyfGFDzw*DzdAYm#}Jqv5gbpEZG2U7 zRg~9t&Q2*qf(2cGy2-{Ub@3uf&0ho+LG;mtE?k7ho2O|$p~`sgCvfQ5B zha@73e>7N1<}-rmu0aw+HA_@4N#_!q&nUvqC9apab4ko+3=!v&)Jw{_6wGIQU`fqq zazKo5J_}6C@?;5a4YLq2_nNlHkk&+7gbyu(O~93IQxa_ziURi{*oCSAn-OgpF{FvM z4IerQ))9jz!9Fq^I7z`kN*ZZ<;R-#L?tI`He-2kS2EgMnt`G|$ZdY*j`aaR&skna& z;hGmK`zzlRX0VK^NROERc%LjLH1O}uLJE-$N9?x8Bu(uBXy6&IgTF_rDxxGaArIur zxI&Yu#M1vQv+G+~7E!r7|EQV9MsF0VmNJ1<9%B-5Zj`aCW1Wgv*@T0^!$bsrly2K+ z)k_U|tar)Wph{|%aiW|A3%8bA?VMF7eO<4m--BruJl_&(AYGjTVu_a%F z7HOafZ18?E1#9QpB+gskp6r-1IKwUM_-R#50*R7L4d zPnS7yh%lqJYVy{j3)mQX5`_U%ra8hPSRLt>X?Kr=O|rEK^rhPl>cW<3%G&%GVglH; z2+f>g0gi6F)ggIY;X4Dl&uUb7G(Tz#+5?p&fK=|09QL+;wk=0`dq^9~ zp~JvE*3n+zp%RYB@OWtlWln!HEr&wBLrO|VY; zOvk@S?!D-@FOuIh7qa$K^Wnb=wBHi%g7e${Ss;&=)u(FogYS5erwLk=59b3(wlzw0vE%#%@l6O%)276LgllQ6m{f7MxSZ{s!+{=UD$z@dnI8*4>TuX`vC z*j``mPz1%nKtH5G!ANv0tSkwVoW%R^$veOms&RT_3*i z9sJP~2O}^M0A_9vVD8$n&tSUN{BKJw_Fn)DwyH8KT5SH|_)d12y=Ty1IJ9qMimkT9 zr)=76Ct8WUdZ6Cew<}t^4_*Bxj#a8ce~?_yafJ2$6;5~}9_ARZnleBuf1`n(VZn#7 zG93@i$VD zh0Nt#%K$8Af^*qKX_>waZ0+^=Meq5ne0>(=Q zcFZ~1`3BH^8wxmKfLE7Y*xxGb*m0WCRUAYk9FxVD_ zP%qDBZdZHNqPUY&b@rKA=%uACxhI#!WU)W@a$LQf3xW4bh@zuk{RyOK~k&o^Acv2m#vOoBIB#e8OJR>m;`zF{nbh?kOE^;b&e;kcUZ>#Iw*oMi zQ0}Hmzw22F>a*X)Q#tMBp>nLLPlVl22HaBf2dq;+ONVNz771% zwtP_F8}Y!SA&_w#xPhioATV{M;w;#LaSkW^g%^Z2ci3XRgXzC7BW^(?bI$N=$ho7A z&D2VkZfI>`oWY?6ztU%F^{x`N*hxA}fB4Cb`peRiZVU|S@!^{FSM+q_NZ~q|lO0t< zHLAM2gY|J#Uo~i*e{!KTKG1Mo?#&x@CDQZO9 ztf}lkbCs-vmUw|LMFr-I{^v$cQFfxq#Ib!Iw|Pvc?#f1ef6lp8R_gLBR~^qP3kgcv zdbCke!0)TR?p%9Ry~ps9 zNng#aQv5)H2SzqJ4B$lq!L7Ym$P`EPjp#F$tWd2Lgm~!1FSA5#jV?|35gf(*1^0jy z!We^qf0AOX?w3$~O^E2g9AEXIZg8ZKGDWpxeTq@LUU!HGVykKQ>A^_Onl>x$u!q;F zs#VtbH0#1~b2kiHqp%ynb{LW#q7eDvOJ^3+i07!y zs`q2PR74}maL+j+O$c}$_aFoSl$xVZ=;mzpe>F_2pY#y9Bil^k=Ei{?F>*Ay?2Y4V zuv6OlKzMNCOh_${t+GlaE%xz#lhVO0+OrkPnER}(X>SlNT+gPd(7D$#e4z-T`$fJhL{F%?GSl9!QcxZ88izC`$q&sa6`=R>?>jKbXRY zce@dL$7qC3As>ueCL$5DcRZ#@*X4E;MY#H}C5CKBxijq2L1+n#hH~Fxe?-=!d0XHl z8lq?kto%?s;tyx{bvUz#+Nd7iq}+0gG9r`&QI#7Yx8y!?OZ&e{BZj zi6k1~R$=zZrHA9_n}PP21q^p;HxE8{h8xeFl$Jt--FIpd(|V>V!#aSNN#U&NpKB*KQnV^b4+S#3FD1l|gv8owrsp5g&l@l19FxgloZ&Iawa|-zw7*(ET zNjvz;(@7P;$@fQSN<%rkU(yN;Ad6#h2$t+d@Ie}cs@sJ)iE+>CI2juBmC~xfk^*6&I+Ax3vB=@f@Hf91j>#l? zh?3~1tHgib++Kb6BhRCfm6^z*+jYcQl9aHPL_FeBvOFuIOyx{S72R&5yZE=x4vVFf zNxaqDt$%K6-O_Z|o0T5A-qN%;&5=f(SJ3qNxKJwAeQkz?DB_^A#xIX|3l5gYMIquF zT6x^m6)J9MT6No9Q&)O0HlP?b%f1ipm1*ks z;h&3Tn!py_0z{AaV*tlTH|P;ZsT_K+TboB3K!3QPGe!)OjYb2qBFVkm!vJP4*whaj zM+=PY&ac)$;$LRvVn|q7%4rbrmBQ1n+ZD#0#n#~dA84YRtxro9n?u#?ZT%5R^En{& zXavDFhD1B$nWTuMKqSU8pd!uVf3?Ax2EGkVC`l?FHnk1@FdOd@nL0A&LlB(FoFWKy zvVS}Qs9OX(m|j;yP34lu;~vHYi3jy>-RhOEyF6~Ye%P4audTb@*umb=+9NC&8iEdK zP_W%@KVLOT$x`kKZ!|(eEQ%8YD)G)h&>Y(Xi6}83@@q+KTdF6!p<44M8(>QJeliY5 z3I=CWw`N6NT+pcLHw5c?9jsfgv@&oCD1V$uEUL^|no%fr==Tqhe-`po1m(0~ITw*C z6jMn`+W%=`7g3gQ9<{}!;CR^R0Y`-|0+j7^4+m@C=$_{GXa}>U@kU!x$D>fjE|pHF zBe6LQrhQthZgJSJYAPr<4;#77ea?6`4K$Zbr6pmf9DvWC_bZ1T$8U6KIPk$f0)G_* zTzkQXaO`)3*MQut_YF;YIK=(R(!^B(e0Aej*ZbZtt+9V~Tbhh0jP4u14KI?!h9H3I zNe~%ls`Lr)CDCEo%22-|<|TM=$5h3)L3qLk6F37C8xIgfRo6788a%rwxgXo`6N8aA z5T1B*_FL@Hfx4L!1c_jo^vSSeUw;KAaMN7ItJ)5ATMabpY*ja>g9eg!iAwZt*E`EY z4XvA687y%@-{XRqrI~MGeeL_Y1rHp%K#|54s@~v!52X9Fj-DZxIm?Q4EF){k#$siR zZ4xFPXr=cy1T}WyT*SV)6P^ONhGScW*reK5!~PVnppt?$qbrPfG91sjp?P_zbZS<`4uH4IublO(}9@EX5TvzBtQim|+mJ&`QQ z%ddkyEmNjAC+tM4QfV5?gyArUZkWQzwdQEaIV+VKmAO|=;U?ylGsb6>g;&m#QMqKr znQ}HN%b*PZ6EMW4EaB2L<2ntXGbX*Zf3i5wyifb^#H*Oi3A(m2*w}&5+GQ8b$6o-x&ljkco@B8XR+2fcsVC zM*TxHk^B+fV_ZfBw2v%x?L$eHLE8`lS|8qT5HVc4;nsWJgvlBF@N@S;0`8+bAVS6M ze!DxqWc*2N-dNjLZ@asEPso&`g2HxxORw0SL%YX^;;!k2rhmSFZRjts4%q^gC)t8C zTIQH^2Y7eHEy?0D_L=5hf-}W~vkCLhwoVxrV%)h2+rrDyZ=(FRXA-}yc;acvGe88j zw&Xc0r6iBvEF1~Hc6vo4e3{^vt_?U^*Kp1F6vp#(Izs}PBAW2yK%PlXIr#p}|D>`$ z%T3HCF5(748h;K0UJAUQ93HTY`yc1$OhSIHZC`yy7v=xG(MML_xfmQTy^cB z>(<@#aei3pL+#hxQyB*vxF$|z^oqyP?sUJtppcJv3xE9@g^VZS?jJXoq$ruP{XYD~ zJpo8T|4j(_ClUI@x)l6P0L3go*Z;({qrR@o;6DMj7%Y~XXSH~9QRlf|emi%}pSVX( zFY)V)uKQ(oJ$Hg9N&8Yt@OUC6cNditKAoP$evt$5We&c`+K~*+ggrmFQg%Fj&qv?z+UFtCSiv0xXI`{}m91?9K53lNV;f0!=;!m-geruh)3F{{ZH$P51QYGxEt z)6LZU&qFVM9``q<>zAukrlH%=cc(kUB;D4uXpZe?TD`c$3rGdhV88ONc^Wq~W^39S z-SAjfym*HO+{1bGC>=k6!4H~x#SU@RW6b;JtHLuL4yL2~I=kHs&*l5U4vl%94E)6% zf5t`+*0qmG!cFJ)v=U_;uS6+h+9K%BP^6eN;_v_TSN=5q>h)h{W4Dh_)Uobe`|*`N zeysJNqeH!Ut`I*N&Nng%KrQ7V$4+AlsWqEzK^ z>Lt#Wo;96g!pk4_BKY1deuck@wVHIUf6kQB5XgfP%#xX(0Z}X`5J?f`LIz68C{0DM z-UI6Q%R+``xk_Xa_Qo%A&R--AyQP@ehsF)WA9i|}_@?7Sx??#DN7~w$nzkQem5$Xg zQWc4?kCv-k6?ikN&coX!{J62HY1`O8kzjn3&MiXf)MyovOWDGFP=R>2d$2hSJZVc@Xa1>D9H3U2}SqE~S+D8*; z2*Vt;EQ<&SGlG6yxyEg6Kfp~&mLa-Xqs@Pj;Xnk3cc!-0fR02N0*WiZ=mj)wd%Hh0 zXJ_=_x)m&r%s%#m*%SLt2cPY1f6pgD=@;BBi!90tb~o$Ir1wX0?hho|p1vE`G;TSC z)|&uStdCm@Nd-IQApo(_TVFGtc7x)4fhH0|MCC0}FfIgvt$i4f2&0Egg2Iq_g6)GU zU}rFvaZGA)ai`YrF6~4j+KJzOgbc_k3p&uf%@N5W+`&A&!VK{xGS@Fqe?Nd@(aW@A z#P_3+$tce`3O62;+1eKUtz=kt?r^Z}7K$rLRQT;?z|o8xa+Z=)S6aupAE8CE%e3|nOsH(B! zd%n{xaWu`ds4OmF%PcD6l3>rU!&uA zJvjRI7{(Gzh8-kG$5hG}KNE029=u{nil>Ho&*vh63CBLyP-n_iQ^VxEgcw8bv%^@^ zoI(n|(Pkp92jWEyv-DX8r%;h$t)w29vp{_*ePS7vCC8x# z%%~$_y@~I1@aYGAf8$dT*5=b_8++5)aeqxgUhkN-r$m6L^{mGDL_bq#x2@|~d;_`Z zIu<>RR==wnyT_sFQC~n7CD@Tn-lq#x=y2lG5{s&VTpFP5oNfXK;bp!JrQth=g>Xyq zJ%F+h#iY{IEZKI#>03>2u4m7xmv59ff6PEW0HT$ImV(G?fB%{j`Nf&p0|-~}MkHZ) zbEuH7>kTjFg@zP6Z+=OLZ^?fHwxV0$r5`0__BFt0E~8hu!2FsE>@Kp33hd-l>c!*f{V<|g5Y2h^k<47nG$+(ziDVZT><$6AZrgG)2uhnz@SumKu6UP@S ze2-|oFI3pfI|~){uoMTE6wk7If(>@dl%D|iGhixFH7`+hR-$TNqO<=7R1DK1k&vln zR1^hySE!i~{Cn^Z9JprNvr&UQECMk#lQ6n0f8#b1zWZ13NLMU`coE=KZEbC~lJ%y% zhpln#95OjjBFExd5*3oNoCJb+^b22q4JwJAq9pp)O>*%2-Q&%- zKS&;BEK5ZiJ${L}vdnN1rP?qdb@W(7KgFLDZf<{m{BfA~?GN0HCSgm$3pe;v)h%yl ze^Sag#~&51>)V+yaZ#@5`Sn)VxTGPAd_#>njDg;+D;wMiHsES3mPnZpyx(KDDaxkp z@=XD=wT-)FNsS`!@&idH>dm-J8Mg`=88cd4reDG`3;jvNBd#q=jgC@jn6f;2T*LhT z)D7$}w278FWPpu%DbxGw10O~U^OOE4ZobJjFUwk zm%W2ldD~Wtd_|8Sy@~yPuH$o}lgj%rUwIGDox^L|?zx3AoJLeF4d`lm1|`~(f9ymZ zgb#q|n;qRDAM`OA)k|3G0P>^Mp!XBn5EO2$-@k}Ac$bM5z!H^1EU z<^g?~6f)8#VbVs6_03N|Cs6_KegtPr@b;@4xrXz=gh`>fiay@_mk!KiPmx-dm`JCb zCEA~tqVvMZv2Ys93kQo?>BH`Ce<2kTrg_@O`F&uWj3wD{5YYUARV1_Ed_N|q0h4op z!Mk5039aE;{h0YfNF!7^9f`sN%gj>4vc$rHGt5Zi4fGK5iD4<2Mk@^y#7U=so72-y z$p9{Nq~Ww{V^4WSF$q$=_sSF%Ctf*XFwjqB{g{xwQfBNmjw^zWlUa6wf9D1`UW8(Z zOE@3mz2_#V2N0>42D8ir90HN~kSv?>?i9o(QzQvs>v3W417dK&06_Z@gdhV@$asT@ zv|A&F_#D#E3j_duK!LwXk1=oU$($erlVEj93HmFVB(55Z z>u~*y$O%i*^I7b;$az3y%mYJ^-+u)HD`kltB6uEHp$E&$Rw#lpaC`X*i@*wqB15?3 zjko(YZ}N2siKL}G$&w`PbESmSz#|1%kpe)wRO$0ya+ouzlYEuLOIW_8X8D4StyeGT z*}k*b`Bf<2CGos!x}|%`V;}@PE~s6Ux$lRSe$5x%>Wv<9-XNBr0XTgASyBg ziJagfwHZVr5=b{}69|$qqx0sIRx%C%?#y>zqdS4^WZtu7a|bR^eDJwz;`^7L&MN0q z`YnnI&F*LuJg@53&v9HyC4U|epaUJ1p`#!gh8TnXx$7?%`L2aGelW~>^E))Y3nHg< z8lp~_JXFeX1~5)a%?I9=#;do@uMDWE%Hn?zZA*KQO80S{#ze9G1ZsKCp2lD5W*zdh zmq7yK(MdLy;XagIIe68a@w@_$sZ)SERv!!l93q`=z0Iq}YgKs-x_`RMSKbVtmZk4) zcMG)ClAdUqH}Jcl(Lgk$51MsZB8?Ri4t`T@p0KUl(S@$AT9?!Tn}cWJ9KYOZB-1l+ zeBd~Yb`u(Q1BjaJcEnD5It544nCYDE^ie=stc;q@!MGQ$HgO>*Jc|cK+IsDK+BI>1 zf%&VR=krz7^}&X^FMsonrcj7Mmk%fCdaYKgA$||dtDp+C-hZWAM4CQMjf+$Cp62n# zn!3odCjQa@RN`SeVIi%U%?>u1hdq%Eb27%!LgP7SJ%OZ6Oy>Z0%`86}$o*6c#5Cp8 zsdoof=uf8ITgV+?XPE?28F41lqmVQ{fmt^W(50m(N1}FZ7k|tyQew%J^;VkgYxsPz zsCQJvl?8PHGPqNvJ7J`kHQ-OXCQIcpS`K9Kl-o-1XN_UI#Tm z3Tb{e8g)q_5Q^*xUppZ+|2nBB>j1RC-eajB0&BS%=}htl@+SJ|^w(7)Lxl9??bEFl zE;uvDUv0Z{D1Vjd9)_|$(?Qp^sn&V(M!io>jqL5!-Cw~=ip247f7GCBOII8tUI?#? zl4w`ys9j4V34Q<|huokLM)Z5h91*4LApA35+;LNhAieo^Et55lTp&kj*A@PA5V;VlxI_PNw!o;XO^| z15M>UO@#*1GDl+gepod&1hEB7QKtz599a!Q4@4E6-2h* z(G|YqT_&d(UeNNH6YXv&&EJKy5Y8e_o%|^$3c=(5BU^E2A*YUk_PHm*uA|WioJytB zwSPn291A3%u+ZR=$)s~(k0Fpvr=0fYemjGy^*~0S#y~%J8(;c%Q+2+Xx2LKyppwX7 zCrcJ*)RtN>@X}Rk%QRs|*ss!C+63yh1HB!FNy0F>ud(l@U<-*Ca!?P8hxM=kCWm*{ zZb2VC%3rgjD)Ry} zc_=aQ%(C8i_2j#nqx0|Cp~P<=_L{ruMUWXv&adLLM=n9-{?2&}<=`^{;=Ju;TfI+XMT;G8yxwf{Jv z=xeHEDc8s22|@_(8b+h`#-3O$gXnw*B=64L)w|V)HzrN>v~*l+wj3ly>@I+9c`ZGr)06;mMOzq-jm3SAXi@Tf&O>g?p&O55Z)sPg$L;POY$!)^83gm zWR(0i%wST_iW=;^qvKNQp&$Scp#*;g#Q5W{g%q#V>ei13!s2>8#jT_y94zl~>4`jB zib`C$p65-(|2ABvMPBJ!Ue@#eq`V>%!IQ1NlZAdfzjA3bF|VepbtYCKzk(?#lD{27 z>uUZkiBWJ0;

    AnQA2dq>{Xp*Lv>ZY6mJ8BC%OKK#aE0bz=$S7~z;WUg%Wq!iXJwiFLe(GaBXAZQj` zTPOqwLjp1j<`xP*qT%rr5-WcO5*<%raaiwugeYTL?_PYI;xUR9dF&8}um}YqbC?gQ zka^B*1@Hd|I;OD?>aOF2tDkM9LI-=3RiPeE5&_|!)e9NKGB|bpiY)X@8}@4QUgVF8DkXU0ObfLov@XxDZWZT?%l@qI8vz4jF%n;xQC}fVC*= zQlr;SQ*A3LR@H^m4ncKR?_nTdLuN3{>PU(rFeRCksRS7_J&{(`rhXQ}P)|K91w>w{ zCshn;|ABH~W$57$MS!=*FwG@UV0gk8Dp6ZpuuCDpi29^YL75M-gjBggCk&BmNK44~ z1}Y>EGD-9}+vbmrOm=^(U?^(XI9RoLhrM8tno5vuyIDEQbONd!EdmBmRx+Iid;qqy z<^pPvv?T#QKorVqo4VbI=#+XOeFccb^z`&KYqI5cAH9C8UsA${V_3=ns2T}Ig?->lYK+sg-$ znU{HWGTZfdp3w5uy10bcV4rnX$Sj?s^;V6ZUIpt+o}>d3q8R*8d%UeqU?VWHLceQqDSGr!DcXR28lESZmx54T{H{KRbth9nZ6!{5KM@epBid! z#smQEK<#_L^XJchQ)mtCr5PmY-5u27d|~c8Exx){y_S~4U{=+>7DrzSCBF6%ec1|L z4vqX}=nYmAqz|cF8l36M0E6Av!Y=BGy9o7uVNn^PkKI9lCj1c1q_6PQo#vVvP#CsMgx)AkR%NS>#dK|VW9 zJTyd^rFpgH3!%_T+(ye-XfJKhnz%jH8wOO5e2G{LVN?IjpF#bfMOjp}?$07qrJu!6 z%&@Zw{tJJKc~T$Kq$#R(vo41zW0=>dhnN@c4x|`9x`e>`7eD8zeEni5#({Fy8qqbJ zyQaLk9iu%wWc&Uio^XRLu{8ZNAe-W|{lb(lb1JgeD^%ms_T#zX3RbF3zw3W`GZwBf z@?k@2$fWt`%JTMgxBz3X{mQUOz<&*CxgMJCfp$1g3_-u#|tl?m4}bdnSJg z!=CNmi*KohjufXHCDp~Vn|4bfH)VdX;(8RttSxOfP2<$;R}32UL0I!<22F3qvaeU? zSz&)f`sM!zL%raGy>NYoruXt`Ccd;G?nu}#I-*iZJx34h@q&7lo1 zOTINnNsA(vJk8VmUf(~u{4uQt$4cfKLvMdhe_*H&0gLq}GsjcMJF@&BF5<^3AZ}k@ zpTBDuZtA}sK5`IWQ^LO;KDw{6pX90CZM1RK-_n)xDC4f1s`bwHfOJ(rdN{`0!ozv~ zJl*Mo=FumECuInV_ip~bI&aTMG1;Xd}slZYR(!0r$Ilq0`>V2~K&i#85!QSk={f2mAC#t@D*5^PUM3WKK==i3ze&@y9eYvj-+)f7ddGY5mzf9_8JP}m*<(2(iM0Mh}q9V47Y*pO8 z7!n0?MDM}##K?CVS)$vt(UN>Q1Pf6Z4-uUmfWSye6n#9B6R^SW;Q01Lx^B}pOAd9L zx`$<7U;9*6%PeZsve?hv#?B-dPmEp6qh|FM;t6Yiee86|@H9%wl6g|Zn)JZ|_TeIV zai2fzgTV;>;*XPH`EUwOw(9)MS*@HMqUTpfxzVz!lG@QruG;5HN=JX* zeLWVCaI>Y(y^IkbxU-9Pk=R8Q)lr_bx<3Gn=kKW8)QZDRd5EMWecX`+7^?9nLljyd z!oxn$*+W!>LR1U@E_YE0Kx{@2pb{t)@Bu))i%Q6m1a$jTk>GV~05ID{MG8duz=Ys` zB%D+KV`1%8E}aEuQ8sg>)){w^)Xu2jMAA2F>NiRI0H2(KHi+74S<3F=ld}*7BIpCX z(g6_I#^^p`;1QIIKHSS)#6*BFB(5G1mpI&^OdbMUc!0@t0EL0{sG>+H-gCcuxq~ha zN$B%?KzpcyfK*Hki0x7ZfdCQ3nDovKIj8Js0)P=gCOYv#Jkv25>X`% z)&(UDvI{*-7ZkE{0A}q0DH`rl1qFlQ0WIB;KAe`g98j9=VlRN=F?6PVbRj7sf*+_0 zFt4I?=og^~b|`}pPzGjwK$CC?RHdZRDTJ!c8eyKHm0v;^0O3pHH zPn)f5i5f;1B*uWbaLh~4i1g!B7q}$WC>UT&+Y}0%d6<<&oSGbWW;Y7p#G)Q*P;dk> z55!EH@?ne46vB#h2Xqf&n-DOHw6>8x<6BTOfz%rFHfvBLn>(P$Hnl_QldL;(kH;y* zLfW1AV+)-Cg>r`g+xUlCq{QBT{7bPlw}Ovx-km|VGek-bx+WS(6iDYvQ`=>5=sU8k z)NXMDZI9jhv}zY+Vb?S52MQ7lu~kd>agu}0+Zq}y*lg_P0#GO@Zsy@euia_WC}~8? z#u3cYB8h6du9G=+Olh&NHFwHNXsGU&Twz~H0|Be^-a2{-bQ(Ul_mDUHc>i2 zO!K!f`s%lO^wqz5%+)c)r2luCr&&~k|3Wu;W?y#=pI$E_t)uIWohWNcy8_W-w`YmQ z$t-PB&<+qB8lw}3a}+}RZ^UWqL?a~(kj~3GZ5O$HY)kvw$*Z>(?x>y7^{O%^+LRGC zAa!&4pVSl{7Q2;7Ld(A z7kL>c*;Cp?2-84!wcJqs+{<`J8pk2tG|nmXVyeRv>Vv?@xbA=6nA%kqQ=sa!Qkn~A z5YU~R&;UuLoKHi4ojLS^{ng;+sh1azy(BK9xV>!;zHV#k+4=g)4b7VCE!VV$L2yfG z67;pwlV7r)-N!@oJ+12Urg;nt`+d*Z^Op4XB(~R1^yTFtA8PJ?=J~eeMs)S7xFZj8 z=X9qN-hU!=(xR!N+2(hsXZhy$=pZ-Aw;ye4@^nv8I7ZYU=T%V3~UUp4$mFBAQ>T*v6fkM z>6Bsy?|JlV@H|90vKo>(%`AqJ!Z8ccs2_)W1G%in6%QRmcQG<_f31C#%o&KF4Ra*2 zw+yNn>HNqM5`YMgjDe6IB3TUPA(BV`9>06K$9p~!P!I`91&9`L4^=DxVZk%2q8SCl ztnmOCqF8_ptgVH-Au#I%-ix?Gxrp~%v<#wI52d5RHE4z|ZBQO2z}3qUn%D@vBKnEI zJ9?-p&>vJ12H*-9e_LTdSP902dZe_GFq43`P6kFWIWLm|QL%0$1po>}3W3G}*h@g* zfG-&r7?Jfbh>L-qKx^p~*_(M~sj&i17+9irZwyRM6tdQiBq-$_z>v@(NLWh}tu%E= z#L^!9D5xKZSc*6nsAnh~@hU7r8U-Q|F;@a!>5_8FjHD-te+>kaKIs>s91J3b1+AnP zRHLyy^%4Yn2}wsuHA6}gVj)qN@Cc*}SwS`uYdL!Oknt17pO(dJ7OCBczbRJbx*8WN%&_#}bupRckIPH;PSCU@ zyaOWoDM4Aa%YMBCPh z{T(IXf~0Tjl6ckD!7nAcI=Q`6hq(N>D#s@U>;xH;^x_~}g}O@UOv1roVr5$1k69~F zYf_F^S-!}}*sk>+;V`gB9A#IHlnH<(s2bnoFtf_Pv`OhJ3m9uE; zJ|(mJjNHX?O)@@N=J9XTXosArmZ{rq!%N#%#(cYiBA3uJ~pv1IXpHJ&V-DOoy z*5jIw^F_J5>NEMi4qW(5Q&{B#WCWTzQ?QZ=V6!my7xjYJQzh4Zk=N4|uZ})|K*jv% ztgMb^%PVNHID&A+X<2^QUv6nd7BDrj&}WEOKxmN}7*iYQ6ZQ~%vA#IXv*pz!uk$2- z{sEXenHl&|EPxrsA3B;$fNu(mrF8b*iz1nSb#<}4N^%toK3hzR%WPU-%nuOKLnz3I z1>53kM9d;WAf-Tn81IkY`K+FsSVj86ewKZ7i zEn>GJZ4tp`7NPPd^oKXTZkTVRz}j?w%f6y4;1EY?)on*<#eR;`G=iIWSfD6P7HKK~ zXSi3IBAPNI%n-eYm&xnpysYQ5(?h2!Tr{OCI#}3WrK?B$ucO1%wFgUfp3mn+b#?cQ z1sAOxG#w5NICT(Ik5p~5A;t=alb`zZ|(ziZ{y^! z^i~U*3EJHBj*v{dJtRCsl&p+G3OYQ6)4HXE<=L4XK*PQelKbC?!+MMmxU-p;hp1ue9RN zGF#WhC3sUz)_e>-SH+6Iot9&MTrQti<;Qw@V4{(@ma-t3S>m@&dupVAg_i1zNe!w7 zHFySWHtli`pJKxyZH*StE(~g`UC2T-!`f23iqvvYTc~J;_A4~J&M@7S2XtYWZpzBc zi-B#G$b=mz1H5MxaZpO8R~O^am_3hK_@!Ly!`G{wCCSLVWii$vjz) zi;8`Jv(v+tlQVXjk3STP$%D45aQZ<_^;Wdp03gvdFr~2y;wq9 zL-uK2ky%#h^gK0xY3x83zQ>$j@(;B4V)2rpQSTGa#pG8&ja#8U5W67-I zXRtj#oBdJn6(F#V7xWHa%oYWv0DplrkH2C*@ShQT^J5l&BL9s=&vSlC$NhZ53w}li z`h3b~bac<>{DLod$(Ji zwb#gt(pCG^en_FVRH%=x*!1}k2@(v7qc2jJ_qf;ey^KX21!;^z%1*^u`rZbeIQmov zZ3BHTqnj)Ju2H09p7u1*XAJZKO!JJcNf{C(Hp-BHQdAtAD7|Z~X!}50tC~8N7v)1L z*2i>>-lXT`_L?@9(dSK8(V?D7zgb)ZK%#3Z%3cFO*910=O#roqpfPRwrl%FGE5xg2 z6uJ?CNiPe zPB-d*MK)Nc-`Wo7{HrTOgoXp#C1D*y;zYl6oajp8O3R7ch2%0keG`a5ka z(K|0M(!zOAJlSou_u|R!6l7pL*+a_tFM-sqgXPVWq#gSPcPF^}qUX0xnWY!|qUYuC zOm?$vcivBD%Kmd5oZfG1;J=vWv*t&Cew)wU?Uf%jo7R7s9|hxu|2p|mu%9hI3hpoS zqu~G7@*~UFi%C(f#${C;kS%>nkG`cx-_oOR>CyjPdKAKDdK6+WJ&K~A9!1$tkD}U2 zkD}g4kD}?NN744uqv-nSQS=+>Q4H7VQFm_hiYXzw^hkB*JIAQ1UV5au^N8MHilBt) zQYO`%VC1N}E@e`p8y(fqrA$i1E@h(sJ+lCn#gRJXT%fvWCOCe>|%m#Eq+tD-v#l~qwI%PR6JyS`G6 zbbp#dPLOP}G@lPtmFhI*LVU`KbG$EN@RgW9YLhdgH$6{HB+yJdhzHO2IphdUIJy-1 zBJt=)AS4UdHpB7sdtPallv*rF6rzNMAfV#*ZbB+T5#hs%CKG9^395>+Zj20R)``4m zwH#gD%UNdDVVx3qMq-Xg%wV8pQ1sud)3&a@6`PA>9w{xFw|7>EdtBmdoB2yE%6~_Y zMUvRDk?SQ8&zf`W7R#@J{DaLVXGU+jIcA(D?%n1O@|XjFR)#&!2b2Sc-zvwo`!p{d zA$GbMP$Za@F_FtjF*Ag1St?Ox?LlcMLjj8pO5@GUA~$j9@bnZD^#3^4(tp4aO?T&UJ@&U6!KR9P|f9 zQ4)|Z5bq3O+ZmoH&&7g;Ba^|X$Uilw%k=h}_wRotqWt~+kMFjTYYO!_gnz}XL2X&r z-SXr{^YwvjaGA>HU>qH=k=5YaI=u+TqTDg8Q|bP1imrs_g8sW|@~S(rJ{W*H&pan; zil=$+jy#j5Z#Sy$YB!zE>*^LTIk?k`R6-0gCrsu3UrF zWX+xU3T2kE(KM^(`!6U*ovUgeLvXqPnr36Z@1aj&)L$2(%d5rJjPn4tGhT^mp2IQJ zMAwL_74r@n;}%Wzy9i60#UAk(Aqce0Vz38rzMFDr$fLv;z--21?0+va)dRyQzaoCC zhpGdHC$#NX(5Xw2%pzML<$)-PW5bXzhN3X`7_{Y7o=S4G1(t1f?2EFN$CE?ncHkA)67V%)%# z1ACez8V8L1>;aB3?|<~9&~qs)B5=I?)4J2w6fjxe>NR;KFAvQ6R)4!)S985m&h{%i zB`JJ1TePjjwn~kp921a~x{{U?Hej8O6B+aqcaOw~WB>cBIPjag)N=ewf(z-ft6#KJ z7{O*1P{d-R*L%6XZhn!-5-W6g%Ab_4n4xx(eVEOuUR;79pbRthq z#-_pH7|ejz^;cS;e_Q!5BULKzkHEe&FpZ6VyR8c_Q~>MV+&l?ApDKUbl9*6D2X78! zlprV}v5pe=W`AMgg(!(wEEh%)izvht#1r#ltT77^+9HP$V}WO_dO5`u42BFBW<4Eh zaf?yJW5^sb>zKTOv7r=N>mUfwfe@J>#9(Aq4g-;7M8v9g2%8W&Kw%Wi`^Q0|SJPgR zgswqDkV1h3Lm70go8dj)M}iPSD|Pp51#*y15Qzq%sed8L_Q?`KCV(XD5dHwwc8}S# zI5GHQ6uP@!9b*-TD8|g)M1MX8R>Dz0M`)=S68b+~#oSj85deTip-tQ56vz1W8sk0O z7Z8*;ZEkK{OOcxSPjd0*U?@?9bhrZV5zSomBvU<@15;@1WkRTDlO9cF_T~B{jp*v8 z9Y-KE#DBm61`dW#zyKnO!q~v@#+)?L@vt8oBqCp>h;_QrZz_SU%S^?o!b}=SBEQLG z=GVa_^0oX~r=p#romHa^Wj=4}S-PnNjJ7mpz34kRj)qXbfP3jc)@NkC&B%P5k=ZCC zTPP2zgqCVuba_vq6d+YQhlAHEEtZamn?CGqV}BmnNi;pi@);Qg{Ur00%B2KyDfA>} zd@rFfr^G2H9} zh%>W5c5QlVS+Dh8{jM@LJhh7UqskJBco4ZlmJ>No=Eg{8Vy?sgl(Hgd(1>R(`pbl3 zEQ~mj9b4eC$A_zbPC3FnboVH&g#I@c1b;$57Wti=%&Ng9*`Od<^>L2^!MG2aFS=Y| z3T0&5Wvdt0dOQR{7;87sb$Q*INoWSrx>TVL-h_Uvz!mgJ=|g_ly4SSD_QEmF5XF%z z+z}UHvPma_yXTmT3=D$=1yKHs8Se9uVP6JzB!Jdl zTFCb9j>R%yC4GS@-*a-F?^nC7<@IsdkR=01=71zMz@( zIk}cWc#ywyB!oQ19{4%N8S0z~_CSxgihaEiO;D0`93S7&j|edoNBo$7yM^g~kFpj$ zIhMG*K2IJ?I*hewk5M^Cdo}(w!~I{cP-$%j<`>82_aow7E`E3O>;?azRYiQ4u?qnc zm+}|^6$3FdGm~)NDSsN~QAX?-XC$FZkm16%Wtf-dw%>O1MSFGAr%k=58UB zV$P-uYaElxEN<3|?~-kiugm)Wda0C3`sVtFo3CGfCDY+G$$yy^X0eotWrA*1bWX{I zWtmeco=ch2ZlReFiVpDrEE^o+i=}18Svv71oKORFaMs#|WZDKWudbKUrOEf)a1qdo z!Fef|Neuw@hrj2X&+vdNbvz^73}Vf=*2gnOAjTP34*1OCxoU<-62ww4ooPB%&Y&~Q z03U-xpI)N-{eN)1nPp96=@1vPH-k>G)Ez|d866mz5N7~~!$0AzNsEOQmT>_uE4XsA zDZr3qmekiWP4?9_EN?-5SyEh!q@6Ra2rW%nrtKKqQBh}!$Sjjwjjxp*5mEfyxB03s z*7WCH+f=m5>9McNyQU3$>$2Iy!^fZ@wlY-K+_~|3tDW8yPj6>%6=1G2I`92{sryy zn>?HXs?G~kfu6IF~XkRXAP@->fzjzVVASYTdnPh?oBWY^H zp=QMx)jf25QPE~wZ1bOsE}RV)y)xIdM^If-{ImztFSq4w zTkfj>sL%TV^S&ga!|7WD^gt+b;$zB0%9$`hfPb&c+uM#p_t1W4gE;sXEGdYGDE@9H zpg1NVst*H7HD?c;Daas$Q?KTba%Q{*#IUPpKslC55ziDq@2;1^y5typ$HAU6XY7Sw zKMK$u>(Z!sHZ;q4I*j?3g5u{hcD|HCG6gwpDI8Ng3&KSoo{@LG*m* zk5&r^n>s^zZWn*M`U}+zBY_`aaqA7kBJ*+nt=(0*jlgWLR`FIBqSLgSP;ybE!}=3+QwP zWm*<4{CUPzy?de6L49V$dBK8_I|mh2mS*o&NSO1W6jPv&!J${z#wOohkbsn6W=_vZ zU_N&#FoSHY*+{c}lxBXxW~71WDaMre^zA~JhlS5B6qQ@Z)wEebzIeD!O%iK^K7Z^N zdEG?-dDzVF`l6*Jgnx?tkOcPCxy+=U^U0blG6#T~^Mo>6fw=+yY>Rw_RBf=J!3{!4 zDa@vSqO6&61@&dh$;yc)4NUStA8n22I-4qHQbYdFDM+k z7ZF_31%T(`a153X2zA+n(D`cSz@17BOEHiPFKzSoJ`xM6scDtdquUWPtMYrU^y(zF z8-St>l%rY;mSsT~f4@#;f(GDpl6T#{3hUsb zu=3Sf*xlrzdISYM7M3g|26!{V^zD4L9I2BILSL%Kcc7zHMkI!xshZ^>k%PE^|Iy{6 z4?`$2&QY75HzpmGTzkf|J*vz+HwA|}* zB3qF%o(8fGxx)7eN?)w$qm5}S04BiB)%I$XFRS@{d7x8*CR3ls;nvPj>qd5(RsW916GgYHyHdPeN>`4Qo zCQ~2zG<~ZpYW5Ij)a(xo zqRU)R)0n`aCYQl(!n6hJh?<^djXgW2y|7<3dkT0Ls@4n|&k^i%WotTWu`lESU$t60 zhU^Pb5k_u6BS{Ssby44ktxeH}l^W!xf1g+)%o!3O7q2ShbJTOhHPM{y$WK1zbK%cD@u)HaDQk_&AC{8xMU$tL8&pibg+`L zI}nF;^MSq;3`ZnE;dvQ6W=_%CG5|dYwGxVt(?M@bFEG{Pvxnf)(K4q8RJQJ1Wqa@? zD1~uOF+y5BJ`0vsv($+3oigBVi+j)t_`^ETQm^BSU0ZY*|1xZg9?=OnA4i=G!9OX> zp7h5Na(`xhJwJjBsX;tKjpo3tQ%@3*7LW_%_=+FFs-uIUNXWswcF~c}4YeVoGR;F1 z9Y?o5%;UoQL>ypad^S*GZm|mvv)#LM7V)IjRWyg1_ zOS5YZLga3W$nf4zYj@?!w?`MI<{)+9I6>&WoqYQn?9(`%{(_3T^=ZJCMSba`&_zR&+K%z=THop5QFelPW zt|**g*0~AV3!nSI9JJKqJ3ht9SP0p~hw@V~+aP8r3UC+~ByES1HX}*f_~B1srQx$= zRfJ*TBx{7zfq+qhI}x+YQf8Ekc{Fw(p??A|+KzgaLo;)zCVX9f1=SWX_DPTzoAa^@GAo7 zfO!PY1G>>pK&J-i_+p8FxG+Ypc1_#Q0fqm>7--x9po{N3N%g+kJv^DBa5?XujemCc zbew^0`ytq_@_x5%`fYj3sx4H>A6)>?!}=jLKM=w00aqVi2)k|n-!%hhWY2`wqAKS3!UKh~u&1&w+43jj@*@J-Sd29;g9KK=6s{$9cnmd`QHL z5ESHd zGnvtRG@>4tQ`hHh|Be4l_0fo8k5crw({@?Qdpip zRfUIN(7pLZ8r1*08oU{O)KdFkS_~Soqd0^gLHmD}zcehqcMVzA{S1Np$x-k$Y<++l zi9p0EDTb~|7$S+i`M<=@OKj-hqaPtS%Ow8LNJ1Z-rs1<(I=b@Z&DFmFe2?rBm$3^0 z6PFGp0Tlu+F7s!Kc1S63v zaY2zAlGvQHpiR6;H?8-?V3d7>u&SlPZ&atCl6-2@NtH^)ZV*(dgG?$?O;FAjXs!9`|*FKc6E4w7!Tm z?(^nV4-RwN5rchuE_1EJ?lJqz-s)w#Ec3EDht2DOLkkMK*#B6d-iibIdR3)q@%4y1 z?rhZRojAq3R&r0dUZi;^RGr4;S5IFZWU*s9ujTOb%Q*Zem_(H=woL}9zvlywsm`1A zQTF4@u-|`VO`e|1ef1*C`FB~QpMS4=>8GqV*ZOb{mJ#UH_pt@9v@h(G~;65Aw#lmZ)tKNt!$i3B7v5FV0HsoiV< z{^yxwA*3WqdAQVt8$gosqvedqaIK4#KT>WhH`sravpH-fY3@Nv_tp6fhk0qh9?eP| z-oirZp|tzd+U!4M#mZBuvL>w{PQ3NVQ(f#fo3*wg3NVUDdlgENh-JW}MAB&5T*anV z%7iT!XGDZe?dCObpv}UA`DqWi&uyibHbPn15!sO)_QVLJd#qHS*vE+Q5qWobBr%u; z6@7m&69Ns{9j_Y`GInczw0838aJv9$!{oNC(gA`7YW>>Z!7gOAGc(ZqP+B5J3VX$G zbdsXkoG}&NSX`j0j}c{swi*>-(u?0_`!UP?UTYw6Sd?xBUc9Tca%&4~8mZe@We?^u z?fHe7e0E#!v&Euz%Uxo~X?w_g%#h--WBz}K#(>dqS#I;h3>g@nQFG}gS+UHwN$L)1 z_i6N#Ztp@v_htUd_Q~Rp?d4gcXLjdZh;a(ujvX^je9CZB)M@oF<6!8X60GLd^d8;B z>L0$}{R*;=E&bh-$2z+8d_NqkO4>+bv8>BHF|R>}qYz~07MqqGFfEXXwJEb)y6=Bp zIWVc$x-w@HH_bfDy1jQKhFV~-%Dfi(rbls$yK&xchN<7#x#ST)Q=If^WaCb@V~lXn z2+Vpwx=6ZY51;}FIf6<90E%J)9?ys= z<~xeVSW*;WHbDL6052>8fcPb>+#O+s;TYlQxw`NXLt!McvmTs{y95G9YcVF_)#G80 zC=@B&W;pEw-(#B_V7$u~#;r$W6A`2c3+99(gDBa{1ZtR}Ou#0wuV|wY!NGsyB}QDt z)B1~1Bw0WZi#?j_QJxS7J#~z8OiP#{4hCt}#HT58NV6cY{h>D#-az*Ru^2(bKtmmm znQ%qWW32Y4CVh_{@jZ?t#vN)?ekMRKJ9<;bEKicsSwcFE)ZM5Yu@YTcdq3%sqeu$g zl6yDeNMN!OlJB6?Vxs$VWKw@2E|s_PBW5nGnX^;P{BG3DRm`oKlS`U8J4BJe%cFDX z4P;wFCJmK1ko%$02ZeXRX6*Vhkj@(ATtllq6SuEz|QMJQ(MG;evp7%eCPp1WdRVaMFnoV*jmk4~;H=7RCk0vOB(7VUK9bu$L0*WaPMO7DO$NhgO4ak*@_s+jNMgvN1 zDbBb?93crFd)7T-iegAcv=HY1D{<0;n9z2QkODQ+zG7^U zR0riiFb8KlOAG`YCsv}|`1fsWiE(ZI+X{yhD;QN8;Q)BwPyY9AIU6xgqny%r! z?OT;a;+xI@@aumz%dne5AJ~WWBN9T;wPUl|kIt z)@kZMZ|%Piz#x6noBKRH*bue2{$mhn;6ztT&zv@~H5qN9U_nsCy=s{sEGylV zRXuF54*rpa8Z6-1b4d^+KARh`>Ye%S=IS?nk2rUiu?qnchd?d?hd?d@hd?d^hd?d_ zw?Hlh73%^pH4 zgBAsgaa>7jSdGJQ4I?$zSYWF^kQ!R8!Di^}G)!nXk_p3sbmo zU*Ww6nSh+U58*%pdqD$z(#s+Q5DBmjQqaUZfX;)%8p=T-+CD(dqO=0A81V)!g_L*~ z#4V&o00WFroWlwMMko}r0w#sR#Q;pGc@9W%7y(oRu74aQtE7fnKp7)az^TwaAlQn; z4R-~MFwhYN05!+eff6vnBAe2JGFgji2aF3RPy!A$1W}b%qpo<_9yCq=8WzdBIE#(?Y0l0HZSU|Cpj$tFuXeG#&RRR~-O9rp(%s5lLI)t}AE z$p{pmE}wjxJw2WEXC)W}HXN|ydNeB@JSf<);2d$Ie#ZoIs!LS-rmhf^)CZ&m(BlOV zz~26L{;zTnCwqR4@-~ZmuO{{2w44CD?Y+92;__eLH!<%Mm0?Jf!rO^g6@t! zRRm;-1nPglj_S!pIib1vNA`?8XOG|l1pE=H0Tw?9%X=tY?R#Lj=v8|Ghy$?1~qOtM2SY zGK`h^OC0eU-`fEx12Xr?9Z)q!y?<3uA(_Ltc!Q`i;ocT+Em!c?d?&nRTsimJ$|r9f z;-}Udymqqaf=v2mA0g(Db8*MsbFNFgC#1P2(P-$N1zgz2aCSq-7P z_^JFn@1u+8@t*j(xV3xI!t^xBS@bxB_r}LU($e#^^#3Ct3yB@z7KnI`xqp%i;A8a< zbh29f^$AnQjye{$Ln@V)$JRD7wiRkpe4I?hRq&Z~5r0Mf}8F@Dmw(d`^P~jR{fb>`jvCx5grorH< z9d(5rGmsMs*nnY(4Hiqt>~*0GVrraSsHz2}0@i{~y$wA)fqyw+&luaFr{>5?Fi{e) ziZyuG0--pwrMuYTr6?ptbIYaVUQD2|##BKJU{6R24ppoCTk zk+5ge3g~p+l4%MkH6V#5i$Hsg8AjBv;5hX3T;V*CCyl8t>7Jo}pr?o?;%+_mh{y(# z1R?^cMm_h4buw;;v20P%q~iw0fJ`8OgAFN~QF20>)X*cP+PNf06%#2??AQ;_P(7~f zfL1(=gb~QUmo*^aE+l!}{MoAs9Lf4N(9%(1+&D?YJ}Jt-8& z(v$tf61Smw;Eg@9K$-{Z7(r+?7tlhjv1C8!D;@d1!H~C>C=2VbPn3&9 zZ)x!%7X?$3dMfgwM$`5LKm@OA@osRq?TLNT%rrx)dx4|So26CKx>O1tM5n=02*|-m z^_XH%pAJ+saeqvB^1329=6w>_vE6bg6G$FeiGA|^v5$rj22vJ*O4Y0a!ow`4`ODRR zVRJmC8=XXDW18B=Smjik%KVV5a@FDdmuHnN18Jb)|IJw?n!iU=QW}jV)+0!FDdRk` zbRm$rwWX#LkJRE&zg@-6x^VM^CnA^=P;yt6ejiQfCLlk7(1wj`LYr^yPM#}HXuN!Yri0??HTWD zE-8P9Y&}qRzqk__h;=G)2hauq%oU&&c+jNDoRhu>az-}QF+24s2m!s4GFr+5F``-8 z?pn$QeShi?cfr}vyjD_#gf=C~&MXQ|C^7{=M-aWVC&8!~iU7(V$6|hs_Jfi2##5{G z5l{DGnIDhcrOfACcW!6}<@p93theZ3y+HK|N>lvtq@=Vv@UcCbAnqUl4d4{{b>LS~ ztzs8WNrRJ2Lqng^JIh=AY*ADi&l8b(Sm*i(0&Mmom*rWs?3v-(n_A*Z3t6is@jDu`fA6M;7Qf zqJbjB-gH1B(6ysy;1t|qns2Eab->*mXoU4-@#Ly0Mj>d)u?QL;LUtva_gBXNgJbXAE;KN_YzYf@={`gs0U0$V2ToCUaiU1Qm zpY?~;;Nj?USQh+%ozBYZ*Dwj(d7B17b_#P`^(Xj{_9yn3Jz>Y}8T%)D!G2}0*a?3- zWqo$e25eAYU-#JsE7>RZsbZJxid}slUzHM!O>iAH zE+>K<3bL9KD0$Qcl`D5*Ec>eL~&B@vO1)g#f zo(}QEFN_;Uc)AQvuRD0+by$x!V%tG>IG-*coZkeS z-3PYgUrv7g{Rm+DwLiOh@@-a*rd5sVcv4=@hyBUT2uh6#iC<~QFN8ZMTL3lB@#7hK z5HQ!EXLInB$ibV=0T%p@)I~KN5BuNShFSS-)@9u9!}!yuznnh&XJR~3wT*vk$UP4w zZAmq4NOLP((i*i%YYx%)66bs^=TE={qq3l?oPo0RhvO?$ne%eiN4>eK7Fu&r4xz0a zPb<(R!7e9de^yRFhtM#GY}mg(zvzPwUC%*{#*HO{5>=Nlemd+=uRxtvl_~IjFnxCR zAqykbSD>lbfT) zb$>8{8R1_wD#6dyP;QPQ$q#;>ms9!*<>z@lD=*H6)V;ZgBj_qt(QQu4>nbuZEx!O2 z)9Ty80#Zz>h8IhbiT#`XyPVWrZP_b8y?gok&D*z)w%EG$H++F$;fuBW8~?uXzd{b2S~l zq*&XgX-$6ir5jKc-z&nrdGY+!%cCs9MB>+}l1~9fK@NBqRm#Gtu^S9)K+GfK$aG@4 z%kEw-^7ZR?$4{Q7{NeQb^?5yu0^XlCnPr86^%g7+`1pJXSel;65=l6l>P zk}Jmo6i?=(i*hm@)RPkOudWLfd%4ip$8X-BohHn-=IEgKhYB4D{p4TR7Btg6Xfd6G z7AfWaDf)j))}LZtI{kBf)_svumrwoU0z2UQifBe5P6_7=`e5fRRE0c_d^Y}(~?wl){_5a3z6!=Zi6 znoZ5HoK9B~r?p#}+!7XBo4AR&#r|d4gw}6jP}zU?P@khGPhY$|Zmnr!J`$2K`4#oq z&zSP_lJ(}4D^GiHiE6WLU%R}S?TGirgSgTB`W&#WE=T+ARg*wTijBm!>@t>Gak=cd$ z5xaj8&xBmUA@YnIHe1f5uw+97Hz_lzb+kA#o<`dny(iNmTP&N2a^YBt&z*SkC&evsyY*ETmYRBF=wNmFVOUv=fgZ3*#FRlh_L@lB`q83wFz% z6i%{duse<7Scsy7A)c*94Dr!^L=m?#Y>baA*aROAF+fd(h~;j)@g~pgCfQB$4I8FT zhE@oZQg`G!&)U&u+8n>ou9K+8Jhm{r$@qzzEn5cIC+sMoc$Qa4nNG`KpK_xif@6Oq z6D+jf-_}rck=3qU6hSTd&BbXT2@oATiBGXh{IUJd26T0YCLG&BS<7zUUVX%Ov1NNeyE`)?h-&7Z~t0}!{ zi261HpqKXC7#uedw(ddHGGT5H!qk6#5VqmCdWp8M0-CTL+GInz$ELTemq|rfkJ`DAfTiqs-ll?^v7nFH?UOwosON z4tp;)u)_oFWzV}pqvsio-e)APf+zPUaoeNjW$(M<;)Gc1M^-|X6Z;dm<+<%LeQGm( zf@hJ7-v@nL&xM!W-HLtW0v0?s54|E`y+485&RLh~3!CWExdNK|AaC3G=&}*7DqzQm zRR-U^(08ZIWUb>{Q9T=O;gWyXKDAw@Y(?kr*n2^m$&A8<`=D(7BiCihR1n24Bl;G3P&r%SI-Y+lHd1~2V>`EWkEEuVrQoK|Q zcg{(L2WDnIJORJx)>v~&Izz?N3MBn_S|Ld#@XOC?MplAU&^BYG5713qr*h?#vrc7d ze|D1$h6mteCkz*GG6$`(vY%*-lSC-%>s2DIH|DGpp($RzFIp0`h|!QBpQ9adI7P?y zfse+U(+NnqhRV^eLZRd=ZvpoD5Y92?&U|+2kgI%t!h+25Jaw)*?r@!}o>iSA&tPWR z=ec=;c|-UrpiBdu%{8#u{53#keWvlCf8tqKQ_fP)qw;)nRGzUrYaPp3>SXK3xhgOl59obZ8(sF)<*MFuEvzCDdDN zR8)=7g=EGc-mTzLoJh&YesPwFkvD;X@k!m5-L5<3P;CRf|!Xmf> z8ekdJtE}A|OYVY3Xo5RoF*L&xXn{PmLK`fFcIe;@R#A0Br^;iS;>lfbAM~hf9*D7C z=!3gqIot#H0{?l^ud=lv7Ozm*aUiPLjRBQs--}B&F=6lR5voCzm;Ul|_44&I!~sdz z$t3o9l}{Y^*;n>DuTF=5W6o5?M}BsW za@!}v@f~p{hgFV!9+xB_ApyxcmE-L(#<@>MRK9QK(jrWwD&IAK#w7u>ShqptTs6td z$7P(C*t$nyOy!q7K6`Ns@G-ycbS~98zb$tz&x7Zj-^uSEjQ#n8^Y=mLN*+!)|EzSb zb~^t)57(Uk#+_?9XR=RJJ~jbIzWHezq}K*Ws@8^Jb$ZB43wZI|N>7OPI2jjCBwQ){AH zqN%E#QMG8Q_jFWwO|6*`Rja1Xmq*p6>8fo}E!Fgvk*L}=efHa^IyBRD{f=dt**Y3k zr)FL}A61uTcAt!@TQmE*qUzBkT@h8UCPQeJ*@QB<@C8%v3H`#;_AnNTUDAPpHv uAPWUh2t`m73?)zsWsuWs{ZszD#%JVz2af^amzXyOAPG4$3MC~)Peuw?!C|cc delta 40056 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≠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 Yy9Rn)`no746OMogE<3xjwhHcl0L#{h5dZ)H diff --git a/doc/src/How2ReadData/How2ReadData.do.txt b/doc/src/How2ReadData/How2ReadData.do.txt index 863759c34..6df53fe52 100644 --- a/doc/src/How2ReadData/How2ReadData.do.txt +++ b/doc/src/How2ReadData/How2ReadData.do.txt @@ -317,7 +317,7 @@ from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error x = np.random.rand(100,1) -y = 2.0+ 5*x+0.5np.random.randn(100,1) +y = 2.0+ 5*x+0.5*np.random.randn(100,1) linreg = LinearRegression() linreg.fit(x,y) ypredict = linreg.predict(x) @@ -430,7 +430,7 @@ print (error(y)) !ec Similarly, using _R_, we can perform similar studies. The following _R_ code illustrates this. - +(more details on _R_ will be inserted later). ===== Non-Linear Least squares in R ===== !bblock @@ -478,7 +478,7 @@ display(data_pandas) ===== Examples ===== We present here several examples, with pertinent Python codes that we -will us to illustrate various machine learning methods and ways to +will use to illustrate various machine learning methods and ways to analyze, from simple to complex, various data sets. Many of these examples allow us to generate the data we want to analyze, following much of the same philosophy we discussed above when @@ -502,7 +502,7 @@ Here we will construct a model for cell growth based on a simple difference equa interval $\Delta t$ as $N$ cells would: $\Delta N \propto N$ o $N$ cells result in twice as many new individuals $\Delta N$ in time $2\Delta t$ as in time $\Delta t$: $\Delta N \propto\Delta t$ - o Same proportionality wrt death + o Same proportionality with respect to death o Proposed model: $\Delta N = b\Delta t N - d\Delta tN$ for some unknown constants $b$ (births) and $d$ (deaths) o Describe evolution in discrete time: $t_n=n\Delta t$ @@ -511,7 +511,7 @@ Here we will construct a model for cell growth based on a simple difference equa o Program model: `N[n+1] = N[n] + r*dt*N[n]` !eblock -The difference equation can be programmed in a simple was, and in order to get started we +The difference equation can be programmed in a simple way, and in order to get started we set $r=1.5$, $N^0=1$, $\Delta t=0.5$. The program reads !bc pycod @@ -520,13 +520,12 @@ import numpy as np t = np.linspace(0, 10, 21) # 20 intervals in [0, 10] dt = t[1] - t[0] N = np.zeros(t.size) - N[0] = 1 r = 0.5 for n in range(0, N.size-1, 1): N[n+1] = N[n] + r*dt*N[n] - print 'N[%d]=%.1f' % (n+1, N[n+1]) + print('N[%d]=%.1f' % (n+1, N[n+1])) !ec and it generates the following output !bc @@ -553,7 +552,7 @@ N[20]=86.7 !ec This forms our data which later will define our training set. In this case we defined the value of the parameter $r$. We could alternatively assume that we just received the -above data file and where asked to use find $r$. How can we estimate $r$ from data? +above data file and where asked to find $r$. How can we estimate $r$ from data? This will be one of our tasks later. We can use the difference equation with the experimental data !bt @@ -564,10 +563,11 @@ Suppose now that $N^{n+1}$ and $N^n$ are known from data. Then we could solve w \[ r = \frac{N^{n+1}-N^n}{N^n\Delta t} \] !et Suppose we set $t_1=600$, $t_2=1200$, -$N^1=140$ and $N^2=250$. We obtain then $r=0.0013$. The exact value is $r = 0.000694$ -The following code plot +$N^1=140$ and $N^2=250$. +The following code plots the data !bc pycod import numpy as np +import matplotlib.pyplot as plt # Estimate r data = np.loadtxt('ecoli.csv', delimiter=',') @@ -575,10 +575,9 @@ t_e = data[:,0] N_e = data[:,1] i = 2 # Data point (i,i+1) used to estimate r r = (N_e[i+1] - N_e[i])/(N_e[i]*(t_e[i+1] - t_e[i])) -print 'Estimated r=%.5f' % r +print('Estimated r=%.5f' % r) # Can experiment with r values and see if the model can # match the data better - T = 1200 # cell can divide after T sec t_max = 5*T # 5 generations in experiment t = np.linspace(0, t_max, 1000) @@ -589,7 +588,6 @@ N[0] = 100 for n in range(0, len(t)-1, 1): N[n+1] = N[n] + r*dt*N[n] -import matplotlib.pyplot as plt plt.plot(t, N, 'r-', t_e, N_e, 'bo') plt.xlabel('time [s]'); plt.ylabel('N') plt.legend(['model', 'experiment'], loc='upper left') @@ -767,7 +765,7 @@ parameters result in a slightly modified initial conditions, namely $H(0) = 34.91$ and $L(0)=3.857$. -The following Python demonstrates how we can use linear regression to fit for example the population of lynx. +The following Python code demonstrates how we can use linear regression to fit for example the population of lynx. Similarly, we have also used a decision tree algorithm to fit the lynx population data. As expected, the linear regression is not exactly impressive !bc pycod import numpy as np @@ -792,7 +790,7 @@ plt.show() -The similar code for linear regression in _R_ reads +The similar code for linear regression in _R_ reads (more details to come) !bc r HudsonBay = read.csv("src/Hudson_Bay.csv",header=T) fix(HudsonBay) @@ -890,7 +888,6 @@ Our task is to first set up an algorithm which simulates the above transactions $w_m\Delta m$. You will need to set up a value for the interval $\Delta m$ (typically $0.01-0.05$). That means you need to account for the number of times you register an income in the interval $m,m+\Delta m$. The number of times you register this income, represents the value that enters the histogram. - You will also need to find a criterion for when the equilibrium situation has been reached. !bc pycod #!/usr/bin/env python