Repository: 0809zheng/CS231n-assignment2019 Branch: master Commit: 3f5c85398663 Files: 83 Total size: 13.3 MB Directory structure: gitextract_bcs05ngm/ ├── README.md ├── assignment1/ │ ├── README.md │ ├── collectSubmission.sh │ ├── cs231n/ │ │ ├── classifiers/ │ │ │ ├── __init__.py │ │ │ ├── k_nearest_neighbor.py │ │ │ ├── linear_classifier.py │ │ │ ├── linear_svm.py │ │ │ ├── neural_net.py │ │ │ └── softmax.py │ │ ├── data_utils.py │ │ ├── datasets/ │ │ │ └── get_datasets.sh │ │ ├── features.py │ │ ├── gradient_check.py │ │ └── vis_utils.py │ ├── features.ipynb │ ├── frameworkpython │ ├── knn.ipynb │ ├── requirements.txt │ ├── softmax.ipynb │ ├── start_ipython_osx.sh │ ├── svm.ipynb │ └── two_layer_net.ipynb ├── assignment2/ │ ├── BatchNormalization.ipynb │ ├── ConvolutionalNetworks.ipynb │ ├── Dropout.ipynb │ ├── FullyConnectedNets.ipynb │ ├── PyTorch.ipynb │ ├── TensorFlow.ipynb │ ├── collectSubmission.sh │ ├── cs231n/ │ │ ├── classifiers/ │ │ │ ├── cnn.py │ │ │ └── fc_net.py │ │ ├── data_utils.py │ │ ├── datasets/ │ │ │ └── get_datasets.sh │ │ ├── fast_layers.py │ │ ├── gradient_check.py │ │ ├── im2col.py │ │ ├── im2col_cython.c │ │ ├── im2col_cython.cp37-win_amd64.pyd │ │ ├── im2col_cython.pyx │ │ ├── layer_utils.py │ │ ├── layers.py │ │ ├── optim.py │ │ ├── setup.py │ │ ├── solver.py │ │ └── vis_utils.py │ ├── frameworkpython │ ├── requirements.txt │ └── start_ipython_osx.sh └── assignment3/ ├── Generative_Adversarial_Networks_PyTorch.ipynb ├── Generative_Adversarial_Networks_TF.ipynb ├── LSTM_Captioning.ipynb ├── NetworkVisualization-PyTorch.ipynb ├── NetworkVisualization-TensorFlow.ipynb ├── RNN_Captioning.ipynb ├── StyleTransfer-PyTorch.ipynb ├── StyleTransfer-TensorFlow.ipynb ├── collectSubmission_pytorch.sh ├── collectSubmission_tensorflow.sh ├── cs231n/ │ ├── captioning_solver.py │ ├── classifiers/ │ │ ├── rnn.py │ │ └── squeezenet.py │ ├── coco_utils.py │ ├── data_utils.py │ ├── datasets/ │ │ ├── get_assignment3_data.sh │ │ ├── get_coco_captioning.sh │ │ ├── get_imagenet_val.sh │ │ └── get_squeezenet_tf.sh │ ├── fast_layers.py │ ├── gradient_check.py │ ├── im2col.py │ ├── im2col_cython.pyx │ ├── image_utils.py │ ├── layer_utils.py │ ├── layers.py │ ├── optim.py │ ├── rnn_layers.py │ └── setup.py ├── frameworkpython ├── gan-checks-tf.npz ├── requirements.txt ├── start_ipython_osx.sh ├── style-transfer-checks-tf.npz └── style-transfer-checks.npz ================================================ FILE CONTENTS ================================================ ================================================ FILE: README.md ================================================ # CS231n-assignment2019 CS231n 2019春季学期课程作业。 课程网站:http://cs231n.stanford.edu/syllabus.html ================================================ FILE: assignment1/README.md ================================================ Details about this assignment can be found [on the course webpage](http://cs231n.github.io/), under Assignment #1 of Spring 2019. ================================================ FILE: assignment1/collectSubmission.sh ================================================ #!/bin/bash #NOTE: DO NOT EDIT THIS FILE-- MAY RESULT IN INCOMPLETE SUBMISSIONS NOTEBOOKS="knn.ipynb svm.ipynb softmax.ipynb two_layer_net.ipynb features.ipynb" CODE="cs231n/classifiers/k_nearest_neighbor.py cs231n/classifiers/linear_classifier.py cs231n/classifiers/linear_svm.py cs231n/classifiers/softmax.py cs231n/classifiers/neural_net.py" LOCAL_DIR=`pwd` REMOTE_DIR="cs231n-2019-assignment1" ASSIGNMENT_NO=1 ZIP_FILENAME="a1.zip" C_R="\e[31m" C_G="\e[32m" C_BLD="\e[1m" C_E="\e[0m" FILES="" for FILE in "${NOTEBOOKS} ${CODE}" do if [ ! -f ${F} ]; then echo -e "${C_R}Required file ${FILE} not found, Exiting.${C_E}" exit 0 fi FILES="${FILES} ${LOCAL_DIR}/${FILE}" done echo -e "${C_BLD}### Zipping file ###${C_E}" rm -f ${ZIP_FILENAME} zip -r ${ZIP_FILENAME} . -x "*.git*" "*cs231n/datasets*" "*.ipynb_checkpoints*" "*README.md" "collectSubmission.sh" "*requirements.txt" "*__pycache__*" ".env/*" > assignment_zip.log echo "" echo -e "${C_BLD}### Submitting to myth ###${C_E}" echo "Type in your Stanford student ID (alphanumeric, *not* the 8-digit ID):" read -p "Student ID: " SUID echo "" echo -e "${C_BLD}### Copying to ${SUID}@myth.stanford.edu:${REMOTE_DIR} ###${C_E}" echo -e "${C_G}Note: if myth is under heavy use, this may hang: If this happens, rerun the script.${C_E}" FILES="${FILES} ${LOCAL_DIR}/${ZIP_FILENAME}" rsync -avP ${FILES} ${SUID}@myth.stanford.edu:${REMOTE_DIR} echo "" echo -e "${C_BLD}### Running remote submission script from ${SUID}@myth.stanford.edu:${REMOTE_DIR} ###${C_E}" ssh ${SUID}@myth.stanford.edu "cd ${REMOTE_DIR} && /afs/ir/class/cs231n/grading/submit ${ASSIGNMENT_NO} ${SUID} ${ZIP_FILENAME} && exit" ================================================ FILE: assignment1/cs231n/classifiers/__init__.py ================================================ from cs231n.classifiers.k_nearest_neighbor import * from cs231n.classifiers.linear_classifier import * ================================================ FILE: assignment1/cs231n/classifiers/k_nearest_neighbor.py ================================================ from builtins import range from builtins import object import numpy as np from past.builtins import xrange class KNearestNeighbor(object): """ a kNN classifier with L2 distance """ def __init__(self): pass def train(self, X, y): """ Train the classifier. For k-nearest neighbors this is just memorizing the training data. Inputs: - X: A numpy array of shape (num_train, D) containing the training data consisting of num_train samples each of dimension D. - y: A numpy array of shape (N,) containing the training labels, where y[i] is the label for X[i]. """ self.X_train = X self.y_train = y def predict(self, X, k=1, num_loops=0): """ Predict labels for test data using this classifier. Inputs: - X: A numpy array of shape (num_test, D) containing test data consisting of num_test samples each of dimension D. - k: The number of nearest neighbors that vote for the predicted labels. - num_loops: Determines which implementation to use to compute distances between training points and testing points. Returns: - y: A numpy array of shape (num_test,) containing predicted labels for the test data, where y[i] is the predicted label for the test point X[i]. """ if num_loops == 0: dists = self.compute_distances_no_loops(X) elif num_loops == 1: dists = self.compute_distances_one_loop(X) elif num_loops == 2: dists = self.compute_distances_two_loops(X) else: raise ValueError('Invalid value %d for num_loops' % num_loops) return self.predict_labels(dists, k=k) def compute_distances_two_loops(self, X): """ Compute the distance between each test point in X and each training point in self.X_train using a nested loop over both the training data and the test data. Inputs: - X: A numpy array of shape (num_test, D) containing test data. Returns: - dists: A numpy array of shape (num_test, num_train) where dists[i, j] is the Euclidean distance between the ith test point and the jth training point. """ num_test = X.shape[0] num_train = self.X_train.shape[0] dists = np.zeros((num_test, num_train)) for i in range(num_test): for j in range(num_train): ##################################################################### # TODO: # # Compute the l2 distance between the ith test point and the jth # # training point, and store the result in dists[i, j]. You should # # not use a loop over dimension, nor use np.linalg.norm(). # ##################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** dists[i, j] = np.sqrt(np.sum(np.square((X[i] - self.X_train[j])))) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists def compute_distances_one_loop(self, X): """ Compute the distance between each test point in X and each training point in self.X_train using a single loop over the test data. Input / Output: Same as compute_distances_two_loops """ num_test = X.shape[0] num_train = self.X_train.shape[0] dists = np.zeros((num_test, num_train)) for i in range(num_test): ####################################################################### # TODO: # # Compute the l2 distance between the ith test point and all training # # points, and store the result in dists[i, :]. # # Do not use np.linalg.norm(). # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** dists[i, :] = np.sqrt(np.sum(np.square((X[i]-self.X_train)), axis = 1)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists def compute_distances_no_loops(self, X): """ Compute the distance between each test point in X and each training point in self.X_train using no explicit loops. Input / Output: Same as compute_distances_two_loops """ num_test = X.shape[0] num_train = self.X_train.shape[0] dists = np.zeros((num_test, num_train)) ######################################################################### # TODO: # # Compute the l2 distance between all test points and all training # # points without using any explicit loops, and store the result in # # dists. # # # # You should implement this function using only basic array operations; # # in particular you should not use functions from scipy, # # nor use np.linalg.norm(). # # # # HINT: Try to formulate the l2 distance using matrix multiplication # # and two broadcast sums. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** num_test = X.shape[0] num_train = self.X_train.shape[0] dists = np.zeros((num_test, num_train)) dists = np.sqrt( np.sum(X**2, axis = 1, keepdims = True) + np.sum(self.X_train**2, axis = 1, keepdims = True).T - 2*np.dot(X, self.X_train.T) ) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return dists def predict_labels(self, dists, k=1): """ Given a matrix of distances between test points and training points, predict a label for each test point. Inputs: - dists: A numpy array of shape (num_test, num_train) where dists[i, j] gives the distance betwen the ith test point and the jth training point. Returns: - y: A numpy array of shape (num_test,) containing predicted labels for the test data, where y[i] is the predicted label for the test point X[i]. """ num_test = dists.shape[0] y_pred = np.zeros(num_test) for i in range(num_test): # A list of length k storing the labels of the k nearest neighbors to # the ith test point. closest_y = [] ######################################################################### # TODO: # # Use the distance matrix to find the k nearest neighbors of the ith # # testing point, and use self.y_train to find the labels of these # # neighbors. Store these labels in closest_y. # # Hint: Look up the function numpy.argsort. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** max_index = np.argsort(dists[i]) for j in range(k): index = max_index[j] closest_y.append(self.y_train[index]) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ######################################################################### # TODO: # # Now that you have found the labels of the k nearest neighbors, you # # need to find the most common label in the list closest_y of labels. # # Store this label in y_pred[i]. Break ties by choosing the smaller # # label. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** maxdir = {} sy = set(closest_y) for s in sy: count = closest_y.count(s) maxdir[s] = count y_pred[i] = int(max(maxdir, key = maxdir.get)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return y_pred ================================================ FILE: assignment1/cs231n/classifiers/linear_classifier.py ================================================ from __future__ import print_function from builtins import range from builtins import object import numpy as np from cs231n.classifiers.linear_svm import * from cs231n.classifiers.softmax import * from past.builtins import xrange class LinearClassifier(object): def __init__(self): self.W = None def train(self, X, y, learning_rate=1e-3, reg=1e-5, num_iters=100, batch_size=200, verbose=False): """ Train this linear classifier using stochastic gradient descent. Inputs: - X: A numpy array of shape (N, D) containing training data; there are N training samples each of dimension D. - y: A numpy array of shape (N,) containing training labels; y[i] = c means that X[i] has label 0 <= c < C for C classes. - learning_rate: (float) learning rate for optimization. - reg: (float) regularization strength. - num_iters: (integer) number of steps to take when optimizing - batch_size: (integer) number of training examples to use at each step. - verbose: (boolean) If true, print progress during optimization. Outputs: A list containing the value of the loss function at each training iteration. """ num_train, dim = X.shape num_classes = np.max(y) + 1 # assume y takes values 0...K-1 where K is number of classes if self.W is None: # lazily initialize W self.W = 0.001 * np.random.randn(dim, num_classes) # Run stochastic gradient descent to optimize W loss_history = [] for it in range(num_iters): X_batch = None y_batch = None ######################################################################### # TODO: # # Sample batch_size elements from the training data and their # # corresponding labels to use in this round of gradient descent. # # Store the data in X_batch and their corresponding labels in # # y_batch; after sampling X_batch should have shape (batch_size, dim) # # and y_batch should have shape (batch_size,) # # # # Hint: Use np.random.choice to generate indices. Sampling with # # replacement is faster than sampling without replacement. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** indices = np.random.choice(num_train,batch_size,replace = False) X_batch = X[indices] y_batch = y[indices] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** # evaluate loss and gradient loss, grad = self.loss(X_batch, y_batch, reg) loss_history.append(loss) # perform parameter update ######################################################################### # TODO: # # Update the weights using the gradient and the learning rate. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** loss, grad = self.loss(X_batch, y_batch, reg) loss_history.append(loss) self.W -= learning_rate*grad # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** if verbose and it % 100 == 0: print('iteration %d / %d: loss %f' % (it, num_iters, loss)) return loss_history def predict(self, X): """ Use the trained weights of this linear classifier to predict labels for data points. Inputs: - X: A numpy array of shape (N, D) containing training data; there are N training samples each of dimension D. Returns: - y_pred: Predicted labels for the data in X. y_pred is a 1-dimensional array of length N, and each element is an integer giving the predicted class. """ y_pred = np.zeros(X.shape[0]) ########################################################################### # TODO: # # Implement this method. Store the predicted labels in y_pred. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** scores = X.dot(self.W) y_pred = np.argsort(scores,axis = 1)[:,-1] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return y_pred def loss(self, X_batch, y_batch, reg): """ Compute the loss function and its derivative. Subclasses will override this. Inputs: - X_batch: A numpy array of shape (N, D) containing a minibatch of N data points; each point has dimension D. - y_batch: A numpy array of shape (N,) containing labels for the minibatch. - reg: (float) regularization strength. Returns: A tuple containing: - loss as a single float - gradient with respect to self.W; an array of the same shape as W """ pass class LinearSVM(LinearClassifier): """ A subclass that uses the Multiclass SVM loss function """ def loss(self, X_batch, y_batch, reg): return svm_loss_vectorized(self.W, X_batch, y_batch, reg) class Softmax(LinearClassifier): """ A subclass that uses the Softmax + Cross-entropy loss function """ def loss(self, X_batch, y_batch, reg): return softmax_loss_vectorized(self.W, X_batch, y_batch, reg) ================================================ FILE: assignment1/cs231n/classifiers/linear_svm.py ================================================ from builtins import range import numpy as np from random import shuffle from past.builtins import xrange def svm_loss_naive(W, X, y, reg): """ Structured SVM loss function, naive implementation (with loops). Inputs have dimension D, there are C classes, and we operate on minibatches of N examples. Inputs: - W: A numpy array of shape (D, C) containing weights. - X: A numpy array of shape (N, D) containing a minibatch of data. - y: A numpy array of shape (N,) containing training labels; y[i] = c means that X[i] has label c, where 0 <= c < C. - reg: (float) regularization strength Returns a tuple of: - loss as single float - gradient with respect to weights W; an array of same shape as W """ dW = np.zeros(W.shape) # initialize the gradient as zero # compute the loss and the gradient num_classes = W.shape[1] num_train = X.shape[0] loss = 0.0 for i in range(num_train): scores = X[i].dot(W) correct_class_score = scores[y[i]] for j in range(num_classes): if j == y[i]: continue margin = scores[j] - correct_class_score + 1 # note delta = 1 if margin > 0: loss += margin # Right now the loss is a sum over all training examples, but we want it # to be an average instead so we divide by num_train. loss /= num_train # Add regularization to the loss. loss += reg * np.sum(W * W) ############################################################################# # TODO: # # Compute the gradient of the loss function and store it dW. # # Rather that first computing the loss and then computing the derivative, # # it may be simpler to compute the derivative at the same time that the # # loss is being computed. As a result you may need to modify some of the # # code above to compute the gradient. # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** for i in range(num_train): scores = X[i].dot(W) index = y[i] for j in range(num_classes): if j != index and scores[j] >= scores[index]-1: dW[:,j] += X[i] dW[:,index] -= X[i] dW /= num_train dW += 2*reg*W # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return loss, dW def svm_loss_vectorized(W, X, y, reg): """ Structured SVM loss function, vectorized implementation. Inputs and outputs are the same as svm_loss_naive. """ loss = 0.0 dW = np.zeros(W.shape) # initialize the gradient as zero ############################################################################# # TODO: # # Implement a vectorized version of the structured SVM loss, storing the # # result in loss. # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** num_train = X.shape[0] scores = X.dot(W) rightscore = scores[np.arange(num_train), y] scores = scores - rightscore.reshape(-1, 1) + 1. scores[scores <= 0] = 0 scores[np.arange(num_train), y] = 0 loss = np.sum(scores)/num_train # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################# # TODO: # # Implement a vectorized version of the gradient for the structured SVM # # loss, storing the result in dW. # # # # Hint: Instead of computing the gradient from scratch, it may be easier # # to reuse some of the intermediate values that you used to compute the # # loss. # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** C = W.shape[1] mask = np.zeros((num_train, C)) scores[scores > 0] = 1 mask += scores mask[np.arange(num_train), y] = -np.sum(scores,axis = 1) dW = X.T.dot(mask)/num_train dW += 2*reg*W # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return loss, dW ================================================ FILE: assignment1/cs231n/classifiers/neural_net.py ================================================ from __future__ import print_function from builtins import range from builtins import object import numpy as np import matplotlib.pyplot as plt from past.builtins import xrange class TwoLayerNet(object): """ A two-layer fully-connected neural network. The net has an input dimension of N, a hidden layer dimension of H, and performs classification over C classes. We train the network with a softmax loss function and L2 regularization on the weight matrices. The network uses a ReLU nonlinearity after the first fully connected layer. In other words, the network has the following architecture: input - fully connected layer - ReLU - fully connected layer - softmax The outputs of the second fully-connected layer are the scores for each class. """ def __init__(self, input_size, hidden_size, output_size, std=1e-4): """ Initialize the model. Weights are initialized to small random values and biases are initialized to zero. Weights and biases are stored in the variable self.params, which is a dictionary with the following keys: W1: First layer weights; has shape (D, H) b1: First layer biases; has shape (H,) W2: Second layer weights; has shape (H, C) b2: Second layer biases; has shape (C,) Inputs: - input_size: The dimension D of the input data. - hidden_size: The number of neurons H in the hidden layer. - output_size: The number of classes C. """ self.params = {} self.params['W1'] = std * np.random.randn(input_size, hidden_size) self.params['b1'] = np.zeros(hidden_size) self.params['W2'] = std * np.random.randn(hidden_size, output_size) self.params['b2'] = np.zeros(output_size) def loss(self, X, y=None, reg=0.0): """ Compute the loss and gradients for a two layer fully connected neural network. Inputs: - X: Input data of shape (N, D). Each X[i] is a training sample. - y: Vector of training labels. y[i] is the label for X[i], and each y[i] is an integer in the range 0 <= y[i] < C. This parameter is optional; if it is not passed then we only return scores, and if it is passed then we instead return the loss and gradients. - reg: Regularization strength. Returns: If y is None, return a matrix scores of shape (N, C) where scores[i, c] is the score for class c on input X[i]. If y is not None, instead return a tuple of: - loss: Loss (data loss and regularization loss) for this batch of training samples. - grads: Dictionary mapping parameter names to gradients of those parameters with respect to the loss function; has the same keys as self.params. """ # Unpack variables from the params dictionary W1, b1 = self.params['W1'], self.params['b1'] W2, b2 = self.params['W2'], self.params['b2'] N, D = X.shape # Compute the forward pass scores = None ############################################################################# # TODO: Perform the forward pass, computing the class scores for the input. # # Store the result in the scores variable, which should be an array of # # shape (N, C). # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** z1 = X.dot(W1)+b1 a1 = np.maximum(0, z1) scores = a1.dot(W2)+b2 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** # If the targets are not given then jump out, we're done if y is None: return scores # Compute the loss loss = None ############################################################################# # TODO: Finish the forward pass, and compute the loss. This should include # # both the data loss and L2 regularization for W1 and W2. Store the result # # in the variable loss, which should be a scalar. Use the Softmax # # classifier loss. # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** exp_scores = np.exp(scores-np.max(scores, axis = 1, keepdims = True)) final_scores = exp_scores/np.sum(exp_scores, axis=1, keepdims = True) loss = np.sum(-np.log(final_scores[np.arange(N),y]))/N loss += reg*np.sum(np.square(W1)) loss += reg*np.sum(np.square(W2)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** # Backward pass: compute gradients grads = {} ############################################################################# # TODO: Compute the backward pass, computing the derivatives of the weights # # and biases. Store the results in the grads dictionary. For example, # # grads['W1'] should store the gradient on W1, and be a matrix of same size # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** dexp_scores = np.ones(exp_scores.shape)/np.sum(exp_scores, axis=1, keepdims = True) dexp_scores[np.arange(N), y] -= 1/exp_scores[np.arange(N), y] dexp_scores /= N dscores = exp_scores*dexp_scores db2 = np.sum(dscores,axis=0) dW2 = a1.T.dot(dscores) da1 = dscores.dot(W2.T) dz1 = da1 dz1[z1 <= 0] = 0 db1 = np.sum(dz1, axis=0) dW1 = X.T.dot(dz1) dW1 += 2*reg*W1 dW2 += 2*reg*W2 grads['W1'] = dW1 grads['b1'] = db1 grads['W2'] = dW2 grads['b2'] = db2 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return loss, grads def train(self, X, y, X_val, y_val, learning_rate=1e-3, learning_rate_decay=0.95, reg=5e-6, num_iters=100, batch_size=200, verbose=False): """ Train this neural network using stochastic gradient descent. Inputs: - X: A numpy array of shape (N, D) giving training data. - y: A numpy array f shape (N,) giving training labels; y[i] = c means that X[i] has label c, where 0 <= c < C. - X_val: A numpy array of shape (N_val, D) giving validation data. - y_val: A numpy array of shape (N_val,) giving validation labels. - learning_rate: Scalar giving learning rate for optimization. - learning_rate_decay: Scalar giving factor used to decay the learning rate after each epoch. - reg: Scalar giving regularization strength. - num_iters: Number of steps to take when optimizing. - batch_size: Number of training examples to use per step. - verbose: boolean; if true print progress during optimization. """ num_train = X.shape[0] iterations_per_epoch = max(num_train / batch_size, 1) # Use SGD to optimize the parameters in self.model loss_history = [] train_acc_history = [] val_acc_history = [] for it in range(num_iters): X_batch = None y_batch = None ######################################################################### # TODO: Create a random minibatch of training data and labels, storing # # them in X_batch and y_batch respectively. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** incides = np.random.choice(num_train,batch_size,replace = True) X_batch = X[incides] y_batch = y[incides] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** # Compute loss and gradients using the current minibatch loss, grads = self.loss(X_batch, y=y_batch, reg=reg) loss_history.append(loss) ######################################################################### # TODO: Use the gradients in the grads dictionary to update the # # parameters of the network (stored in the dictionary self.params) # # using stochastic gradient descent. You'll need to use the gradients # # stored in the grads dictionary defined above. # ######################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** self.params['W1'] -= learning_rate*grads['W1'] self.params['W2'] -= learning_rate*grads['W2'] self.params['b1'] -= learning_rate*grads['b1'] self.params['b2'] -= learning_rate*grads['b2'] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** if verbose and it % 100 == 0: print('iteration %d / %d: loss %f' % (it, num_iters, loss)) # Every epoch, check train and val accuracy and decay learning rate. if it % iterations_per_epoch == 0: # Check accuracy train_acc = (self.predict(X_batch) == y_batch).mean() val_acc = (self.predict(X_val) == y_val).mean() train_acc_history.append(train_acc) val_acc_history.append(val_acc) # Decay learning rate learning_rate *= learning_rate_decay return { 'loss_history': loss_history, 'train_acc_history': train_acc_history, 'val_acc_history': val_acc_history, } def predict(self, X): """ Use the trained weights of this two-layer network to predict labels for data points. For each data point we predict scores for each of the C classes, and assign each data point to the class with the highest score. Inputs: - X: A numpy array of shape (N, D) giving N D-dimensional data points to classify. Returns: - y_pred: A numpy array of shape (N,) giving predicted labels for each of the elements of X. For all i, y_pred[i] = c means that X[i] is predicted to have class c, where 0 <= c < C. """ y_pred = None ########################################################################### # TODO: Implement this function; it should be VERY simple! # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** scores = np.maximum(X.dot(self.params['W1']) + self.params['b1'], 0).dot(self.params['W2']) + self.params['b2'] y_pred = np.argsort(scores,axis = 1)[:,-1] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return y_pred ================================================ FILE: assignment1/cs231n/classifiers/softmax.py ================================================ from builtins import range import numpy as np from random import shuffle from past.builtins import xrange def softmax_loss_naive(W, X, y, reg): """ Softmax loss function, naive implementation (with loops) Inputs have dimension D, there are C classes, and we operate on minibatches of N examples. Inputs: - W: A numpy array of shape (D, C) containing weights. - X: A numpy array of shape (N, D) containing a minibatch of data. - y: A numpy array of shape (N,) containing training labels; y[i] = c means that X[i] has label c, where 0 <= c < C. - reg: (float) regularization strength Returns a tuple of: - loss as single float - gradient with respect to weights W; an array of same shape as W """ # Initialize the loss and gradient to zero. loss = 0.0 dW = np.zeros_like(W) ############################################################################# # TODO: Compute the softmax loss and its gradient using explicit loops. # # Store the loss in loss and the gradient in dW. If you are not careful # # here, it is easy to run into numeric instability. Don't forget the # # regularization! # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** num_train, dim = X.shape classes = W.shape[1] scores = X.dot(W) sta_scores = scores - np.max(scores, axis = 1, keepdims = True) #Numerical Stability exp_scores = np.exp(sta_scores) final_scores = exp_scores/np.sum(exp_scores, axis = 1, keepdims = True) for i in range(num_train): loss -= np.log(final_scores[i,y[i]]) loss /= num_train loss += reg*np.sum(np.square(W)) for i in range(num_train): for d in range(dim): for c in range(classes): dW[d, c] += (final_scores[i, c]*X[i, d]) if c == y[i]: dW[d, c] -= X[i, d] dW /= num_train dW += 2*reg*W # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return loss, dW def softmax_loss_vectorized(W, X, y, reg): """ Softmax loss function, vectorized version. Inputs and outputs are the same as softmax_loss_naive. """ # Initialize the loss and gradient to zero. loss = 0.0 dW = np.zeros_like(W) ############################################################################# # TODO: Compute the softmax loss and its gradient using no explicit loops. # # Store the loss in loss and the gradient in dW. If you are not careful # # here, it is easy to run into numeric instability. Don't forget the # # regularization! # ############################################################################# # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** num_train, dim = X.shape classes = W.shape[1] scores = X.dot(W) sta_scores = scores - np.max(scores, axis = 1, keepdims = True) #Numerical Stability exp_scores = np.exp(sta_scores) final_scores = exp_scores/np.sum(exp_scores, axis = 1, keepdims = True) loss = -np.sum(np.log(final_scores[np.arange(num_train), y]))/num_train loss += reg*np.sum(np.square(W)) mask = final_scores.copy() mask[np.arange(num_train), y] -= 1 dW = X.T.dot(mask)/num_train dW += 2*reg*W # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** return loss, dW ================================================ FILE: assignment1/cs231n/data_utils.py ================================================ from __future__ import print_function from builtins import range from six.moves import cPickle as pickle import numpy as np import os from imageio import imread import platform def load_pickle(f): version = platform.python_version_tuple() if version[0] == '2': return pickle.load(f) elif version[0] == '3': return pickle.load(f, encoding='latin1') raise ValueError("invalid python version: {}".format(version)) def load_CIFAR_batch(filename): """ load single batch of cifar """ with open(filename, 'rb') as f: datadict = load_pickle(f) X = datadict['data'] Y = datadict['labels'] X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("float") Y = np.array(Y) return X, Y def load_CIFAR10(ROOT): """ load all of cifar """ xs = [] ys = [] for b in range(1,6): f = os.path.join(ROOT, 'data_batch_%d' % (b, )) X, Y = load_CIFAR_batch(f) xs.append(X) ys.append(Y) Xtr = np.concatenate(xs) Ytr = np.concatenate(ys) del X, Y Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch')) return Xtr, Ytr, Xte, Yte def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000, subtract_mean=True): """ Load the CIFAR-10 dataset from disk and perform preprocessing to prepare it for classifiers. These are the same steps as we used for the SVM, but condensed to a single function. """ # Load the raw CIFAR-10 data cifar10_dir = 'cs231n/datasets/cifar-10-batches-py' X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir) # Subsample the data mask = list(range(num_training, num_training + num_validation)) X_val = X_train[mask] y_val = y_train[mask] mask = list(range(num_training)) X_train = X_train[mask] y_train = y_train[mask] mask = list(range(num_test)) X_test = X_test[mask] y_test = y_test[mask] # Normalize the data: subtract the mean image if subtract_mean: mean_image = np.mean(X_train, axis=0) X_train -= mean_image X_val -= mean_image X_test -= mean_image # Transpose so that channels come first X_train = X_train.transpose(0, 3, 1, 2).copy() X_val = X_val.transpose(0, 3, 1, 2).copy() X_test = X_test.transpose(0, 3, 1, 2).copy() # Package data into a dictionary return { 'X_train': X_train, 'y_train': y_train, 'X_val': X_val, 'y_val': y_val, 'X_test': X_test, 'y_test': y_test, } def load_tiny_imagenet(path, dtype=np.float32, subtract_mean=True): """ Load TinyImageNet. Each of TinyImageNet-100-A, TinyImageNet-100-B, and TinyImageNet-200 have the same directory structure, so this can be used to load any of them. Inputs: - path: String giving path to the directory to load. - dtype: numpy datatype used to load the data. - subtract_mean: Whether to subtract the mean training image. Returns: A dictionary with the following entries: - class_names: A list where class_names[i] is a list of strings giving the WordNet names for class i in the loaded dataset. - X_train: (N_tr, 3, 64, 64) array of training images - y_train: (N_tr,) array of training labels - X_val: (N_val, 3, 64, 64) array of validation images - y_val: (N_val,) array of validation labels - X_test: (N_test, 3, 64, 64) array of testing images. - y_test: (N_test,) array of test labels; if test labels are not available (such as in student code) then y_test will be None. - mean_image: (3, 64, 64) array giving mean training image """ # First load wnids with open(os.path.join(path, 'wnids.txt'), 'r') as f: wnids = [x.strip() for x in f] # Map wnids to integer labels wnid_to_label = {wnid: i for i, wnid in enumerate(wnids)} # Use words.txt to get names for each class with open(os.path.join(path, 'words.txt'), 'r') as f: wnid_to_words = dict(line.split('\t') for line in f) for wnid, words in wnid_to_words.items(): wnid_to_words[wnid] = [w.strip() for w in words.split(',')] class_names = [wnid_to_words[wnid] for wnid in wnids] # Next load training data. X_train = [] y_train = [] for i, wnid in enumerate(wnids): if (i + 1) % 20 == 0: print('loading training data for synset %d / %d' % (i + 1, len(wnids))) # To figure out the filenames we need to open the boxes file boxes_file = os.path.join(path, 'train', wnid, '%s_boxes.txt' % wnid) with open(boxes_file, 'r') as f: filenames = [x.split('\t')[0] for x in f] num_images = len(filenames) X_train_block = np.zeros((num_images, 3, 64, 64), dtype=dtype) y_train_block = wnid_to_label[wnid] * \ np.ones(num_images, dtype=np.int64) for j, img_file in enumerate(filenames): img_file = os.path.join(path, 'train', wnid, 'images', img_file) img = imread(img_file) if img.ndim == 2: ## grayscale file img.shape = (64, 64, 1) X_train_block[j] = img.transpose(2, 0, 1) X_train.append(X_train_block) y_train.append(y_train_block) # We need to concatenate all training data X_train = np.concatenate(X_train, axis=0) y_train = np.concatenate(y_train, axis=0) # Next load validation data with open(os.path.join(path, 'val', 'val_annotations.txt'), 'r') as f: img_files = [] val_wnids = [] for line in f: img_file, wnid = line.split('\t')[:2] img_files.append(img_file) val_wnids.append(wnid) num_val = len(img_files) y_val = np.array([wnid_to_label[wnid] for wnid in val_wnids]) X_val = np.zeros((num_val, 3, 64, 64), dtype=dtype) for i, img_file in enumerate(img_files): img_file = os.path.join(path, 'val', 'images', img_file) img = imread(img_file) if img.ndim == 2: img.shape = (64, 64, 1) X_val[i] = img.transpose(2, 0, 1) # Next load test images # Students won't have test labels, so we need to iterate over files in the # images directory. img_files = os.listdir(os.path.join(path, 'test', 'images')) X_test = np.zeros((len(img_files), 3, 64, 64), dtype=dtype) for i, img_file in enumerate(img_files): img_file = os.path.join(path, 'test', 'images', img_file) img = imread(img_file) if img.ndim == 2: img.shape = (64, 64, 1) X_test[i] = img.transpose(2, 0, 1) y_test = None y_test_file = os.path.join(path, 'test', 'test_annotations.txt') if os.path.isfile(y_test_file): with open(y_test_file, 'r') as f: img_file_to_wnid = {} for line in f: line = line.split('\t') img_file_to_wnid[line[0]] = line[1] y_test = [wnid_to_label[img_file_to_wnid[img_file]] for img_file in img_files] y_test = np.array(y_test) mean_image = X_train.mean(axis=0) if subtract_mean: X_train -= mean_image[None] X_val -= mean_image[None] X_test -= mean_image[None] return { 'class_names': class_names, 'X_train': X_train, 'y_train': y_train, 'X_val': X_val, 'y_val': y_val, 'X_test': X_test, 'y_test': y_test, 'class_names': class_names, 'mean_image': mean_image, } def load_models(models_dir): """ Load saved models from disk. This will attempt to unpickle all files in a directory; any files that give errors on unpickling (such as README.txt) will be skipped. Inputs: - models_dir: String giving the path to a directory containing model files. Each model file is a pickled dictionary with a 'model' field. Returns: A dictionary mapping model file names to models. """ models = {} for model_file in os.listdir(models_dir): with open(os.path.join(models_dir, model_file), 'rb') as f: try: models[model_file] = load_pickle(f)['model'] except pickle.UnpicklingError: continue return models def load_imagenet_val(num=None): """Load a handful of validation images from ImageNet. Inputs: - num: Number of images to load (max of 25) Returns: - X: numpy array with shape [num, 224, 224, 3] - y: numpy array of integer image labels, shape [num] - class_names: dict mapping integer label to class name """ imagenet_fn = 'cs231n/datasets/imagenet_val_25.npz' if not os.path.isfile(imagenet_fn): print('file %s not found' % imagenet_fn) print('Run the following:') print('cd cs231n/datasets') print('bash get_imagenet_val.sh') assert False, 'Need to download imagenet_val_25.npz' f = np.load(imagenet_fn) X = f['X'] y = f['y'] class_names = f['label_map'].item() if num is not None: X = X[:num] y = y[:num] return X, y, class_names ================================================ FILE: assignment1/cs231n/datasets/get_datasets.sh ================================================ # Get CIFAR10 wget http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz tar -xzvf cifar-10-python.tar.gz rm cifar-10-python.tar.gz ================================================ FILE: assignment1/cs231n/features.py ================================================ from __future__ import print_function from builtins import zip from builtins import range from past.builtins import xrange import matplotlib import numpy as np from scipy.ndimage import uniform_filter def extract_features(imgs, feature_fns, verbose=False): """ Given pixel data for images and several feature functions that can operate on single images, apply all feature functions to all images, concatenating the feature vectors for each image and storing the features for all images in a single matrix. Inputs: - imgs: N x H X W X C array of pixel data for N images. - feature_fns: List of k feature functions. The ith feature function should take as input an H x W x D array and return a (one-dimensional) array of length F_i. - verbose: Boolean; if true, print progress. Returns: An array of shape (N, F_1 + ... + F_k) where each column is the concatenation of all features for a single image. """ num_images = imgs.shape[0] if num_images == 0: return np.array([]) # Use the first image to determine feature dimensions feature_dims = [] first_image_features = [] for feature_fn in feature_fns: feats = feature_fn(imgs[0].squeeze()) assert len(feats.shape) == 1, 'Feature functions must be one-dimensional' feature_dims.append(feats.size) first_image_features.append(feats) # Now that we know the dimensions of the features, we can allocate a single # big array to store all features as columns. total_feature_dim = sum(feature_dims) imgs_features = np.zeros((num_images, total_feature_dim)) imgs_features[0] = np.hstack(first_image_features).T # Extract features for the rest of the images. for i in range(1, num_images): idx = 0 for feature_fn, feature_dim in zip(feature_fns, feature_dims): next_idx = idx + feature_dim imgs_features[i, idx:next_idx] = feature_fn(imgs[i].squeeze()) idx = next_idx if verbose and i % 1000 == 999: print('Done extracting features for %d / %d images' % (i+1, num_images)) return imgs_features def rgb2gray(rgb): """Convert RGB image to grayscale Parameters: rgb : RGB image Returns: gray : grayscale image """ return np.dot(rgb[...,:3], [0.299, 0.587, 0.144]) def hog_feature(im): """Compute Histogram of Gradient (HOG) feature for an image Modified from skimage.feature.hog http://pydoc.net/Python/scikits-image/0.4.2/skimage.feature.hog Reference: Histograms of Oriented Gradients for Human Detection Navneet Dalal and Bill Triggs, CVPR 2005 Parameters: im : an input grayscale or rgb image Returns: feat: Histogram of Gradient (HOG) feature """ # convert rgb to grayscale if needed if im.ndim == 3: image = rgb2gray(im) else: image = np.at_least_2d(im) sx, sy = image.shape # image size orientations = 9 # number of gradient bins cx, cy = (8, 8) # pixels per cell gx = np.zeros(image.shape) gy = np.zeros(image.shape) gx[:, :-1] = np.diff(image, n=1, axis=1) # compute gradient on x-direction gy[:-1, :] = np.diff(image, n=1, axis=0) # compute gradient on y-direction grad_mag = np.sqrt(gx ** 2 + gy ** 2) # gradient magnitude grad_ori = np.arctan2(gy, (gx + 1e-15)) * (180 / np.pi) + 90 # gradient orientation n_cellsx = int(np.floor(sx / cx)) # number of cells in x n_cellsy = int(np.floor(sy / cy)) # number of cells in y # compute orientations integral images orientation_histogram = np.zeros((n_cellsx, n_cellsy, orientations)) for i in range(orientations): # create new integral image for this orientation # isolate orientations in this range temp_ori = np.where(grad_ori < 180 / orientations * (i + 1), grad_ori, 0) temp_ori = np.where(grad_ori >= 180 / orientations * i, temp_ori, 0) # select magnitudes for those orientations cond2 = temp_ori > 0 temp_mag = np.where(cond2, grad_mag, 0) orientation_histogram[:,:,i] = uniform_filter(temp_mag, size=(cx, cy))[round(cx/2)::cx, round(cy/2)::cy].T return orientation_histogram.ravel() def color_histogram_hsv(im, nbin=10, xmin=0, xmax=255, normalized=True): """ Compute color histogram for an image using hue. Inputs: - im: H x W x C array of pixel data for an RGB image. - nbin: Number of histogram bins. (default: 10) - xmin: Minimum pixel value (default: 0) - xmax: Maximum pixel value (default: 255) - normalized: Whether to normalize the histogram (default: True) Returns: 1D vector of length nbin giving the color histogram over the hue of the input image. """ ndim = im.ndim bins = np.linspace(xmin, xmax, nbin+1) hsv = matplotlib.colors.rgb_to_hsv(im/xmax) * xmax imhist, bin_edges = np.histogram(hsv[:,:,0], bins=bins, density=normalized) imhist = imhist * np.diff(bin_edges) # return histogram return imhist ================================================ FILE: assignment1/cs231n/gradient_check.py ================================================ from __future__ import print_function from builtins import range from past.builtins import xrange import numpy as np from random import randrange def eval_numerical_gradient(f, x, verbose=True, h=0.00001): """ a naive implementation of numerical gradient of f at x - f should be a function that takes a single argument - x is the point (numpy array) to evaluate the gradient at """ fx = f(x) # evaluate function value at original point grad = np.zeros_like(x) # iterate over all indexes in x it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite']) while not it.finished: # evaluate function at x+h ix = it.multi_index oldval = x[ix] x[ix] = oldval + h # increment by h fxph = f(x) # evalute f(x + h) x[ix] = oldval - h fxmh = f(x) # evaluate f(x - h) x[ix] = oldval # restore # compute the partial derivative with centered formula grad[ix] = (fxph - fxmh) / (2 * h) # the slope if verbose: print(ix, grad[ix]) it.iternext() # step to next dimension return grad def eval_numerical_gradient_array(f, x, df, h=1e-5): """ Evaluate a numeric gradient for a function that accepts a numpy array and returns a numpy array. """ grad = np.zeros_like(x) it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite']) while not it.finished: ix = it.multi_index oldval = x[ix] x[ix] = oldval + h pos = f(x).copy() x[ix] = oldval - h neg = f(x).copy() x[ix] = oldval grad[ix] = np.sum((pos - neg) * df) / (2 * h) it.iternext() return grad def eval_numerical_gradient_blobs(f, inputs, output, h=1e-5): """ Compute numeric gradients for a function that operates on input and output blobs. We assume that f accepts several input blobs as arguments, followed by a blob where outputs will be written. For example, f might be called like: f(x, w, out) where x and w are input Blobs, and the result of f will be written to out. Inputs: - f: function - inputs: tuple of input blobs - output: output blob - h: step size """ numeric_diffs = [] for input_blob in inputs: diff = np.zeros_like(input_blob.diffs) it = np.nditer(input_blob.vals, flags=['multi_index'], op_flags=['readwrite']) while not it.finished: idx = it.multi_index orig = input_blob.vals[idx] input_blob.vals[idx] = orig + h f(*(inputs + (output,))) pos = np.copy(output.vals) input_blob.vals[idx] = orig - h f(*(inputs + (output,))) neg = np.copy(output.vals) input_blob.vals[idx] = orig diff[idx] = np.sum((pos - neg) * output.diffs) / (2.0 * h) it.iternext() numeric_diffs.append(diff) return numeric_diffs def eval_numerical_gradient_net(net, inputs, output, h=1e-5): return eval_numerical_gradient_blobs(lambda *args: net.forward(), inputs, output, h=h) def grad_check_sparse(f, x, analytic_grad, num_checks=10, h=1e-5): """ sample a few random elements and only return numerical in this dimensions. """ for i in range(num_checks): ix = tuple([randrange(m) for m in x.shape]) oldval = x[ix] x[ix] = oldval + h # increment by h fxph = f(x) # evaluate f(x + h) x[ix] = oldval - h # increment by h fxmh = f(x) # evaluate f(x - h) x[ix] = oldval # reset grad_numerical = (fxph - fxmh) / (2 * h) grad_analytic = analytic_grad[ix] rel_error = (abs(grad_numerical - grad_analytic) / (abs(grad_numerical) + abs(grad_analytic))) print('numerical: %f analytic: %f, relative error: %e' %(grad_numerical, grad_analytic, rel_error)) ================================================ FILE: assignment1/cs231n/vis_utils.py ================================================ from builtins import range from past.builtins import xrange from math import sqrt, ceil import numpy as np def visualize_grid(Xs, ubound=255.0, padding=1): """ Reshape a 4D tensor of image data to a grid for easy visualization. Inputs: - Xs: Data of shape (N, H, W, C) - ubound: Output grid will have values scaled to the range [0, ubound] - padding: The number of blank pixels between elements of the grid """ (N, H, W, C) = Xs.shape grid_size = int(ceil(sqrt(N))) grid_height = H * grid_size + padding * (grid_size - 1) grid_width = W * grid_size + padding * (grid_size - 1) grid = np.zeros((grid_height, grid_width, C)) next_idx = 0 y0, y1 = 0, H for y in range(grid_size): x0, x1 = 0, W for x in range(grid_size): if next_idx < N: img = Xs[next_idx] low, high = np.min(img), np.max(img) grid[y0:y1, x0:x1] = ubound * (img - low) / (high - low) # grid[y0:y1, x0:x1] = Xs[next_idx] next_idx += 1 x0 += W + padding x1 += W + padding y0 += H + padding y1 += H + padding # grid_max = np.max(grid) # grid_min = np.min(grid) # grid = ubound * (grid - grid_min) / (grid_max - grid_min) return grid def vis_grid(Xs): """ visualize a grid of images """ (N, H, W, C) = Xs.shape A = int(ceil(sqrt(N))) G = np.ones((A*H+A, A*W+A, C), Xs.dtype) G *= np.min(Xs) n = 0 for y in range(A): for x in range(A): if n < N: G[y*H+y:(y+1)*H+y, x*W+x:(x+1)*W+x, :] = Xs[n,:,:,:] n += 1 # normalize to [0,1] maxg = G.max() ming = G.min() G = (G - ming)/(maxg-ming) return G def vis_nn(rows): """ visualize array of arrays of images """ N = len(rows) D = len(rows[0]) H,W,C = rows[0][0].shape Xs = rows[0][0] G = np.ones((N*H+N, D*W+D, C), Xs.dtype) for y in range(N): for x in range(D): G[y*H+y:(y+1)*H+y, x*W+x:(x+1)*W+x, :] = rows[y][x] # normalize to [0,1] maxg = G.max() ming = G.min() G = (G - ming)/(maxg-ming) return G ================================================ FILE: assignment1/features.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Image features exercise\n", "*Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the [assignments page](http://vision.stanford.edu/teaching/cs231n/assignments.html) on the course website.*\n", "\n", "We have seen that we can achieve reasonable performance on an image classification task by training a linear classifier on the pixels of the input image. In this exercise we will show that we can improve our classification performance by training linear classifiers not on raw pixels but on features that are computed from the raw pixels.\n", "\n", "All of your work for this exercise will be done in this notebook." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "import random\n", "import numpy as np\n", "from cs231n.data_utils import load_CIFAR10\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading extenrnal modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## Load data\n", "Similar to previous exercises, we will load CIFAR-10 data from disk." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "from cs231n.features import color_histogram_hsv, hog_feature\n", "\n", "def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000):\n", " # Load the raw CIFAR-10 data\n", " cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n", "\n", " # Cleaning up variables to prevent loading data multiple times (which may cause memory issue)\n", " try:\n", " del X_train, y_train\n", " del X_test, y_test\n", " print('Clear previously loaded data.')\n", " except:\n", " pass\n", "\n", " X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n", " \n", " # Subsample the data\n", " mask = list(range(num_training, num_training + num_validation))\n", " X_val = X_train[mask]\n", " y_val = y_train[mask]\n", " mask = list(range(num_training))\n", " X_train = X_train[mask]\n", " y_train = y_train[mask]\n", " mask = list(range(num_test))\n", " X_test = X_test[mask]\n", " y_test = y_test[mask]\n", " \n", " return X_train, y_train, X_val, y_val, X_test, y_test\n", "\n", "X_train, y_train, X_val, y_val, X_test, y_test = get_CIFAR10_data()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## Extract Features\n", "For each image we will compute a Histogram of Oriented\n", "Gradients (HOG) as well as a color histogram using the hue channel in HSV\n", "color space. We form our final feature vector for each image by concatenating\n", "the HOG and color histogram feature vectors.\n", "\n", "Roughly speaking, HOG should capture the texture of the image while ignoring\n", "color information, and the color histogram represents the color of the input\n", "image while ignoring texture. As a result, we expect that using both together\n", "ought to work better than using either alone. Verifying this assumption would\n", "be a good thing to try for your own interest.\n", "\n", "The `hog_feature` and `color_histogram_hsv` functions both operate on a single\n", "image and return a feature vector for that image. The extract_features\n", "function takes a set of images and a list of feature functions and evaluates\n", "each feature function on each image, storing the results in a matrix where\n", "each column is the concatenation of all feature vectors for a single image." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true, "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Done extracting features for 1000 / 49000 images\n", "Done extracting features for 2000 / 49000 images\n", "Done extracting features for 3000 / 49000 images\n", "Done extracting features for 4000 / 49000 images\n", "Done extracting features for 5000 / 49000 images\n", "Done extracting features for 6000 / 49000 images\n", "Done extracting features for 7000 / 49000 images\n", "Done extracting features for 8000 / 49000 images\n", "Done extracting features for 9000 / 49000 images\n", "Done extracting features for 10000 / 49000 images\n", "Done extracting features for 11000 / 49000 images\n", "Done extracting features for 12000 / 49000 images\n", "Done extracting features for 13000 / 49000 images\n", "Done extracting features for 14000 / 49000 images\n", "Done extracting features for 15000 / 49000 images\n", "Done extracting features for 16000 / 49000 images\n", "Done extracting features for 17000 / 49000 images\n", "Done extracting features for 18000 / 49000 images\n", "Done extracting features for 19000 / 49000 images\n", "Done extracting features for 20000 / 49000 images\n", "Done extracting features for 21000 / 49000 images\n", "Done extracting features for 22000 / 49000 images\n", "Done extracting features for 23000 / 49000 images\n", "Done extracting features for 24000 / 49000 images\n", "Done extracting features for 25000 / 49000 images\n", "Done extracting features for 26000 / 49000 images\n", "Done extracting features for 27000 / 49000 images\n", "Done extracting features for 28000 / 49000 images\n", "Done extracting features for 29000 / 49000 images\n", "Done extracting features for 30000 / 49000 images\n", "Done extracting features for 31000 / 49000 images\n", "Done extracting features for 32000 / 49000 images\n", "Done extracting features for 33000 / 49000 images\n", "Done extracting features for 34000 / 49000 images\n", "Done extracting features for 35000 / 49000 images\n", "Done extracting features for 36000 / 49000 images\n", "Done extracting features for 37000 / 49000 images\n", "Done extracting features for 38000 / 49000 images\n", "Done extracting features for 39000 / 49000 images\n", "Done extracting features for 40000 / 49000 images\n", "Done extracting features for 41000 / 49000 images\n", "Done extracting features for 42000 / 49000 images\n", "Done extracting features for 43000 / 49000 images\n", "Done extracting features for 44000 / 49000 images\n", "Done extracting features for 45000 / 49000 images\n", "Done extracting features for 46000 / 49000 images\n", "Done extracting features for 47000 / 49000 images\n", "Done extracting features for 48000 / 49000 images\n", "Done extracting features for 49000 / 49000 images\n" ] } ], "source": [ "from cs231n.features import *\n", "\n", "num_color_bins = 10 # Number of bins in the color histogram\n", "feature_fns = [hog_feature, lambda img: color_histogram_hsv(img, nbin=num_color_bins)]\n", "X_train_feats = extract_features(X_train, feature_fns, verbose=True)\n", "X_val_feats = extract_features(X_val, feature_fns)\n", "X_test_feats = extract_features(X_test, feature_fns)\n", "\n", "# Preprocessing: Subtract the mean feature\n", "mean_feat = np.mean(X_train_feats, axis=0, keepdims=True)\n", "X_train_feats -= mean_feat\n", "X_val_feats -= mean_feat\n", "X_test_feats -= mean_feat\n", "\n", "# Preprocessing: Divide by standard deviation. This ensures that each feature\n", "# has roughly the same scale.\n", "std_feat = np.std(X_train_feats, axis=0, keepdims=True)\n", "X_train_feats /= std_feat\n", "X_val_feats /= std_feat\n", "X_test_feats /= std_feat\n", "\n", "# Preprocessing: Add a bias dimension\n", "X_train_feats = np.hstack([X_train_feats, np.ones((X_train_feats.shape[0], 1))])\n", "X_val_feats = np.hstack([X_val_feats, np.ones((X_val_feats.shape[0], 1))])\n", "X_test_feats = np.hstack([X_test_feats, np.ones((X_test_feats.shape[0], 1))])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train SVM on features\n", "Using the multiclass SVM code developed earlier in the assignment, train SVMs on top of the features extracted above; this should achieve better results than training SVMs directly on top of raw pixels." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "code" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "lr 1.000000e-09 reg 5.000000e+04 train accuracy: 0.090714 val accuracy: 0.093000\n", "lr 1.000000e-09 reg 5.000000e+05 train accuracy: 0.111184 val accuracy: 0.101000\n", "lr 1.000000e-09 reg 5.000000e+06 train accuracy: 0.413245 val accuracy: 0.414000\n", "lr 1.000000e-08 reg 5.000000e+04 train accuracy: 0.106082 val accuracy: 0.092000\n", "lr 1.000000e-08 reg 5.000000e+05 train accuracy: 0.416102 val accuracy: 0.417000\n", "lr 1.000000e-08 reg 5.000000e+06 train accuracy: 0.412061 val accuracy: 0.421000\n", "lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.413184 val accuracy: 0.414000\n", "lr 1.000000e-07 reg 5.000000e+05 train accuracy: 0.410347 val accuracy: 0.403000\n", "lr 1.000000e-07 reg 5.000000e+06 train accuracy: 0.336694 val accuracy: 0.323000\n", "best validation accuracy achieved during cross-validation: 0.421000\n" ] } ], "source": [ "# Use the validation set to tune the learning rate and regularization strength\n", "\n", "from cs231n.classifiers.linear_classifier import LinearSVM\n", "\n", "learning_rates = [1e-9, 1e-8, 1e-7]\n", "regularization_strengths = [5e4, 5e5, 5e6]\n", "\n", "results = {}\n", "best_val = -1\n", "best_svm = None\n", "\n", "################################################################################\n", "# TODO: #\n", "# Use the validation set to set the learning rate and regularization strength. #\n", "# This should be identical to the validation that you did for the SVM; save #\n", "# the best trained classifer in best_svm. You might also want to play #\n", "# with different numbers of bins in the color histogram. If you are careful #\n", "# you should be able to get accuracy of near 0.44 on the validation set. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "for learning_rate in learning_rates:\n", " for regularization_strength in regularization_strengths:\n", " svm = LinearSVM()\n", " loss_hist = svm.train(X_train_feats, y_train, learning_rate=learning_rate, \n", " reg=regularization_strength, num_iters=1500, verbose=False)\n", " y_train_pred = svm.predict(X_train_feats)\n", " training_accuracy = np.mean(y_train == y_train_pred)\n", " y_val_pred = svm.predict(X_val_feats)\n", " validation_accuracy = np.mean(y_val == y_val_pred)\n", " results[(learning_rate, regularization_strength)] = (training_accuracy, validation_accuracy)\n", " if best_val < validation_accuracy:\n", " best_val = validation_accuracy\n", " best_svm = svm\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "# Print out results.\n", "for lr, reg in sorted(results):\n", " train_accuracy, val_accuracy = results[(lr, reg)]\n", " print('lr %e reg %e train accuracy: %f val accuracy: %f' % (\n", " lr, reg, train_accuracy, val_accuracy))\n", " \n", "print('best validation accuracy achieved during cross-validation: %f' % best_val)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.427\n" ] } ], "source": [ "# Evaluate your trained SVM on the test set\n", "y_test_pred = best_svm.predict(X_test_feats)\n", "test_accuracy = np.mean(y_test == y_test_pred)\n", "print(test_accuracy)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# An important way to gain intuition about how an algorithm works is to\n", "# visualize the mistakes that it makes. In this visualization, we show examples\n", "# of images that are misclassified by our current system. The first column\n", "# shows images that our system labeled as \"plane\" but whose true label is\n", "# something other than \"plane\".\n", "\n", "examples_per_class = 8\n", "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", "for cls, cls_name in enumerate(classes):\n", " idxs = np.where((y_test != cls) & (y_test_pred == cls))[0]\n", " idxs = np.random.choice(idxs, examples_per_class, replace=False)\n", " for i, idx in enumerate(idxs):\n", " plt.subplot(examples_per_class, len(classes), i * len(classes) + cls + 1)\n", " plt.imshow(X_test[idx].astype('uint8'))\n", " plt.axis('off')\n", " if i == 0:\n", " plt.title(cls_name)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "### Inline question 1:\n", "Describe the misclassification results that you see. Do they make sense?\n", "\n", "\n", "$\\color{blue}{\\textit Your Answer:}$\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Neural Network on image features\n", "Earlier in this assigment we saw that training a two-layer neural network on raw pixels achieved better classification performance than linear classifiers on raw pixels. In this notebook we have seen that linear classifiers on image features outperform linear classifiers on raw pixels. \n", "\n", "For completeness, we should also try training a neural network on image features. This approach should outperform all previous approaches: you should easily be able to achieve over 55% classification accuracy on the test set; our best model achieves about 60% classification accuracy." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(49000, 155)\n", "(49000, 154)\n" ] } ], "source": [ "# Preprocessing: Remove the bias dimension\n", "# Make sure to run this cell only ONCE\n", "print(X_train_feats.shape)\n", "X_train_feats = X_train_feats[:, :-1]\n", "X_val_feats = X_val_feats[:, :-1]\n", "X_test_feats = X_test_feats[:, :-1]\n", "\n", "print(X_train_feats.shape)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [ "code" ] }, "outputs": [], "source": [ "from cs231n.classifiers.neural_net import TwoLayerNet\n", "\n", "input_dim = X_train_feats.shape[1]\n", "hidden_dim = 500\n", "num_classes = 10\n", "\n", "net = TwoLayerNet(input_dim, hidden_dim, num_classes)\n", "best_net = None\n", "\n", "################################################################################\n", "# TODO: Train a two-layer neural network on image features. You may want to #\n", "# cross-validate various parameters as in previous sections. Store your best #\n", "# model in the best_net variable. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "results = {}\n", "best_val = -1\n", "learning_rates = [1e-3, 5e-4]\n", "regularization_strengths = [0.25, 0.5]\n", "\n", "for learning_rate in learning_rates:\n", " for regularization_strength in regularization_strengths:\n", " net = TwoLayerNet(input_dim, hidden_dim, num_classes)\n", " loss_hist = net.train(X_train_feats, y_train, X_val_feats, y_val,\n", " num_iters=1000, batch_size=200,\n", " learning_rate=learning_rate, learning_rate_decay=0.95,\n", " reg=regularization_strength, verbose=False)\n", " y_train_pred = net.predict(X_train_feats)\n", " training_accuracy = np.mean(y_train == y_train_pred)\n", " y_val_pred = net.predict(X_val_feats)\n", " validation_accuracy = np.mean(y_val == y_val_pred)\n", " results[(learning_rate, regularization_strength)] = (training_accuracy, validation_accuracy)\n", " if best_val < validation_accuracy:\n", " best_val = validation_accuracy\n", " best_net = net\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.102\n" ] } ], "source": [ "# Run your best neural net classifier on the test set. You should be able\n", "# to get more than 55% accuracy.\n", "\n", "test_acc = (best_net.predict(X_test_feats) == y_test).mean()\n", "print(test_acc)" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment1/frameworkpython ================================================ #!/bin/bash # what real Python executable to use #PYVER=2.7 #PATHTOPYTHON=/usr/local/bin/ #PYTHON=${PATHTOPYTHON}python${PYVER} PYTHON=$(which $(readlink .env/bin/python)) # only works with python3 # find the root of the virtualenv, it should be the parent of the dir this script is in ENV=`$PYTHON -c "import os; print(os.path.abspath(os.path.join(os.path.dirname(\"$0\"), '..')))"` # now run Python with the virtualenv set as Python's HOME export PYTHONHOME=$ENV exec $PYTHON "$@" ================================================ FILE: assignment1/knn.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# k-Nearest Neighbor (kNN) exercise\n", "\n", "*Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the [assignments page](http://vision.stanford.edu/teaching/cs231n/assignments.html) on the course website.*\n", "\n", "The kNN classifier consists of two stages:\n", "\n", "- During training, the classifier takes the training data and simply remembers it\n", "- During testing, kNN classifies every test image by comparing to all training images and transfering the labels of the k most similar training examples\n", "- The value of k is cross-validated\n", "\n", "In this exercise you will implement these steps and understand the basic Image Classification pipeline, cross-validation, and gain proficiency in writing efficient, vectorized code." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "# Run some setup code for this notebook.\n", "\n", "import random\n", "import numpy as np\n", "from cs231n.data_utils import load_CIFAR10\n", "import matplotlib.pyplot as plt\n", "\n", "# This is a bit of magic to make matplotlib figures appear inline in the notebook\n", "# rather than in a new window.\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# Some more magic so that the notebook will reload external python modules;\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training data shape: (50000, 32, 32, 3)\n", "Training labels shape: (50000,)\n", "Test data shape: (10000, 32, 32, 3)\n", "Test labels shape: (10000,)\n" ] } ], "source": [ "# Load the raw CIFAR-10 data.\n", "cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n", "\n", "# Cleaning up variables to prevent loading data multiple times (which may cause memory issue)\n", "try:\n", " del X_train, y_train\n", " del X_test, y_test\n", " print('Clear previously loaded data.')\n", "except:\n", " pass\n", "\n", "X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n", "\n", "# As a sanity check, we print out the size of the training and test data.\n", "print('Training data shape: ', X_train.shape)\n", "print('Training labels shape: ', y_train.shape)\n", "print('Test data shape: ', X_test.shape)\n", "print('Test labels shape: ', y_test.shape)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Visualize some examples from the dataset.\n", "# We show a few examples of training images from each class.\n", "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", "num_classes = len(classes)\n", "samples_per_class = 7\n", "for y, cls in enumerate(classes):\n", " idxs = np.flatnonzero(y_train == y)\n", " idxs = np.random.choice(idxs, samples_per_class, replace=False)\n", " for i, idx in enumerate(idxs):\n", " plt_idx = i * num_classes + y + 1\n", " plt.subplot(samples_per_class, num_classes, plt_idx)\n", " plt.imshow(X_train[idx].astype('uint8'))\n", " plt.axis('off')\n", " if i == 0:\n", " plt.title(cls)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(5000, 3072) (500, 3072)\n" ] } ], "source": [ "# Subsample the data for more efficient code execution in this exercise\n", "num_training = 5000\n", "mask = list(range(num_training))\n", "X_train = X_train[mask]\n", "y_train = y_train[mask]\n", "\n", "num_test = 500\n", "mask = list(range(num_test))\n", "X_test = X_test[mask]\n", "y_test = y_test[mask]\n", "\n", "# Reshape the image data into rows\n", "X_train = np.reshape(X_train, (X_train.shape[0], -1))\n", "X_test = np.reshape(X_test, (X_test.shape[0], -1))\n", "print(X_train.shape, X_test.shape)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "from cs231n.classifiers import KNearestNeighbor\n", "\n", "# Create a kNN classifier instance. \n", "# Remember that training a kNN classifier is a noop: \n", "# the Classifier simply remembers the data and does no further processing \n", "classifier = KNearestNeighbor()\n", "classifier.train(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We would now like to classify the test data with the kNN classifier. Recall that we can break down this process into two steps: \n", "\n", "1. First we must compute the distances between all test examples and all train examples. \n", "2. Given these distances, for each test example we find the k nearest examples and have them vote for the label\n", "\n", "Lets begin with computing the distance matrix between all training and test examples. For example, if there are **Ntr** training examples and **Nte** test examples, this stage should result in a **Nte x Ntr** matrix where each element (i,j) is the distance between the i-th test and j-th train example.\n", "\n", "**Note: For the three distance computations that we require you to implement in this notebook, you may not use the np.linalg.norm() function that numpy provides.**\n", "\n", "First, open `cs231n/classifiers/k_nearest_neighbor.py` and implement the function `compute_distances_two_loops` that uses a (very inefficient) double loop over all pairs of (test, train) examples and computes the distance matrix one element at a time." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(500, 5000)\n" ] } ], "source": [ "# Open cs231n/classifiers/k_nearest_neighbor.py and implement\n", "# compute_distances_two_loops.\n", "\n", "# Test your implementation:\n", "dists = classifier.compute_distances_two_loops(X_test)\n", "print(dists.shape)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# We can visualize the distance matrix: each row is a single test example and\n", "# its distances to training examples\n", "plt.imshow(dists, interpolation='none')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline Question 1** \n", "\n", "Notice the structured patterns in the distance matrix, where some rows or columns are visible brighter. (Note that with the default color scheme black indicates low distances while white indicates high distances.)\n", "\n", "- What in the data is the cause behind the distinctly bright rows?\n", "- What causes the columns?\n", "\n", "$\\color{blue}{\\textit Your Answer:}$ *fill this in.*\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got 137 / 500 correct => accuracy: 0.274000\n" ] } ], "source": [ "# Now implement the function predict_labels and run the code below:\n", "# We use k = 1 (which is Nearest Neighbor).\n", "y_test_pred = classifier.predict_labels(dists, k=1)\n", "\n", "# Compute and print the fraction of correctly predicted examples\n", "num_correct = np.sum(y_test_pred == y_test)\n", "accuracy = float(num_correct) / num_test\n", "print('Got %d / %d correct => accuracy: %f' % (num_correct, num_test, accuracy))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You should expect to see approximately `27%` accuracy. Now lets try out a larger `k`, say `k = 5`:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got 139 / 500 correct => accuracy: 0.278000\n" ] } ], "source": [ "y_test_pred = classifier.predict_labels(dists, k=5)\n", "num_correct = np.sum(y_test_pred == y_test)\n", "accuracy = float(num_correct) / num_test\n", "print('Got %d / %d correct => accuracy: %f' % (num_correct, num_test, accuracy))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You should expect to see a slightly better performance than with `k = 1`." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline Question 2**\n", "\n", "We can also use other distance metrics such as L1 distance.\n", "For pixel values $p_{ij}^{(k)}$ at location $(i,j)$ of some image $I_k$, \n", "\n", "the mean $\\mu$ across all pixels over all images is $$\\mu=\\frac{1}{nhw}\\sum_{k=1}^n\\sum_{i=1}^{h}\\sum_{j=1}^{w}p_{ij}^{(k)}$$\n", "And the pixel-wise mean $\\mu_{ij}$ across all images is \n", "$$\\mu_{ij}=\\frac{1}{n}\\sum_{k=1}^np_{ij}^{(k)}.$$\n", "The general standard deviation $\\sigma$ and pixel-wise standard deviation $\\sigma_{ij}$ is defined similarly.\n", "\n", "Which of the following preprocessing steps will not change the performance of a Nearest Neighbor classifier that uses L1 distance? Select all that apply.\n", "1. Subtracting the mean $\\mu$ ($\\tilde{p}_{ij}^{(k)}=p_{ij}^{(k)}-\\mu$.)\n", "2. Subtracting the per pixel mean $\\mu_{ij}$ ($\\tilde{p}_{ij}^{(k)}=p_{ij}^{(k)}-\\mu_{ij}$.)\n", "3. Subtracting the mean $\\mu$ and dividing by the standard deviation $\\sigma$.\n", "4. Subtracting the pixel-wise mean $\\mu_{ij}$ and dividing by the pixel-wise standard deviation $\\sigma_{ij}$.\n", "5. Rotating the coordinate axes of the data.\n", "\n", "$\\color{blue}{\\textit Your Answer:}$\n", "\n", "\n", "$\\color{blue}{\\textit Your Explanation:}$\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "One loop difference was: 0.000000\n", "Good! The distance matrices are the same\n" ] } ], "source": [ "# Now lets speed up distance matrix computation by using partial vectorization\n", "# with one loop. Implement the function compute_distances_one_loop and run the\n", "# code below:\n", "dists_one = classifier.compute_distances_one_loop(X_test)\n", "\n", "# To ensure that our vectorized implementation is correct, we make sure that it\n", "# agrees with the naive implementation. There are many ways to decide whether\n", "# two matrices are similar; one of the simplest is the Frobenius norm. In case\n", "# you haven't seen it before, the Frobenius norm of two matrices is the square\n", "# root of the squared sum of differences of all elements; in other words, reshape\n", "# the matrices into vectors and compute the Euclidean distance between them.\n", "difference = np.linalg.norm(dists - dists_one, ord='fro')\n", "print('One loop difference was: %f' % (difference, ))\n", "if difference < 0.001:\n", " print('Good! The distance matrices are the same')\n", "else:\n", " print('Uh-oh! The distance matrices are different')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": true, "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No loop difference was: 0.000000\n", "Good! The distance matrices are the same\n" ] } ], "source": [ "# Now implement the fully vectorized version inside compute_distances_no_loops\n", "# and run the code\n", "dists_two = classifier.compute_distances_no_loops(X_test)\n", "\n", "# check that the distance matrix agrees with the one we computed before:\n", "difference = np.linalg.norm(dists - dists_two, ord='fro')\n", "print('No loop difference was: %f' % (difference, ))\n", "if difference < 0.001:\n", " print('Good! The distance matrices are the same')\n", "else:\n", " print('Uh-oh! The distance matrices are different')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Two loop version took 29.000762 seconds\n", "One loop version took 63.045612 seconds\n", "No loop version took 0.231369 seconds\n" ] } ], "source": [ "# Let's compare how fast the implementations are\n", "def time_function(f, *args):\n", " \"\"\"\n", " Call a function f with args and return the time (in seconds) that it took to execute.\n", " \"\"\"\n", " import time\n", " tic = time.time()\n", " f(*args)\n", " toc = time.time()\n", " return toc - tic\n", "\n", "two_loop_time = time_function(classifier.compute_distances_two_loops, X_test)\n", "print('Two loop version took %f seconds' % two_loop_time)\n", "\n", "one_loop_time = time_function(classifier.compute_distances_one_loop, X_test)\n", "print('One loop version took %f seconds' % one_loop_time)\n", "\n", "no_loop_time = time_function(classifier.compute_distances_no_loops, X_test)\n", "print('No loop version took %f seconds' % no_loop_time)\n", "\n", "# You should see significantly faster performance with the fully vectorized implementation!\n", "\n", "# NOTE: depending on what machine you're using, \n", "# you might not see a speedup when you go from two loops to one loop, \n", "# and might even see a slow-down." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cross-validation\n", "\n", "We have implemented the k-Nearest Neighbor classifier but we set the value k = 5 arbitrarily. We will now determine the best value of this hyperparameter with cross-validation." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "tags": [ "code" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "k = 1, accuracy = 0.526000\n", "k = 1, accuracy = 0.514000\n", "k = 1, accuracy = 0.528000\n", "k = 1, accuracy = 0.556000\n", "k = 1, accuracy = 0.532000\n", "k = 3, accuracy = 0.482000\n", "k = 3, accuracy = 0.498000\n", "k = 3, accuracy = 0.486000\n", "k = 3, accuracy = 0.546000\n", "k = 3, accuracy = 0.528000\n", "k = 5, accuracy = 0.512000\n", "k = 5, accuracy = 0.542000\n", "k = 5, accuracy = 0.560000\n", "k = 5, accuracy = 0.578000\n", "k = 5, accuracy = 0.556000\n", "k = 8, accuracy = 0.526000\n", "k = 8, accuracy = 0.574000\n", "k = 8, accuracy = 0.552000\n", "k = 8, accuracy = 0.576000\n", "k = 8, accuracy = 0.540000\n", "k = 10, accuracy = 0.532000\n", "k = 10, accuracy = 0.592000\n", "k = 10, accuracy = 0.558000\n", "k = 10, accuracy = 0.566000\n", "k = 10, accuracy = 0.566000\n", "k = 12, accuracy = 0.522000\n", "k = 12, accuracy = 0.588000\n", "k = 12, accuracy = 0.560000\n", "k = 12, accuracy = 0.566000\n", "k = 12, accuracy = 0.560000\n", "k = 15, accuracy = 0.506000\n", "k = 15, accuracy = 0.580000\n", "k = 15, accuracy = 0.558000\n", "k = 15, accuracy = 0.560000\n", "k = 15, accuracy = 0.550000\n", "k = 20, accuracy = 0.540000\n", "k = 20, accuracy = 0.558000\n", "k = 20, accuracy = 0.558000\n", "k = 20, accuracy = 0.560000\n", "k = 20, accuracy = 0.568000\n", "k = 50, accuracy = 0.542000\n", "k = 50, accuracy = 0.576000\n", "k = 50, accuracy = 0.556000\n", "k = 50, accuracy = 0.538000\n", "k = 50, accuracy = 0.532000\n", "k = 100, accuracy = 0.512000\n", "k = 100, accuracy = 0.540000\n", "k = 100, accuracy = 0.526000\n", "k = 100, accuracy = 0.512000\n", "k = 100, accuracy = 0.526000\n" ] } ], "source": [ "num_folds = 5\n", "k_choices = [1, 3, 5, 8, 10, 12, 15, 20, 50, 100]\n", "\n", "X_train_folds = []\n", "y_train_folds = []\n", "################################################################################\n", "# TODO: #\n", "# Split up the training data into folds. After splitting, X_train_folds and #\n", "# y_train_folds should each be lists of length num_folds, where #\n", "# y_train_folds[i] is the label vector for the points in X_train_folds[i]. #\n", "# Hint: Look up the numpy array_split function. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "X_train_folds = np.array_split(X_train, num_folds)\n", "y_train_folds = np.array_split(y_train, num_folds)\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "# A dictionary holding the accuracies for different values of k that we find\n", "# when running cross-validation. After running cross-validation,\n", "# k_to_accuracies[k] should be a list of length num_folds giving the different\n", "# accuracy values that we found when using that value of k.\n", "k_to_accuracies = {}\n", "\n", "\n", "################################################################################\n", "# TODO: #\n", "# Perform k-fold cross validation to find the best value of k. For each #\n", "# possible value of k, run the k-nearest-neighbor algorithm num_folds times, #\n", "# where in each case you use all but one of the folds as training data and the #\n", "# last fold as a validation set. Store the accuracies for all fold and all #\n", "# values of k in the k_to_accuracies dictionary. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "step = int(num_training/num_folds)\n", "for k in k_choices:\n", " acc = []\n", " for i in range(num_folds):\n", " train_data = np.concatenate([X_train[:i*step], X_train[(i+1)*step:]], axis = 0)\n", " test_data = X_train[i*step:(i+1)*step]\n", " train_label = np.concatenate([y_train[:i*step], y_train[(i+1)*step:]], axis = 0)\n", " test_label = y_train[i*step:(i+1)*step]\n", "\n", " classifier = KNearestNeighbor()\n", " classifier.train(train_data, train_label)\n", " dists = classifier.compute_distances_no_loops(test_data)\n", " label_test_pred = classifier.predict_labels(dists, k=k)\n", " num_correct = np.sum(label_test_pred == test_label)\n", " acc.append(float(num_correct) / num_test)\n", " \n", " k_to_accuracies[k] = acc\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "# Print out the computed accuracies\n", "for k in sorted(k_to_accuracies):\n", " for accuracy in k_to_accuracies[k]:\n", " print('k = %d, accuracy = %f' % (k, accuracy))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# plot the raw observations\n", "for k in k_choices:\n", " accuracies = k_to_accuracies[k]\n", " plt.scatter([k] * len(accuracies), accuracies)\n", "\n", "# plot the trend line with error bars that correspond to standard deviation\n", "accuracies_mean = np.array([np.mean(v) for k,v in sorted(k_to_accuracies.items())])\n", "accuracies_std = np.array([np.std(v) for k,v in sorted(k_to_accuracies.items())])\n", "plt.errorbar(k_choices, accuracies_mean, yerr=accuracies_std)\n", "plt.title('Cross-validation on k')\n", "plt.xlabel('k')\n", "plt.ylabel('Cross-validation accuracy')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Got 141 / 500 correct => accuracy: 0.282000\n" ] } ], "source": [ "# Based on the cross-validation results above, choose the best value for k, \n", "# retrain the classifier using all the training data, and test it on the test\n", "# data. You should be able to get above 28% accuracy on the test data.\n", "best_k = 10\n", "\n", "classifier = KNearestNeighbor()\n", "classifier.train(X_train, y_train)\n", "y_test_pred = classifier.predict(X_test, k=best_k)\n", "\n", "# Compute and display the accuracy\n", "num_correct = np.sum(y_test_pred == y_test)\n", "accuracy = float(num_correct) / num_test\n", "print('Got %d / %d correct => accuracy: %f' % (num_correct, num_test, accuracy))" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline Question 3**\n", "\n", "Which of the following statements about $k$-Nearest Neighbor ($k$-NN) are true in a classification setting, and for all $k$? Select all that apply.\n", "1. The decision boundary of the k-NN classifier is linear.\n", "2. The training error of a 1-NN will always be lower than that of 5-NN.\n", "3. The test error of a 1-NN will always be lower than that of a 5-NN.\n", "4. The time needed to classify a test example with the k-NN classifier grows with the size of the training set.\n", "5. None of the above.\n", "\n", "$\\color{blue}{\\textit Your Answer:}$4\n", "\n", "\n", "$\\color{blue}{\\textit Your Explanation:}$\n", "\n" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment1/requirements.txt ================================================ attrs==19.1.0 backcall==0.1.0 bleach==3.1.0 certifi==2019.3.9 chardet==3.0.4 colorama==0.4.1 cycler==0.10.0 decorator==4.4.0 defusedxml==0.5.0 entrypoints==0.3 future==0.17.1 gitdb2==2.0.5 GitPython==2.1.11 idna==2.8 ipykernel==5.1.0 ipython==7.4.0 ipython-genutils==0.2.0 ipywidgets==7.4.2 jedi==0.13.3 Jinja2==2.10 jsonschema==3.0.1 jupyter==1.0.0 jupyter-client==5.2.4 jupyter-console==6.0.0 jupyter-core==4.4.0 jupyterlab==0.35.4 jupyterlab-server==0.2.0 kiwisolver==1.0.1 MarkupSafe==1.1.1 matplotlib==3.0.3 mistune==0.8.4 nbconvert==5.4.1 nbdime==1.0.5 nbformat==4.4.0 notebook==5.7.8 numpy==1.16.2 pandocfilters==1.4.2 parso==0.3.4 pexpect==4.6.0 pickleshare==0.7.5 Pillow==6.0.0 prometheus-client==0.6.0 prompt-toolkit==2.0.9 ptyprocess==0.6.0 Pygments==2.3.1 pyparsing==2.3.1 pyrsistent==0.14.11 python-dateutil==2.8.0 pyzmq==18.0.1 qtconsole==4.4.3 requests==2.21.0 scipy==1.2.1 Send2Trash==1.5.0 six==1.12.0 smmap2==2.0.5 terminado==0.8.2 testpath==0.4.2 tornado==6.0.2 traitlets==4.3.2 urllib3==1.24.1 wcwidth==0.1.7 webencodings==0.5.1 widgetsnbextension==3.4.2 ================================================ FILE: assignment1/softmax.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Softmax exercise\n", "\n", "*Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the [assignments page](http://vision.stanford.edu/teaching/cs231n/assignments.html) on the course website.*\n", "\n", "This exercise is analogous to the SVM exercise. You will:\n", "\n", "- implement a fully-vectorized **loss function** for the Softmax classifier\n", "- implement the fully-vectorized expression for its **analytic gradient**\n", "- **check your implementation** with numerical gradient\n", "- use a validation set to **tune the learning rate and regularization** strength\n", "- **optimize** the loss function with **SGD**\n", "- **visualize** the final learned weights\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "import random\n", "import numpy as np\n", "from cs231n.data_utils import load_CIFAR10\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading extenrnal modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train data shape: (49000, 3073)\n", "Train labels shape: (49000,)\n", "Validation data shape: (1000, 3073)\n", "Validation labels shape: (1000,)\n", "Test data shape: (1000, 3073)\n", "Test labels shape: (1000,)\n", "dev data shape: (500, 3073)\n", "dev labels shape: (500,)\n" ] } ], "source": [ "def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000, num_dev=500):\n", " \"\"\"\n", " Load the CIFAR-10 dataset from disk and perform preprocessing to prepare\n", " it for the linear classifier. These are the same steps as we used for the\n", " SVM, but condensed to a single function. \n", " \"\"\"\n", " # Load the raw CIFAR-10 data\n", " cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n", " \n", " # Cleaning up variables to prevent loading data multiple times (which may cause memory issue)\n", " try:\n", " del X_train, y_train\n", " del X_test, y_test\n", " print('Clear previously loaded data.')\n", " except:\n", " pass\n", "\n", " X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n", " \n", " # subsample the data\n", " mask = list(range(num_training, num_training + num_validation))\n", " X_val = X_train[mask]\n", " y_val = y_train[mask]\n", " mask = list(range(num_training))\n", " X_train = X_train[mask]\n", " y_train = y_train[mask]\n", " mask = list(range(num_test))\n", " X_test = X_test[mask]\n", " y_test = y_test[mask]\n", " mask = np.random.choice(num_training, num_dev, replace=False)\n", " X_dev = X_train[mask]\n", " y_dev = y_train[mask]\n", " \n", " # Preprocessing: reshape the image data into rows\n", " X_train = np.reshape(X_train, (X_train.shape[0], -1))\n", " X_val = np.reshape(X_val, (X_val.shape[0], -1))\n", " X_test = np.reshape(X_test, (X_test.shape[0], -1))\n", " X_dev = np.reshape(X_dev, (X_dev.shape[0], -1))\n", " \n", " # Normalize the data: subtract the mean image\n", " mean_image = np.mean(X_train, axis = 0)\n", " X_train -= mean_image\n", " X_val -= mean_image\n", " X_test -= mean_image\n", " X_dev -= mean_image\n", " \n", " # add bias dimension and transform into columns\n", " X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))])\n", " X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))])\n", " X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))])\n", " X_dev = np.hstack([X_dev, np.ones((X_dev.shape[0], 1))])\n", " \n", " return X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev\n", "\n", "\n", "# Invoke the above function to get our data.\n", "X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev = get_CIFAR10_data()\n", "print('Train data shape: ', X_train.shape)\n", "print('Train labels shape: ', y_train.shape)\n", "print('Validation data shape: ', X_val.shape)\n", "print('Validation labels shape: ', y_val.shape)\n", "print('Test data shape: ', X_test.shape)\n", "print('Test labels shape: ', y_test.shape)\n", "print('dev data shape: ', X_dev.shape)\n", "print('dev labels shape: ', y_dev.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Softmax Classifier\n", "\n", "Your code for this section will all be written inside **cs231n/classifiers/softmax.py**. \n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loss: 2.364606\n", "sanity check: 2.302585\n" ] } ], "source": [ "# First implement the naive softmax loss function with nested loops.\n", "# Open the file cs231n/classifiers/softmax.py and implement the\n", "# softmax_loss_naive function.\n", "\n", "from cs231n.classifiers.softmax import softmax_loss_naive\n", "import time\n", "\n", "# Generate a random softmax weight matrix and use it to compute the loss.\n", "W = np.random.randn(3073, 10) * 0.0001\n", "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n", "\n", "# As a rough sanity check, our loss should be something close to -log(0.1).\n", "print('loss: %f' % loss)\n", "print('sanity check: %f' % (-np.log(0.1)))" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline Question 1**\n", "\n", "Why do we expect our loss to be close to -log(0.1)? Explain briefly.**\n", "\n", "$\\color{blue}{\\textit Your Answer:}$ *Fill this in* \n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "numerical: 4.448814 analytic: 4.448814, relative error: 1.131721e-08\n", "numerical: 0.803491 analytic: 0.803491, relative error: 6.591547e-09\n", "numerical: -4.316572 analytic: -4.316572, relative error: 8.879102e-10\n", "numerical: 1.399013 analytic: 1.399013, relative error: 8.700786e-08\n", "numerical: -0.739269 analytic: -0.739269, relative error: 7.995936e-08\n", "numerical: 2.110418 analytic: 2.110418, relative error: 1.765572e-08\n", "numerical: -1.249506 analytic: -1.249506, relative error: 2.340411e-09\n", "numerical: 2.042361 analytic: 2.042361, relative error: 2.976949e-08\n", "numerical: 2.041832 analytic: 2.041832, relative error: 2.027293e-08\n", "numerical: -0.408771 analytic: -0.408771, relative error: 8.367203e-08\n", "numerical: 2.042933 analytic: 2.042933, relative error: 4.109457e-09\n", "numerical: -1.388908 analytic: -1.388908, relative error: 2.302196e-08\n", "numerical: -0.517299 analytic: -0.517299, relative error: 1.561286e-07\n", "numerical: 1.221305 analytic: 1.221305, relative error: 3.993086e-08\n", "numerical: -0.162553 analytic: -0.162553, relative error: 2.739976e-07\n", "numerical: 1.476669 analytic: 1.476669, relative error: 4.964665e-09\n", "numerical: -1.262721 analytic: -1.262721, relative error: 7.249271e-10\n", "numerical: -0.969402 analytic: -0.969403, relative error: 7.854812e-08\n", "numerical: 2.014748 analytic: 2.014748, relative error: 5.415087e-08\n", "numerical: 0.401549 analytic: 0.401549, relative error: 6.033886e-08\n" ] } ], "source": [ "# Complete the implementation of softmax_loss_naive and implement a (naive)\n", "# version of the gradient that uses nested loops.\n", "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n", "\n", "# As we did for the SVM, use numeric gradient checking as a debugging tool.\n", "# The numeric gradient should be close to the analytic gradient.\n", "from cs231n.gradient_check import grad_check_sparse\n", "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 0.0)[0]\n", "grad_numerical = grad_check_sparse(f, W, grad, 10)\n", "\n", "# similar to SVM case, do another gradient check with regularization\n", "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 5e1)\n", "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 5e1)[0]\n", "grad_numerical = grad_check_sparse(f, W, grad, 10)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "naive loss: 2.364606e+00 computed in 14.873844s\n", "vectorized loss: 2.364606e+00 computed in 0.001966s\n", "Loss difference: 0.000000\n", "Gradient difference: 0.000000\n" ] } ], "source": [ "# Now that we have a naive implementation of the softmax loss function and its gradient,\n", "# implement a vectorized version in softmax_loss_vectorized.\n", "# The two versions should compute the same results, but the vectorized version should be\n", "# much faster.\n", "tic = time.time()\n", "loss_naive, grad_naive = softmax_loss_naive(W, X_dev, y_dev, 0.000005)\n", "toc = time.time()\n", "print('naive loss: %e computed in %fs' % (loss_naive, toc - tic))\n", "\n", "from cs231n.classifiers.softmax import softmax_loss_vectorized\n", "tic = time.time()\n", "loss_vectorized, grad_vectorized = softmax_loss_vectorized(W, X_dev, y_dev, 0.000005)\n", "toc = time.time()\n", "print('vectorized loss: %e computed in %fs' % (loss_vectorized, toc - tic))\n", "\n", "# As we did for the SVM, we use the Frobenius norm to compare the two versions\n", "# of the gradient.\n", "grad_difference = np.linalg.norm(grad_naive - grad_vectorized, ord='fro')\n", "print('Loss difference: %f' % np.abs(loss_naive - loss_vectorized))\n", "print('Gradient difference: %f' % grad_difference)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "code" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "lr 1.000000e-07 reg 2.500000e+04 train accuracy: 0.328531 val accuracy: 0.341000\n", "lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.314327 val accuracy: 0.333000\n", "lr 5.000000e-07 reg 2.500000e+04 train accuracy: 0.316898 val accuracy: 0.343000\n", "lr 5.000000e-07 reg 5.000000e+04 train accuracy: 0.319388 val accuracy: 0.328000\n", "best validation accuracy achieved during cross-validation: 0.343000\n" ] } ], "source": [ "# Use the validation set to tune hyperparameters (regularization strength and\n", "# learning rate). You should experiment with different ranges for the learning\n", "# rates and regularization strengths; if you are careful you should be able to\n", "# get a classification accuracy of over 0.35 on the validation set.\n", "from cs231n.classifiers import Softmax\n", "results = {}\n", "best_val = -1\n", "best_softmax = None\n", "learning_rates = [1e-7, 5e-7]\n", "regularization_strengths = [2.5e4, 5e4]\n", "\n", "################################################################################\n", "# TODO: #\n", "# Use the validation set to set the learning rate and regularization strength. #\n", "# This should be identical to the validation that you did for the SVM; save #\n", "# the best trained softmax classifer in best_softmax. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "for learning_rate in learning_rates:\n", " for regularization_strength in regularization_strengths:\n", " softmax = Softmax()\n", " loss_hist = softmax.train(X_train, y_train, learning_rate=learning_rate, \n", " reg=regularization_strength, num_iters=1500, verbose=False)\n", " y_train_pred = softmax.predict(X_train)\n", " training_accuracy = np.mean(y_train == y_train_pred)\n", " y_val_pred = softmax.predict(X_val)\n", " validation_accuracy = np.mean(y_val == y_val_pred)\n", " results[(learning_rate, regularization_strength)] = (training_accuracy, validation_accuracy)\n", " if best_val < validation_accuracy:\n", " best_val = validation_accuracy\n", " best_softmax = softmax\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " \n", "# Print out results.\n", "for lr, reg in sorted(results):\n", " train_accuracy, val_accuracy = results[(lr, reg)]\n", " print('lr %e reg %e train accuracy: %f val accuracy: %f' % (\n", " lr, reg, train_accuracy, val_accuracy))\n", " \n", "print('best validation accuracy achieved during cross-validation: %f' % best_val)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "softmax on raw pixels final test set accuracy: 0.327000\n" ] } ], "source": [ "# evaluate on test set\n", "# Evaluate the best softmax on test set\n", "y_test_pred = best_softmax.predict(X_test)\n", "test_accuracy = np.mean(y_test == y_test_pred)\n", "print('softmax on raw pixels final test set accuracy: %f' % (test_accuracy, ))" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline Question 2** - *True or False*\n", "\n", "Suppose the overall training loss is defined as the sum of the per-datapoint loss over all training examples. It is possible to add a new datapoint to a training set that would leave the SVM loss unchanged, but this is not the case with the Softmax classifier loss.\n", "\n", "$\\color{blue}{\\textit Your Answer:}$True\n", "\n", "\n", "$\\color{blue}{\\textit Your Explanation:}$\n", "\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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IWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2aMbRhuAAAIABJREFU8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmPEEIIIWaPJjxCCCGEmD2a8AghhBBi9mjCI4QQQojZowmP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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Visualize the learned weights for each class\n", "w = best_softmax.W[:-1,:] # strip out the bias\n", "w = w.reshape(32, 32, 3, 10)\n", "\n", "w_min, w_max = np.min(w), np.max(w)\n", "\n", "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", "for i in range(10):\n", " plt.subplot(2, 5, i + 1)\n", " \n", " # Rescale the weights to be between 0 and 255\n", " wimg = 255.0 * (w[:, :, :, i].squeeze() - w_min) / (w_max - w_min)\n", " plt.imshow(wimg.astype('uint8'))\n", " plt.axis('off')\n", " plt.title(classes[i])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment1/start_ipython_osx.sh ================================================ # Assume the virtualenv is called .env cp frameworkpython .env/bin .env/bin/frameworkpython -m IPython notebook ================================================ FILE: assignment1/svm.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Multiclass Support Vector Machine exercise\n", "\n", "*Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the [assignments page](http://vision.stanford.edu/teaching/cs231n/assignments.html) on the course website.*\n", "\n", "In this exercise you will:\n", " \n", "- implement a fully-vectorized **loss function** for the SVM\n", "- implement the fully-vectorized expression for its **analytic gradient**\n", "- **check your implementation** using numerical gradient\n", "- use a validation set to **tune the learning rate and regularization** strength\n", "- **optimize** the loss function with **SGD**\n", "- **visualize** the final learned weights\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "# Run some setup code for this notebook.\n", "import random\n", "import numpy as np\n", "from cs231n.data_utils import load_CIFAR10\n", "import matplotlib.pyplot as plt\n", "\n", "# This is a bit of magic to make matplotlib figures appear inline in the\n", "# notebook rather than in a new window.\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# Some more magic so that the notebook will reload external python modules;\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## CIFAR-10 Data Loading and Preprocessing" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training data shape: (50000, 32, 32, 3)\n", "Training labels shape: (50000,)\n", "Test data shape: (10000, 32, 32, 3)\n", "Test labels shape: (10000,)\n" ] } ], "source": [ "# Load the raw CIFAR-10 data.\n", "cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n", "\n", "# Cleaning up variables to prevent loading data multiple times (which may cause memory issue)\n", "try:\n", " del X_train, y_train\n", " del X_test, y_test\n", " print('Clear previously loaded data.')\n", "except:\n", " pass\n", "\n", "X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n", "\n", "# As a sanity check, we print out the size of the training and test data.\n", "print('Training data shape: ', X_train.shape)\n", "print('Training labels shape: ', y_train.shape)\n", "print('Test data shape: ', X_test.shape)\n", "print('Test labels shape: ', y_test.shape)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Visualize some examples from the dataset.\n", "# We show a few examples of training images from each class.\n", "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", "num_classes = len(classes)\n", "samples_per_class = 7\n", "for y, cls in enumerate(classes):\n", " idxs = np.flatnonzero(y_train == y)\n", " idxs = np.random.choice(idxs, samples_per_class, replace=False)\n", " for i, idx in enumerate(idxs):\n", " plt_idx = i * num_classes + y + 1\n", " plt.subplot(samples_per_class, num_classes, plt_idx)\n", " plt.imshow(X_train[idx].astype('uint8'))\n", " plt.axis('off')\n", " if i == 0:\n", " plt.title(cls)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train data shape: (49000, 32, 32, 3)\n", "Train labels shape: (49000,)\n", "Validation data shape: (1000, 32, 32, 3)\n", "Validation labels shape: (1000,)\n", "Test data shape: (1000, 32, 32, 3)\n", "Test labels shape: (1000,)\n" ] } ], "source": [ "# Split the data into train, val, and test sets. In addition we will\n", "# create a small development set as a subset of the training data;\n", "# we can use this for development so our code runs faster.\n", "num_training = 49000\n", "num_validation = 1000\n", "num_test = 1000\n", "num_dev = 500\n", "\n", "# Our validation set will be num_validation points from the original\n", "# training set.\n", "mask = range(num_training, num_training + num_validation)\n", "X_val = X_train[mask]\n", "y_val = y_train[mask]\n", "\n", "# Our training set will be the first num_train points from the original\n", "# training set.\n", "mask = range(num_training)\n", "X_train = X_train[mask]\n", "y_train = y_train[mask]\n", "\n", "# We will also make a development set, which is a small subset of\n", "# the training set.\n", "mask = np.random.choice(num_training, num_dev, replace=False)\n", "X_dev = X_train[mask]\n", "y_dev = y_train[mask]\n", "\n", "# We use the first num_test points of the original test set as our\n", "# test set.\n", "mask = range(num_test)\n", "X_test = X_test[mask]\n", "y_test = y_test[mask]\n", "\n", "print('Train data shape: ', X_train.shape)\n", "print('Train labels shape: ', y_train.shape)\n", "print('Validation data shape: ', X_val.shape)\n", "print('Validation labels shape: ', y_val.shape)\n", "print('Test data shape: ', X_test.shape)\n", "print('Test labels shape: ', y_test.shape)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training data shape: (49000, 3072)\n", "Validation data shape: (1000, 3072)\n", "Test data shape: (1000, 3072)\n", "dev data shape: (500, 3072)\n" ] } ], "source": [ "# Preprocessing: reshape the image data into rows\n", "X_train = np.reshape(X_train, (X_train.shape[0], -1))\n", "X_val = np.reshape(X_val, (X_val.shape[0], -1))\n", "X_test = np.reshape(X_test, (X_test.shape[0], -1))\n", "X_dev = np.reshape(X_dev, (X_dev.shape[0], -1))\n", "\n", "# As a sanity check, print out the shapes of the data\n", "print('Training data shape: ', X_train.shape)\n", "print('Validation data shape: ', X_val.shape)\n", "print('Test data shape: ', X_test.shape)\n", "print('dev data shape: ', X_dev.shape)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[130.64189796 135.98173469 132.47391837 130.05569388 135.34804082\n", " 131.75402041 130.96055102 136.14328571 132.47636735 131.48467347]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "(49000, 3073) (1000, 3073) (1000, 3073) (500, 3073)\n" ] } ], "source": [ "# Preprocessing: subtract the mean image\n", "# first: compute the image mean based on the training data\n", "mean_image = np.mean(X_train, axis=0)\n", "print(mean_image[:10]) # print a few of the elements\n", "plt.figure(figsize=(4,4))\n", "plt.imshow(mean_image.reshape((32,32,3)).astype('uint8')) # visualize the mean image\n", "plt.show()\n", "\n", "# second: subtract the mean image from train and test data\n", "X_train -= mean_image\n", "X_val -= mean_image\n", "X_test -= mean_image\n", "X_dev -= mean_image\n", "\n", "# third: append the bias dimension of ones (i.e. bias trick) so that our SVM\n", "# only has to worry about optimizing a single weight matrix W.\n", "X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))])\n", "X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))])\n", "X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))])\n", "X_dev = np.hstack([X_dev, np.ones((X_dev.shape[0], 1))])\n", "\n", "print(X_train.shape, X_val.shape, X_test.shape, X_dev.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## SVM Classifier\n", "\n", "Your code for this section will all be written inside **cs231n/classifiers/linear_svm.py**. \n", "\n", "As you can see, we have prefilled the function `compute_loss_naive` which uses for loops to evaluate the multiclass SVM loss function. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loss: 9.372265\n" ] } ], "source": [ "# Evaluate the naive implementation of the loss we provided for you:\n", "from cs231n.classifiers.linear_svm import svm_loss_naive\n", "import time\n", "\n", "# generate a random SVM weight matrix of small numbers\n", "W = np.random.randn(3073, 10) * 0.0001 \n", "\n", "loss, grad = svm_loss_naive(W, X_dev, y_dev, 0.000005)\n", "print('loss: %f' % (loss, ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `grad` returned from the function above is right now all zero. Derive and implement the gradient for the SVM cost function and implement it inline inside the function `svm_loss_naive`. You will find it helpful to interleave your new code inside the existing function.\n", "\n", "To check that you have correctly implemented the gradient correctly, you can numerically estimate the gradient of the loss function and compare the numeric estimate to the gradient that you computed. We have provided code that does this for you:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "numerical: 4.539744 analytic: 4.539744, relative error: 5.625411e-11\n", "numerical: -20.078852 analytic: -20.078852, relative error: 1.739434e-11\n", "numerical: 10.335577 analytic: 10.335577, relative error: 6.412402e-11\n", "numerical: 27.810495 analytic: 27.810495, relative error: 1.475921e-11\n", "numerical: -22.086078 analytic: -22.098971, relative error: 2.917911e-04\n", "numerical: -3.858419 analytic: -3.858419, relative error: 5.785164e-11\n", "numerical: 14.250846 analytic: 14.250846, relative error: 8.330308e-12\n", "numerical: -32.330194 analytic: -32.330194, relative error: 2.604245e-12\n", "numerical: 10.431119 analytic: 10.431119, relative error: 7.599965e-12\n", "numerical: 6.715105 analytic: 6.715105, relative error: 2.980569e-11\n", "numerical: -18.955157 analytic: -18.955157, relative error: 1.205514e-11\n", "numerical: 6.403333 analytic: 6.403333, relative error: 2.051595e-12\n", "numerical: -47.527242 analytic: -47.521575, relative error: 5.962597e-05\n", "numerical: -7.804382 analytic: -7.804382, relative error: 4.636237e-11\n", "numerical: -16.130177 analytic: -16.130177, relative error: 1.748806e-13\n", "numerical: -25.618821 analytic: -25.618821, relative error: 3.527153e-12\n", "numerical: 2.427230 analytic: 2.427230, relative error: 1.664070e-11\n", "numerical: 0.896345 analytic: 0.896345, relative error: 3.683534e-10\n", "numerical: 13.020112 analytic: 13.020112, relative error: 1.625980e-11\n", "numerical: 21.048710 analytic: 21.048710, relative error: 6.723733e-12\n" ] } ], "source": [ "# Once you've implemented the gradient, recompute it with the code below\n", "# and gradient check it with the function we provided for you\n", "\n", "# Compute the loss and its gradient at W.\n", "loss, grad = svm_loss_naive(W, X_dev, y_dev, 0.0)\n", "\n", "# Numerically compute the gradient along several randomly chosen dimensions, and\n", "# compare them with your analytically computed gradient. The numbers should match\n", "# almost exactly along all dimensions.\n", "from cs231n.gradient_check import grad_check_sparse\n", "f = lambda w: svm_loss_naive(w, X_dev, y_dev, 0.0)[0]\n", "grad_numerical = grad_check_sparse(f, W, grad)\n", "\n", "# do the gradient check once again with regularization turned on\n", "# you didn't forget the regularization gradient did you?\n", "loss, grad = svm_loss_naive(W, X_dev, y_dev, 5e1)\n", "f = lambda w: svm_loss_naive(w, X_dev, y_dev, 5e1)[0]\n", "grad_numerical = grad_check_sparse(f, W, grad)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline Question 1**\n", "\n", "It is possible that once in a while a dimension in the gradcheck will not match exactly. What could such a discrepancy be caused by? Is it a reason for concern? What is a simple example in one dimension where a gradient check could fail? How would change the margin affect of the frequency of this happening? *Hint: the SVM loss function is not strictly speaking differentiable*\n", "\n", "$\\color{blue}{\\textit Your Answer:}$ *fill this in.* \n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Naive loss: 9.372265e+00 computed in 0.153558s\n", "Vectorized loss: 9.372265e+00 computed in 0.002001s\n", "difference: 0.000000\n" ] } ], "source": [ "# Next implement the function svm_loss_vectorized; for now only compute the loss;\n", "# we will implement the gradient in a moment.\n", "tic = time.time()\n", "loss_naive, grad_naive = svm_loss_naive(W, X_dev, y_dev, 0.000005)\n", "toc = time.time()\n", "print('Naive loss: %e computed in %fs' % (loss_naive, toc - tic))\n", "\n", "from cs231n.classifiers.linear_svm import svm_loss_vectorized\n", "tic = time.time()\n", "loss_vectorized, _ = svm_loss_vectorized(W, X_dev, y_dev, 0.000005)\n", "toc = time.time()\n", "print('Vectorized loss: %e computed in %fs' % (loss_vectorized, toc - tic))\n", "\n", "# The losses should match but your vectorized implementation should be much faster.\n", "print('difference: %f' % (loss_naive - loss_vectorized))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Naive loss and gradient: computed in 0.154552s\n", "Vectorized loss and gradient: computed in 0.002000s\n", "difference: 0.000000\n" ] } ], "source": [ "# Complete the implementation of svm_loss_vectorized, and compute the gradient\n", "# of the loss function in a vectorized way.\n", "\n", "# The naive implementation and the vectorized implementation should match, but\n", "# the vectorized version should still be much faster.\n", "tic = time.time()\n", "_, grad_naive = svm_loss_naive(W, X_dev, y_dev, 0.000005)\n", "toc = time.time()\n", "print('Naive loss and gradient: computed in %fs' % (toc - tic))\n", "\n", "tic = time.time()\n", "_, grad_vectorized = svm_loss_vectorized(W, X_dev, y_dev, 0.000005)\n", "toc = time.time()\n", "print('Vectorized loss and gradient: computed in %fs' % (toc - tic))\n", "\n", "# The loss is a single number, so it is easy to compare the values computed\n", "# by the two implementations. The gradient on the other hand is a matrix, so\n", "# we use the Frobenius norm to compare them.\n", "difference = np.linalg.norm(grad_naive - grad_vectorized, ord='fro')\n", "print('difference: %f' % difference)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stochastic Gradient Descent\n", "\n", "We now have vectorized and efficient expressions for the loss, the gradient and our gradient matches the numerical gradient. We are therefore ready to do SGD to minimize the loss." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration 0 / 1500: loss 21.806167\n", "iteration 100 / 1500: loss 7.815800\n", "iteration 200 / 1500: loss 5.570497\n", "iteration 300 / 1500: loss 5.272086\n", "iteration 400 / 1500: loss 4.953897\n", "iteration 500 / 1500: loss 4.934805\n", "iteration 600 / 1500: loss 5.458063\n", "iteration 700 / 1500: loss 4.862745\n", "iteration 800 / 1500: loss 4.639419\n", "iteration 900 / 1500: loss 5.092230\n", "iteration 1000 / 1500: loss 5.335755\n", "iteration 1100 / 1500: loss 4.751913\n", "iteration 1200 / 1500: loss 5.548317\n", "iteration 1300 / 1500: loss 5.275325\n", "iteration 1400 / 1500: loss 4.673485\n", "That took 8.280653s\n" ] } ], "source": [ "# In the file linear_classifier.py, implement SGD in the function\n", "# LinearClassifier.train() and then run it with the code below.\n", "from cs231n.classifiers import LinearSVM\n", "svm = LinearSVM()\n", "tic = time.time()\n", "loss_hist = svm.train(X_train, y_train, learning_rate=1e-7, reg=2.5e4,\n", " num_iters=1500, verbose=True)\n", "toc = time.time()\n", "print('That took %fs' % (toc - tic))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# A useful debugging strategy is to plot the loss as a function of\n", "# iteration number:\n", "plt.plot(loss_hist)\n", "plt.xlabel('Iteration number')\n", "plt.ylabel('Loss value')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "training accuracy: 0.367755\n", "validation accuracy: 0.380000\n" ] } ], "source": [ "# Write the LinearSVM.predict function and evaluate the performance on both the\n", "# training and validation set\n", "y_train_pred = svm.predict(X_train)\n", "print('training accuracy: %f' % (np.mean(y_train == y_train_pred), ))\n", "y_val_pred = svm.predict(X_val)\n", "print('validation accuracy: %f' % (np.mean(y_val == y_val_pred), ))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "tags": [ "code" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\numpy\\core\\fromnumeric.py:90: RuntimeWarning: overflow encountered in reduce\n", " return ufunc.reduce(obj, axis, dtype, out, **passkwargs)\n", "C:\\Users\\zhijiezheng\\feifeili\\2019assignment1\\cs231n\\classifiers\\linear_svm.py:117: RuntimeWarning: overflow encountered in multiply\n", " dW += 2*reg*W\n", "C:\\Users\\zhijiezheng\\feifeili\\2019assignment1\\cs231n\\classifiers\\linear_svm.py:94: RuntimeWarning: invalid value encountered in less_equal\n", " scores[scores <= 0] = 0\n", "C:\\Users\\zhijiezheng\\feifeili\\2019assignment1\\cs231n\\classifiers\\linear_svm.py:113: RuntimeWarning: invalid value encountered in greater\n", " scores[scores > 0] = 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "lr 1.000000e-07 reg 2.500000e+04 train accuracy: 0.369490 val accuracy: 0.392000\n", "lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.356755 val accuracy: 0.364000\n", "lr 5.000000e-05 reg 2.500000e+04 train accuracy: 0.084776 val accuracy: 0.095000\n", "lr 5.000000e-05 reg 5.000000e+04 train accuracy: 0.099898 val accuracy: 0.105000\n", "best validation accuracy achieved during cross-validation: 0.392000\n" ] } ], "source": [ "# Use the validation set to tune hyperparameters (regularization strength and\n", "# learning rate). You should experiment with different ranges for the learning\n", "# rates and regularization strengths; if you are careful you should be able to\n", "# get a classification accuracy of about 0.39 on the validation set.\n", "\n", "#Note: you may see runtime/overflow warnings during hyper-parameter search. \n", "# This may be caused by extreme values, and is not a bug.\n", "\n", "learning_rates = [1e-7, 5e-5]\n", "regularization_strengths = [2.5e4, 5e4]\n", "\n", "# results is dictionary mapping tuples of the form\n", "# (learning_rate, regularization_strength) to tuples of the form\n", "# (training_accuracy, validation_accuracy). The accuracy is simply the fraction\n", "# of data points that are correctly classified.\n", "results = {}\n", "best_val = -1 # The highest validation accuracy that we have seen so far.\n", "best_svm = None # The LinearSVM object that achieved the highest validation rate.\n", "\n", "################################################################################\n", "# TODO: #\n", "# Write code that chooses the best hyperparameters by tuning on the validation #\n", "# set. For each combination of hyperparameters, train a linear SVM on the #\n", "# training set, compute its accuracy on the training and validation sets, and #\n", "# store these numbers in the results dictionary. In addition, store the best #\n", "# validation accuracy in best_val and the LinearSVM object that achieves this #\n", "# accuracy in best_svm. #\n", "# #\n", "# Hint: You should use a small value for num_iters as you develop your #\n", "# validation code so that the SVMs don't take much time to train; once you are #\n", "# confident that your validation code works, you should rerun the validation #\n", "# code with a larger value for num_iters. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "for learning_rate in learning_rates:\n", " for regularization_strength in regularization_strengths:\n", " svm = LinearSVM()\n", " loss_hist = svm.train(X_train, y_train, learning_rate=learning_rate, \n", " reg=regularization_strength, num_iters=1500, verbose=False)\n", " y_train_pred = svm.predict(X_train)\n", " training_accuracy = np.mean(y_train == y_train_pred)\n", " y_val_pred = svm.predict(X_val)\n", " validation_accuracy = np.mean(y_val == y_val_pred)\n", " results[(learning_rate, regularization_strength)] = (training_accuracy, validation_accuracy)\n", " if best_val < validation_accuracy:\n", " best_val = validation_accuracy\n", " best_svm = svm\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " \n", "# Print out results.\n", "for lr, reg in sorted(results):\n", " train_accuracy, val_accuracy = results[(lr, reg)]\n", " print('lr %e reg %e train accuracy: %f val accuracy: %f' % (\n", " lr, reg, train_accuracy, val_accuracy))\n", " \n", "print('best validation accuracy achieved during cross-validation: %f' % best_val)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Visualize the cross-validation results\n", "import math\n", "x_scatter = [math.log10(x[0]) for x in results]\n", "y_scatter = [math.log10(x[1]) for x in results]\n", "\n", "# plot training accuracy\n", "marker_size = 100\n", "colors = [results[x][0] for x in results]\n", "plt.subplot(2, 1, 1)\n", "plt.scatter(x_scatter, y_scatter, marker_size, c=colors, cmap=plt.cm.coolwarm)\n", "plt.colorbar()\n", "plt.xlabel('log learning rate')\n", "plt.ylabel('log regularization strength')\n", "plt.title('CIFAR-10 training accuracy')\n", "\n", "# plot validation accuracy\n", "colors = [results[x][1] for x in results] # default size of markers is 20\n", "plt.subplot(2, 1, 2)\n", "plt.scatter(x_scatter, y_scatter, marker_size, c=colors, cmap=plt.cm.coolwarm)\n", "plt.colorbar()\n", "plt.xlabel('log learning rate')\n", "plt.ylabel('log regularization strength')\n", "plt.title('CIFAR-10 validation accuracy')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "linear SVM on raw pixels final test set accuracy: 0.364000\n" ] } ], "source": [ "# Evaluate the best svm on test set\n", "y_test_pred = best_svm.predict(X_test)\n", "test_accuracy = np.mean(y_test == y_test_pred)\n", "print('linear SVM on raw pixels final test set accuracy: %f' % test_accuracy)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Visualize the learned weights for each class.\n", "# Depending on your choice of learning rate and regularization strength, these may\n", "# or may not be nice to look at.\n", "w = best_svm.W[:-1,:] # strip out the bias\n", "w = w.reshape(32, 32, 3, 10)\n", "w_min, w_max = np.min(w), np.max(w)\n", "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", "for i in range(10):\n", " plt.subplot(2, 5, i + 1)\n", " \n", " # Rescale the weights to be between 0 and 255\n", " wimg = 255.0 * (w[:, :, :, i].squeeze() - w_min) / (w_max - w_min)\n", " plt.imshow(wimg.astype('uint8'))\n", " plt.axis('off')\n", " plt.title(classes[i])" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline question 2**\n", "\n", "Describe what your visualized SVM weights look like, and offer a brief explanation for why they look they way that they do.\n", "\n", "$\\color{blue}{\\textit Your Answer:}$ *fill this in* \n" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment1/two_layer_net.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Implementing a Neural Network\n", "In this exercise we will develop a neural network with fully-connected layers to perform classification, and test it out on the CIFAR-10 dataset." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "# A bit of setup\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from cs231n.classifiers.neural_net import TwoLayerNet\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading external modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "def rel_error(x, y):\n", " \"\"\" returns relative error \"\"\"\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "We will use the class `TwoLayerNet` in the file `cs231n/classifiers/neural_net.py` to represent instances of our network. The network parameters are stored in the instance variable `self.params` where keys are string parameter names and values are numpy arrays. Below, we initialize toy data and a toy model that we will use to develop your implementation." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "# Create a small net and some toy data to check your implementations.\n", "# Note that we set the random seed for repeatable experiments.\n", "\n", "input_size = 4\n", "hidden_size = 10\n", "num_classes = 3\n", "num_inputs = 5\n", "\n", "def init_toy_model():\n", " np.random.seed(0)\n", " return TwoLayerNet(input_size, hidden_size, num_classes, std=1e-1)\n", "\n", "def init_toy_data():\n", " np.random.seed(1)\n", " X = 10 * np.random.randn(num_inputs, input_size)\n", " y = np.array([0, 1, 2, 2, 1])\n", " return X, y\n", "\n", "net = init_toy_model()\n", "X, y = init_toy_data()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Forward pass: compute scores\n", "Open the file `cs231n/classifiers/neural_net.py` and look at the method `TwoLayerNet.loss`. This function is very similar to the loss functions you have written for the SVM and Softmax exercises: It takes the data and weights and computes the class scores, the loss, and the gradients on the parameters. \n", "\n", "Implement the first part of the forward pass which uses the weights and biases to compute the scores for all inputs." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Your scores:\n", "[[-0.81233741 -1.27654624 -0.70335995]\n", " [-0.17129677 -1.18803311 -0.47310444]\n", " [-0.51590475 -1.01354314 -0.8504215 ]\n", " [-0.15419291 -0.48629638 -0.52901952]\n", " [-0.00618733 -0.12435261 -0.15226949]]\n", "\n", "correct scores:\n", "[[-0.81233741 -1.27654624 -0.70335995]\n", " [-0.17129677 -1.18803311 -0.47310444]\n", " [-0.51590475 -1.01354314 -0.8504215 ]\n", " [-0.15419291 -0.48629638 -0.52901952]\n", " [-0.00618733 -0.12435261 -0.15226949]]\n", "\n", "Difference between your scores and correct scores:\n", "3.6802720745909845e-08\n" ] } ], "source": [ "scores = net.loss(X)\n", "print('Your scores:')\n", "print(scores)\n", "print()\n", "print('correct scores:')\n", "correct_scores = np.asarray([\n", " [-0.81233741, -1.27654624, -0.70335995],\n", " [-0.17129677, -1.18803311, -0.47310444],\n", " [-0.51590475, -1.01354314, -0.8504215 ],\n", " [-0.15419291, -0.48629638, -0.52901952],\n", " [-0.00618733, -0.12435261, -0.15226949]])\n", "print(correct_scores)\n", "print()\n", "\n", "# The difference should be very small. We get < 1e-7\n", "print('Difference between your scores and correct scores:')\n", "print(np.sum(np.abs(scores - correct_scores)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Forward pass: compute loss\n", "In the same function, implement the second part that computes the data and regularization loss." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Difference between your loss and correct loss:\n", "1.7985612998927536e-13\n" ] } ], "source": [ "loss, _ = net.loss(X, y, reg=0.05)\n", "correct_loss = 1.30378789133\n", "\n", "# should be very small, we get < 1e-12\n", "print('Difference between your loss and correct loss:')\n", "print(np.sum(np.abs(loss - correct_loss)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Backward pass\n", "Implement the rest of the function. This will compute the gradient of the loss with respect to the variables `W1`, `b1`, `W2`, and `b2`. Now that you (hopefully!) have a correctly implemented forward pass, you can debug your backward pass using a numeric gradient check:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "W1 max relative error: 3.561318e-09\n", "b1 max relative error: 2.738423e-09\n", "W2 max relative error: 3.440708e-09\n", "b2 max relative error: 4.447625e-11\n" ] } ], "source": [ "from cs231n.gradient_check import eval_numerical_gradient\n", "\n", "# Use numeric gradient checking to check your implementation of the backward pass.\n", "# If your implementation is correct, the difference between the numeric and\n", "# analytic gradients should be less than 1e-8 for each of W1, W2, b1, and b2.\n", "\n", "loss, grads = net.loss(X, y, reg=0.05)\n", "\n", "# these should all be less than 1e-8 or so\n", "for param_name in grads:\n", " f = lambda W: net.loss(X, y, reg=0.05)[0]\n", " param_grad_num = eval_numerical_gradient(f, net.params[param_name], verbose=False)\n", " print('%s max relative error: %e' % (param_name, rel_error(param_grad_num, grads[param_name])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Train the network\n", "To train the network we will use stochastic gradient descent (SGD), similar to the SVM and Softmax classifiers. Look at the function `TwoLayerNet.train` and fill in the missing sections to implement the training procedure. This should be very similar to the training procedure you used for the SVM and Softmax classifiers. You will also have to implement `TwoLayerNet.predict`, as the training process periodically performs prediction to keep track of accuracy over time while the network trains.\n", "\n", "Once you have implemented the method, run the code below to train a two-layer network on toy data. You should achieve a training loss less than 0.02." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Final training loss: 0.017149607938732093\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAHwCAYAAADuJ7gwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxkd3nn++9TVaoqVZV2dbfUm9sbXjBgoHFswk6C3YTEkIWdAAPX8QCJJ5MESOYmJJO5k+TmJoFMAOMBQgiLwxACTmIwiQmYYGPcJsZgvNC0l5Z7Uy/al9qe+8c5ktWylpJUR6dK+rxfr3pJdepU1SMddeur3+93nmPuLgAAAKyvRNwFAAAAbEaEMAAAgBgQwgAAAGJACAMAAIgBIQwAACAGhDAAAIAYEMIARMrMkmY2Zma767lvszCzlJm5me1Z5PE3m9mX17cqAI3A6BMGYC4zG5tzNydpWlIlvP8r7v7p9a9q7czsf0ja6e5vWef3TUkqSTrb3R9Zw+t8StIBd//9OpUGIGapuAsA0FjcvTDzuZk9Iunt7v6vi+1vZil3L69HbVg9M0u6e2X5PQGsF6YjAayImf0PM/s7M/usmY1KeqOZXWFm3zazITM7YmZ/aWYt4f5nTMeZ2afCx79sZqNmdoeZnb3SfcPH95nZQ2Y2bGb/y8y+ZWZvWcXX9FQz+0ZY//fN7GfmPPYKM7s/fP8BM/v1cPtWM7s5fM4pM7ttmbe50swOmNlpM/vLOa//djP7evh5Ivx6j4df071mdrGZvUPSayT9Tjhd+w811P0pM/ugmX3FzMYlvdvMDptZYs4+rzGz/Sv9fgGoD0IYgNV4laTPSOqQ9HeSypKuk9Qr6SclXSXpV5Z4/usl/a6kbkmPSfrDle5rZlslfU7Sb4Xv+7Cky1b6hZhZWtI/SfpnSVsk/bqkvzOz88Jd/lrS29y9TdLTJX0j3P5bkg6Gz+kLa1zKyyU9W9IzFQTXn1pgn32SLpd0vqQuSa+VdMrdP6Tg+/w/3b3g7q+qoW4p+N79gaQ2SX8uaVTSS+c8/kZJf7tM3QAiQggDsBr/7u7/6O5Vd59097vc/U53L7v7QUk3SHrhEs//vLvvd/eSpE9LunQV+75C0j3u/qXwsb+QdGIVX8tPSkpL+lN3L4VTr19WEICkYD3XxWbW5u6n3P27c7Zvl7Tb3Yvu/o0nvfKZ/sjdh8N1YV/Xwl9zSVK7pAslyd1/6O5HV1m3JP2Du98RHqdpSZ9UELxkZr0KAtlnl6kbQEQIYQBW49DcO2Z2oZn9s5kdNbMRSf9dwejUYuYGiwlJhcV2XGLf7XPr8OAso4Eaap9vu6TH/MyzlB6VtCP8/FWSfk7SY2b2dTP7iXD7H4f73WpmPzaz31rmfZb9mt39q5Kul/RhScfM7Hoza1tl3dK846Rg1OuVZpZTENb+zd2PL1M3gIgQwgCsxvzTqj8i6QeSznP3dkm/J8kiruGIpJ0zd8zMdGYAqdVhSbvC58/YLelxSQpH+H5O0lYF0383httH3P3X3X2PpFdKeo+ZLTX6VxN3f7+7P0vSJZIulvRfZx5aSd0LPcfdH5O0X9LVkt4kpiKBWBHCANRDm6RhSeNmdpGWXg9WL/8k6Vlm9rNhG4jrFKyNWkrSzLJzbhlJtytY0/YbZtZiZi9RsH7rc2bWamavN7P2cMpzVGG7jvB9zw1D0HC4fU1nH5rZZeEtJWlcUnHOax6TdM6c3Rete5m3+aSk31Yw5fmltdQLYG0IYQDq4TckvVlBSPmIgkXkkXL3YwrOGPxzSSclnSvpPxT0NVvMGyVNzrk9GK6V+lkFo0MnJP2lpNe7+0Phc94s6dFwmvVtCkaQJOkCSV+TNCbpW5I+4O7/vsYvq1PSxyQNSXpEwWjfX4SPfVTSM8KzKz9fQ92L+XsFYe7z7j65xnoBrAHNWgFsCGaWVDBF94vu/s2462lU4cjdw5Le4u5fj7kcYFNjJAxA0zKzq8ysI5xW/F0F03PfibmsRvdqBaOFy53NCSBidMwH0Myep6BtRVrSfZJeGU7TYQFm9u8KepC9wZkGAWLHdCQAAEAMmI4EAACIASEMAAAgBk23Jqy3t9f37NkTdxkAAADLuvvuu0+4+4I9DJsuhO3Zs0f79++PuwwAAIBlmdmjiz3GdCQAAEAMCGEAAAAxIIQBAADEgBAGAAAQA0IYAABADAhhAAAAMSCEAQAAxIAQBgAAEANCGAAAQAwIYQAAADEghAEAAMSAEAYAABADQhgAAEAMCGEAAAAxIIQBAADEgBAGAAAQA0LYPNWqa3iypOlyJe5SAADABkYIm+e+wyN6xh98Vbc9dCLuUgAAwAZGCJsnl0lKkiaK5ZgrAQAAGxkhbJ58OiVJGpsmhAEAgOgQwubJz4yETbMmDAAARIcQNk8uHAkbZzoSAABEiBA2TzJhyrYkNM50JAAAiBAhbAGFTErjRaYjAQBAdAhhC8ilU5pgJAwAAESIELaAXDqpMRbmAwCACBHCFlDIpOgTBgAAIhVZCDOzj5vZcTP7wSKPv8HM7g1vt5vZM6KqZaVyrAkDAAARi3Ik7BOSrlri8YclvdDdny7pDyXdEGEtK5JPJzk7EgAARCoV1Qu7+21mtmeJx2+fc/fbknZGVctK5TMszAcAANFqlDVhb5P05biLmJFPJ5mOBAAAkYpsJKxWZvZiBSHseUvsc42kayRp9+7dkdeUy6Q0Pl2Wu8vMIn8/AACw+cQ6EmZmT5f0UUlXu/vJxfZz9xvcfa+7792yZUvkdRUyKZWrrmKlGvl7AQCAzSm2EGZmuyV9QdKb3P2huOpYSC7NRbwBAEC0IpuONLPPSnqRpF4zG5D0PkktkuTu10v6PUk9kj4UTvmV3X1vVPWsRH7ORby78umYqwEAABtRlGdHvm6Zx98u6e1Rvf9a5DNhCGMkDAAARKRRzo5sKLlMMB05Ttd8AAAQEULYAmamI1kTBgAAokIIW0A+HAkbo2ErAACICCFsAbMjYUxHAgCAiBDCFvDEmjCmIwEAQDQIYQuYbVHBdCQAAIgIIWwBrS1JmYmLeAMAgMgQwhaQSJhyLVzEGwAARIcQtoiZi3gDAABEgRC2iEImxUgYAACIDCFsEbl0kjVhAAAgMoSwReTTKZq1AgCAyBDCFpHPJDXBdCQAAIgIIWwRuUyKC3gDAIDIEMIWkU8nOTsSAABEhhC2iHwmpYlppiMBAEA0CGGLyKeD6Uh3j7sUAACwARHCFpHLJFV1aapUjbsUAACwARHCFlHIhBfxZnE+AACIACFsEbl0EMJYFwYAAKJACFtEPp2UJBq2AgCASBDCFpEPpyMnmI4EAAARIIQtIp8JRsK4iDcAAIgCIWwRM2vCaNgKAACiQAhbxOzZkYQwAAAQAULYInLhwnwu4g0AAKJACFtEnj5hAAAgQoSwRWRSCSWM6UgAABANQtgizEz5TErjNGsFAAARIIQtIZ9O0ScMAABEghC2hFwmyUgYAACIBCFsCYVMioX5AAAgEoSwJeTSSS7gDQAAIkEIW0I+neIC3gAAIBKEsCXkMyzMBwAA0SCELSGfSXIBbwAAEAlC2BJy6RTNWgEAQCQIYUsIpiMrqlY97lIAAMAGQwhbQj68iPdkiSlJAABQX4SwJeRmLuLNlCQAAKgzQtgSCplgJIzF+QAAoN4IYUvIpRkJAwAA0SCELSFPCAMAABEhhC0hH05HTjAdCQAA6owQtoT8zMJ8uuYDAIA6I4QtIRe2qGA6EgAA1BshbAmF2RYVTEcCAID6IoQtYebsSC7iDQAA6o0QtoR0KqGWpGmMkTAAAFBnhLBl5NIpRsIAAEDdEcKWUcikWBMGAADqjhC2jFw6ydmRAACg7ghhy8hlUvQJAwAAdUcIW0Yhk6RjPgAAqDtC2DJy6RTTkQAAoO4IYcvIp5NMRwIAgLqLLISZ2cfN7LiZ/WCRx83M/tLMDpjZvWb2rKhqWYt8JqUJzo4EAAB1FuVI2CckXbXE4/sknR/erpH04QhrWbU8C/MBAEAEIgth7n6bpFNL7HK1pE964NuSOs2sP6p6ViuXTmqqVFW5Uo27FAAAsIHEuSZsh6RDc+4PhNsaysxFvCdKTEkCAID6iTOE2QLbfMEdza4xs/1mtn9wcDDiss40exFv1oUBAIA6ijOEDUjaNef+TkmHF9rR3W9w973uvnfLli3rUtyMfCYpSRqjTQUAAKijOEPYTZJ+OTxL8nJJw+5+JMZ6FpSfGQljcT4AAKijVFQvbGaflfQiSb1mNiDpfZJaJMndr5d0s6SXSzogaULSW6OqZS1y4UgYF/EGAAD1FFkIc/fXLfO4S3pnVO9fLzMjYXTNBwAA9UTH/GXkw7Mj6RUGAADqiRC2jJmF+VzEGwAA1BMhbBk5piMBAEAECGHLyKdZmA8AAOqPELaMVDKhTCpBiwoAAFBXhLAa5DMpmrUCAIC6IoTVIJdOsjAfAADUFSGsBoVMioX5AACgrghhNcilk/QJAwAAdUUIq0E+k+LsSAAAUFeEsBrk0ynOjgQAAHVFCKtBLpNkJAwAANQVIawG+XSKNWEAAKCuCGE1yGdSmmAkDAAA1BEhrAb5dFLFSlXFcjXuUgAAwAZBCKtBLhNcxJvF+QAAoF4IYTUoZMKLeNM1HwAA1AkhrAa5dDgSRtd8AABQJ4SwGuTDkTAu4g0AAOqFEFaD/MxIGNORAACgTghhNciHC/O5iDcAAKgXQlgNcumZhfmEMAAAUB+EsBoUZkfCmI4EAAD1QQirQVu2RZI0PFmKuRIAALBREMJq0JpOKpdO6tR4Me5SAADABkEIq1FPIa0TY9NxlwEAADYIQliNevIZnRxjJAwAANQHIaxGvYUMI2EAAKBuCGE16i2kdZI1YQAAoE4IYTXqKaR1aryoatXjLgUAAGwAhLAa9RYyqlRdQ7SpAAAAdUAIq1FPISNJOsm6MAAAUAeEsBr15tOSpBOcIQkAAOqAEFajmZEwzpAEAAD1QAirUW8hGAljOhIAANQDIaxGnbm0EibaVAAAgLoghNUomTB159OsCQMAAHVBCFuBnjxd8wEAQH0Qwlagty3NmjAAAFAXhLAV6MlnWBMGAADqghC2Aj2FtE6yJgwAANQBIWwFegsZjU2XNVWqxF0KAABocoSwFZjpFcbifAAAsFaEsBXoyc9cP5IpSQAAsDaEsBXomemaP85IGAAAWBtC2Ar0zl4/kpEwAACwNoSwFehhTRgAAKgTQtgK5NIp5dJJ1oQBAIA1I4StUNArjJEwAACwNoSwFaJrPgAAqAdC2Ar1FjIaHGUkDAAArA0hbIV6C2lGwgAAwJoRwlaop5DWqfGiqlWPuxQAANDECGEr1JPPqFJ1DU+W4i4FAAA0MULYCvW2zTRsZV0YAABYvUhDmJldZWYPmtkBM3vvAo93mNk/mtn3zOw+M3trlPXUQ29+pmEr68IAAMDqRRbCzCwp6YOS9km6WNLrzOziebu9U9IP3f0Zkl4k6c/MLB1VTfXQE166iOtHAgCAtYhyJOwySQfc/aC7FyXdKOnqefu4pDYzM0kFSacklSOsac1mL+LNSBgAAFiDKEPYDkmH5twfCLfN9VeSLpJ0WNL3JV3n7tUIa1qzrlxaCWNNGAAAWJsoQ5gtsG1+X4crJd0jabukSyX9lZm1P+mFzK4xs/1mtn9wcLD+la5AMmHqzqdZEwYAANYkyhA2IGnXnPs7FYx4zfVWSV/wwAFJD0u6cP4LufsN7r7X3fdu2bIlsoJr1ZPPcP1IAACwJlGGsLsknW9mZ4eL7V8r6aZ5+zwm6aWSZGbbJF0g6WCENdVFD13zAQDAGkUWwty9LOldkm6RdL+kz7n7fWZ2rZldG+72h5Kea2bfl3SrpPe4+4moaqqX3kKGNWEAAGBNUlG+uLvfLOnmeduun/P5YUkvi7KGKPQU0pwdCQAA1oSO+avQW8hobLqsqVIl7lIAAECTIoStQk/YNZ91YQAAYLUIYavQG3bNPzHKujAAALA6hLBVmO2az6WLAADAKhHCVmF2JIzF+QAAYJUIYavA9SMBAMBaEcJWIZdOKZdO0jUfAACsGiFslXoKaRq2AgCAVSOErVJPPkOLCgAAsGqEsFUKLl1ECAMAAKtDCFul3kKaNWEAAGDVCGGr1FNI6+R4UdWqx10KAABoQoSwVerJZ1SpuoYnS3GXAgAAmhAhbJV624KGrXTNBwAAq0EIW6Xe8CLeLM4HAACrQQhbpZ7ZSxcxEgYAAFaOELZKXLoIAACsBSFslbpyaSVMtKkAAACrQghbpWTC1FPI6NgIIQwAAKwcIWwNtndkdXh4Mu4yAABAEyKErUF/R6uODE/FXQYAAGhCy4YwM/t/zazdzFrM7FYzO2Fmb1yP4hpdf2dWR4Ym5U7XfAAAsDK1jIS9zN1HJL1C0oCkp0j6rUirahLbO1o1XqxoZKocdykAAKDJ1BLCWsKPL5f0WXc/FWE9TaW/MytJOsK6MAAAsEK1hLB/NLMHJO2VdKuZbZHEQigFa8Ik6cgQ3w4AALAyy4Ywd3+vpCsk7XX3kqRxSVdHXVgz2B6OhHGGJAAAWKlaFub/kqSyu1fM7P+W9ClJ2yOvrAlsbcsqmTBGwgAAwIrVMh35u+4+ambPk3SlpL+R9OFoy2oOyYRpW1uGkTAAALBitYSwSvjxZyR92N2/JCkdXUnNpb+zVYeHCGEAAGBlaglhj5vZRyS9WtLNZpap8XmbwvZOGrYCAICVqyVMvVrSLZKucvchSd2iT9is7R1ZHRmeomErAABYkVrOjpyQ9GNJV5rZuyRtdfevRl5Zk+jvyKpYrurkeDHuUgAAQBOp5ezI6yR9WtLW8PYpM/vVqAtrFv2d9AoDAAArl6phn7dJ+gl3H5ckM/sTSXdI+l9RFtYstocNWw8PT+ppOztirgYAADSLWtaEmZ44Q1Lh5xZNOc1n9tJFnCEJAABWoJaRsL+WdKeZ/UN4/5WSPhZdSc2lJ59WOpXgDEkAALAiy4Ywd/9zM/u6pOcpGAF7q7v/R9SFNQszU39HVocJYQAAYAUWDWFm1j3n7iPhbfYxdz8VXVnNpb8jy3QkAABYkaVGwu6W5Hpi/ddMIywLPz8nwrqayvaOVt35MJkUAADUbtEQ5u5nr2chzWx7Z6uOjkypUnUlE5yzAAAAlsflh+qgvzOrStV1fJR1YQAAoDaEsDqY7RVGw1YAAFAjQlgdzPYKG2ZxPgAAqM2yLSrmnSU5Y9TdSxHU05T6O7h0EQAAWJlaRsK+K2lQ0kOSfhR+/rCZfdfMnh1lcc2iPZtSPp3UYUbCAABAjWoJYV+R9HJ373X3Hkn7JH1O0jskfSjK4pqFmam/s5WRMAAAULNaQthed79l5o67f1XSC9z925IykVXWZPo7sqwJAwAANaslhJ0ys/eY2Vnh7d2STptZUlI14vqaxvaOVi5dBAAAalZLCHu9pJ2SvijpS5J2h9uSkl4dXWnNpb8zqxNj0yqWyaUAAGB5tVzA+4SkX13k4QP1Lad5be9slbt0bGRKu7pzcZcDAAAaXC0tKp4i6Tcl7Zm7v7u/JLqyms9Mw9bHhyYJYQAAYFnLhjBJ/0fS9ZI+KqkSbTnNi4atAABgJWoJYWV3/3DklTQ5Ll0EAABWopaF+f9oZu8ws34z6565RV5Zk2lNJ9WZa2EkDAAA1KSWkbA3hx9/a842l3RO/ctpbv0dNGwFAAC1qeXsyLPXo5CNYHtHll5hAACgJouGMDN7ibt/zcx+fqHH3f0Ly724mV0l6QMKeop91N3/eIF9XiTp/ZJaJJ1w9xfWWHvD6e/M6u7HTsddBgAAaAJLjYS9UNLXJP3sAo+5pCVDWNhR/4OSflrSgKS7zOwmd//hnH06FVx/8ip3f8zMtq6w/obS39GqoYmSJosVtaaTcZcDAAAa2KIhzN3fF3586ypf+zJJB9z9oCSZ2Y2Srpb0wzn7vF7SF9z9sfC9jq/yvRrC9rBNxeHhSZ27pRBzNQAAoJHV0qw1I+kX9ORmrf99mafukHRozv0BST8xb5+nSGoxs69LapP0AXf/5AI1XCPpGknavXv3ciXHZqZNxZGhKUIYAABYUi1nR35J0rCkuyVNr+C1bYFtvsD7P1vSSyW1SrrDzL7t7g+d8ST3GyTdIEl79+6d/xoNY3tn2CuMNhUAAGAZtYSwne5+1Spee0DSrrmvI+nwAvuccPdxSeNmdpukZ0h6SE1oW3tWZtLhIUIYAABYWi3NWm83s6et4rXvknS+mZ1tZmlJr5V007x9viTp+WaWMrOcgunK+1fxXg0hnUqot5ChVxgAAFhWLSNhz5P0FjN7WMF0pElyd3/6Uk9y97KZvUvSLQpaVHzc3e8zs2vDx6939/vN7CuS7pVUVdDG4gdr+HpiF/QKYyQMAAAsrZYQtm+1L+7uN0u6ed626+fd/1NJf7ra92g0fR1ZPXxiPO4yAABAg1t0OtLM2sNPRxe5YQH9Ha06Qtd8AACwjKVGwj4j6RUKzop0nXm2I9eOXER/R1ajU2WNTZdVyNQy0AgAADajpZq1viL8yLUjV6CvI2jYenR4UudtbYu5GgAA0KhqGqoxsy5J50vKzmxz99uiKqqZ9c80bB2eIoQBAIBF1dIx/+2SrlPQ5+seSZdLukPSS6ItrTn1hyNhrAsDAABLqaVP2HWSniPpUXd/saRnShqMtKomtq09DGH0CgMAAEuoJYRNufuUFFxH0t0fkHRBtGU1r5mGrUdH6BUGAAAWV8uasAEz65T0RUn/Yman9eTLD2GO/o4s05EAAGBJy4Ywd39V+Onvm9m/SeqQ9JVIq2pyfR1ZHTo1EXcZAACggS05HWlmCTObvYyQu3/D3W9y92L0pTUvRsIAAMBylgxh7l6V9D0z271O9WwI/R2tGp4saaJYjrsUAADQoGpZE9Yv6T4z+46k2YsiuvvPRVZVk5vbpuLcLYWYqwEAAI2olhD2B5FXscE80TWfEAYAABZWSwh7ubu/Z+4GM/sTSd+IpqTmR8NWAACwnFr6hP30Atv21buQjWSmYevRYXqFAQCAhS06EmZm/1nSOySdY2b3znmoTdK3oi6smWVbkurJp3WYkTAAALCIpaYjPyPpy5L+SNJ752wfdfdTkVa1AfR1ZHWUEAYAABaxaAhz92FJw5Jet37lbBz9HVk9zvUjAQDAImpZE4ZVCEbCWBMGAAAWRgiLSH9Hq05PlDRVqsRdCgAAaECEsIj0tdOmAgAALI4QFpH+zpkQxpQkAAB4MkJYRPo7WiWJMyQBAMCCCGERYToSAAAshRAWkdZ0Up25FkbCAADAgghhEeprz7ImDAAALIgQFqHtna1MRwIAgAURwiLEpYsAAMBiCGER6m/P6uR4kYatAADgSQhhEerrCM6QPD4yHXMlAACg0RDCIjTTK+wwi/MBAMA8hLAIzXTNZ10YAACYjxAWIRq2AgCAxRDCIpTPpNSeTeko05EAAGAeQljE+jvoFQYAAJ6MEBaxvo4sIQwAADwJISxi2zsJYQAA4MkIYRHra2/VibFpFcvVuEsBAAANhBAWsf6wYeuxEUbDAADAEwhhEZvpmn+UEAYAAOYghEVsZiTs8BBtKgAAwBMIYRHr7wwuXUTXfAAAMBchLGKFTEptmRRnSAIAgDMQwtZBX0eWkTAAAHAGQtg6CBq2siYMAAA8gRC2DnZ25TRwmhAGAACeQAhbB7u6W3VyvKjx6XLcpQAAgAZBCFsHu7pykqRDpydirgQAADQKQtg62N0dhrBTTEkCAIAAIWwd7ApD2GOnGAkDAAABQtg66Mq1KJ9O6hAhDAAAhAhh68DMtKs7RwgDAACzCGHrZFd3joX5AABgFiFsnezqyunQqUm5e9ylAACABkAIWye7u1s1WaroxFgx7lIAAEADiDSEmdlVZvagmR0ws/cusd9zzKxiZr8YZT1xmjlDkilJAAAgRRjCzCwp6YOS9km6WNLrzOziRfb7E0m3RFVLI3iiVxghDAAARDsSdpmkA+5+0N2Lkm6UdPUC+/2qpL+XdDzCWmK3s4sQBgAAnhBlCNsh6dCc+wPhtllmtkPSqyRdH2EdDaE1nVRvIUPXfAAAICnaEGYLbJt/auD7Jb3H3StLvpDZNWa238z2Dw4O1q3A9ba7u5U1YQAAQFK0IWxA0q4593dKOjxvn72SbjSzRyT9oqQPmdkr57+Qu9/g7nvdfe+WLVuiqjdyu7pzXLoIAABIijaE3SXpfDM728zSkl4r6aa5O7j72e6+x933SPq8pHe4+xcjrClWu7pyOjI8pVKlGncpAAAgZpGFMHcvS3qXgrMe75f0OXe/z8yuNbNro3rfRra7O6dK1XVkaCruUgAAQMxSUb64u98s6eZ52xZchO/ub4mylkaws7tVUtArbHdPLuZqAABAnOiYv4520aYCAACECGHrqL8jq1TCWJwPAAAIYesplUxoe2erDp2mVxgAAJsdIWyd7epuZToSAAAQwtbb7u4cIQwAABDC1tvOrpxOjhc1Pl2OuxQAABAjQtg629UdnCE5wLowAAA2NULYOtsdhjDOkAQAYHMjhK2zXV1hw1ZCGAAAmxohbJ1159PKpZM6dJoQBgDAZkYIW2dmxhmSAACAEBaHnV05HTrFwnwAADYzQlgMdnW36rFTE3L3uEsBAAAxIYTFYHd3TpOlik6OF+MuBQAAxIQQFoNdXUGbCtaFAQCweRHCYrC7h15hAABsdoSwGOwMe4XRNR8AgM2LEBaDXDql3kKa6UgAADYxQlhMdnXnmI4EAGATI4TFZFdXjq75AABsYoSwmOzpzevx05OaKlXiLgUAAMSAEBaTC/vaVHXpwPGxuEsBAAAxIITF5Cnb2iRJDx4djbkSAAAQB0JYTPb05JROJfTgMUIYAACbESEsJqlkQudtKTASBgDAJkUIi9EFfW2EMAAANilCWIwu6GvT0ZEpDU+U4i4FAACsM0JYjC6YWZzPujAAADYdQliMLugjhAEAsFkRwmLU35FVWzalB4+OxF0KAABYZ4SwGJmZLtjWpoeO0rAVAIDNhhAWs6f0temBoyNy97hLAQAA64gQFrML+9o0MlXWsZHpuEsBAADriBAWs6dwhtBZwD4AABpCSURBVCQAAJsSISxms20qWJwPAMCmQgiLWVc+ra1tGT3I4nwAADYVQlgDuKCvTQ8eYyQMAIDNhBDWAC7Y1qYfHRtTpcoZkgAAbBaEsAZwQV+bpstVPXpyPO5SAADAOiGENYCZyxc9xBmSAABsGoSwBnD+1jaZSQ8cJYQBALBZEMIaQGs6qbO6c4yEAQCwiRDCGsQFfW2MhAEAsIkQwhrEBdva9MiJcU2VKnGXAgAA1gEhrEFc0Neuqks/HqRpKwAAmwEhrEFc0FeQJD3IlCQAAJsCIaxBnNWTVzqZ4ELeAABsEoSwBtGSTOjcrQVGwgAA2CQIYQ3kgm0FPUQIAwBgUyCENZCL+tt1eHhKjw9Nxl0KAACIGCGsgbz8af1KmPSZOx+NuxQAABAxQlgD2dWd00sv2qbPfucQ/cIAANjgCGEN5s1X7NGp8aL++d4jcZcCAAAiRAhrMD95Xo/O3ZLXJ+94JO5SAABAhAhhDcbM9Obn7tH3BoZ1z6GhuMsBAAARiTSEmdlVZvagmR0ws/cu8PgbzOze8Ha7mT0jynqaxc8/a6cKmZT+5vZH4i4FAABEJLIQZmZJSR+UtE/SxZJeZ2YXz9vtYUkvdPenS/pDSTdEVU8zKWRS+oVn7dA/33tEg6PTcZcDAAAiEOVI2GWSDrj7QXcvSrpR0tVzd3D32939dHj325J2RlhPU3nTFXtUrFT1d3c9FncpAAAgAlGGsB2SDs25PxBuW8zbJH05wnqaynlbC3r++b361LcfU6lSjbscAABQZ1GGMFtgmy+4o9mLFYSw9yzy+DVmtt/M9g8ODtaxxMb2y1fs0dGRKf3LD4/FXQoAAKizKEPYgKRdc+7vlHR4/k5m9nRJH5V0tbufXOiF3P0Gd9/r7nu3bNkSSbGN6CUXbtXOrlYW6AMAsAFFGcLuknS+mZ1tZmlJr5V009wdzGy3pC9IepO7PxRhLU0pmTC96fKzdOfDp3TgOBf2BgBgI4kshLl7WdK7JN0i6X5Jn3P3+8zsWjO7Ntzt9yT1SPqQmd1jZvujqqdZvfKZwTK6m79/NOZKAABAPZn7gsu0GtbevXt9//7NldV+4cO3a6JY0Zeve37cpQAAgBUws7vdfe9Cj9Exvwnsu6RP9x8Z0aMnx+MuBQAA1AkhrAlc+dQ+SdJXfsCUJAAAGwUhrAns6s7pkh3t+jIhDACADYMQ1iT2XdKvew4N6cjwZNylAACAOiCENYmZKclbGA0DAGBDIIQ1ifO2FnT+1gJTkgAAbBCEsCay75I+3fXIKZ0Ym467FAAAsEaEsCZy5SV9qrq4liQAABsAIayJXNzfrt3dOVpVAACwARDCmoiZad8lfbr9xyc0PFmKuxwAALAGhLAmc+UlfSpVXLfez5QkAADNjBDWZC7d2am+9ixTkgAANDlCWJNJJExXXdKnbzw0qPHpctzlAACAVSKENaF9l/RpulzVR7/5cNylAACAVSKENaHLzu7Wq565Q++/9SF97QHWhgEA0IwIYU3IzPQ/X/U0Xdzfrus+e48ODo7FXRIAAFghQliTak0n9ZE3PVuppOlX/vZujbE+DACApkIIa2I7u3L64OufpYMnxvUbn7tH1arHXRIAAKgRIazJPfe8Xv32vgt1y33H9KGvH4i7HAAAUCNC2AbwtuedrVdeul1/9i8P6VsHTsRdDgAAqAEhbAMwM/3Rzz9du7tz+sN/+iHTkgAANAFC2AbRmk7qN152gR44Oqovfe/xuMsBAADLIIRtIK94Wr+eur1df/bVhzRdrsRdDgAAWAIhbANJJEzvvupCDZye1GfufCzucgAAwBIIYRvMC87v1RXn9OivvnaA3mEAADQwQtgGY2Z6z74LdXK8qP9928G4ywEAAIsghG1Al+7q1L5L+vTRbx7UibHpuMsBAAALIIRtUL955QWaKlf1V1+jgSsAAI2IELZBnbuloFfv3alP3/moDp2aiLscAAAwDyFsA7vupU9RMmF6x6e/q9PjxbjLAQAAcxDCNrC+jqw+9IZn6cFjo3rNDXfo+MhU3CUBAIAQIWyDe8mF2/SJtz5Hj5+e1C995A6mJgEAaBCEsE3guef26lNv/wkNTZT0S9ffoQPHx+IuCQCATY8Qtkk8c3eXbrzmcpWrrld/5A5980eDXOgbAIAYEcI2kYv62/V/rr1CrS1Jvelj39Hlf3Srfv+m+/Sdh08RyAAAWGfm3ly/fPfu3ev79++Pu4ymNj5d1q0PHNfN9x7Rvz14XNPlqra1Z/TKS3fozc/do+2drXGXCADAhmBmd7v73gUfI4RtbmPTZd16/zH9871HdOsDx2WSfu4Z2/V/veAcXdTfHnd5AAA0NUIYajJwekIf+/eH9Xd3HdJEsaLnn9+rd774PF1+Tk/cpQEA0JQIYViR4YmSPnXno/rE7Y9ocHRar7tst/7bz1ykQiYVd2kAADSVpUIYC/PxJB25Fr3zxefpm+9+sX7lBefoxrse05V/cZtu//GJuEsDAGDDIIRhUdmWpH775Rfp89deoXQqodf/7zv1vi/9QBPFctylAQDQ9AhhWNazz+rWzb/2fL31J/fob+54VFe9/5v66n1H1WxT2QAANBJCGGrSmk7qfT/7VN14zeVKpxK65m/v1hs/dqfuPzISd2kAADQlFuZjxUqVqj5z52P6i399SCOTJb32st36rz/9FKVTCQ2OTs/ehidLunh7u56+o0OpJHkfALD5cHYkIjE0UdQHbv2R/vaOR1VeouN+Pp3Uc87u1hXn9OiKc3t0yfYOJRK2jpUCABAPQhgideD4mG6653G1ZVu0pS0ze2ttSep7A0O648cndcfBkzo4OC5J2tnVql941k794rN3ald3LubqAQCIDiEMDeHYyJS++aMT+uJ/PK5v/fiE3KXLz+nWLz57l562o0OFbEqFTHBLMlIGANgACGFoOI8PTeofvjugz989oEdOTjzp8Vw6qXQqIZNkZuFHqSuX1iU7OoLb9nZdvL1dbdmWda8fAIBaEMLQsNxd3xsY1uGhSY1NlTUyVdLYdFmjU2WVKlW5Sy6Xu1R16fjIlH5weFjHRqZnX2NPT04X9bfrwr52Xdjfpov62rW9M6tT40UdD08SOD46pbHpii7sa9PTdnaoneAGAFgHS4UwrkODWJmZLt3VqUt3da7oecdHp3Tf4RHd9/iw7js8ogeOjuor9x1VrX9TnLMlr2fs7NTF/e2quGt0qqTRqSD8TRTLetqODr3sqX06f2tBZkyNAgDqj5EwbBjj02U9dGxUDxwd1dHhKfUW0trSltXW9oy2FDJqTSf1w8MjundgSN8bGNb3Dg3p+GgwopZMmNqyKbVlU2pJJmZPIjirJ6eXXbxNP3XRNmVaknrs1IQOhbfHTk2oWK4q05JQJpVUNvyYzyTVnc+oJ59Wdz4dfCyk1Z1LqyufVgvtOgBg02A6EljE0ERR6VRCrS3JM0a8jo1M6V/vP6av3ndMd/z4pIqV6hnP6y1ktKu7Vbl0UlOlqqbLFU2XqpoqVzQ2VdbQZGnRUbm2bGo2nO3symlnV6t2dQcft7ZlVSxXNV4sa7JYmf3o0pPWxyXMZBYEyISZEialEgmlU8GtJZlQJvyYSprS4cdUIqFMS0K5luSC/dvcXdPlqkanyuHXmmY0EABWiRAGrMHoVEm3//ikkmba3ROEpVx66Zn8cqWqocmSTo0XF7ydnijq+Mi0Hh+a1OGhySX7rEUpnUyoNZ1ULp1Uwkxj02WNTZdVmVNPWzalc7cUdN7Wgs7dUtDOrlZNl6saD/cdmw6CYjJhakkm1JK02eBXLFc1VapqqlTRdLmiqVJV3fm0dnfntLsnp7O6c9rR1apMKilJqlRdpUpV5aornQzC5FLcXVXXkmfTVquuA4NjevDoqFqSieAM3GxKhUxShUzL7Ne/2AhlpeqaKlWUStpsnYuZLlc0Xa4qaTYbjoOPWjbIDk0U9fjQpJIJUzaVnB1hTacSQSAPv9ejU2WNT5fVmk6qKxeMtnblW5atTZImimUdHBzXyFRJ7dkWdbS2qD3bokKWM5KbRalS1bGRKRUyKXXm0nGXgxqwJgxYg7Zsi658at+KnpNKJtRbyKi3kFl233KlqmOj0xo4NaHBsWllU0EoyGVSyqWTam154pfr3BMVXEFAmAkilaqrXK2qVKlqulxVMbyVw2BTqrjKlapKVdd0qaKJYnCbLJY1Uayo4q62TEr52ZCSUqXqOjg4rh8Pjum2hwb1+bsHnvy1Jkyt6aTcpWIleM+5WpJBqMimk0onEzo5Pq2p0hP7mEktyYTKlarmZ9GefFrb2rPa1p7RtvasMqmEjo9Oh7cpDY5Oq1iuald3Tuf05nV2b0Fnb8mrO5fWfYeHdc+hId07MKyx6eUvOj83kJbD4DVVqqhU8TP2mZm2njkrdzQ8mWRkqvykr33u92Br2xNfx7b2rNqyKR06NaFHTk7okZPjGpooLVvjUgqZlLryLeqeDWbBaOtEsaKHT4zr4OC4jo5MLfr8jtYW9Xdk1deRDT62t6or36KRyZJOT5R0OvzjYWy6rPZsi7rC6fbufFrt2RYNTRZ1dHhKR4andHR4SsdGptSZa9Hu7rz29OR0Vm9eZ3XnZKYz/iA5OV6UJHXlWtSVS88GS5fr8dOTGjg9qYGhST1+elIjUyW1zYbHlDpaW1TIpGYD7kzOTZhUyLSovTWl9myL2ltbVMgkNTZd0dBEMfxaShqeLCmZMOXSSWVbwn934edzlxhkWxJyafZnYrJY1WSponKlGoxCh0E7YaZipaqTY0WdGJvWybFpnRgraniypETClEoEoTyVMKWSCeXTyeDfWyalfCY5+8ddqVJVueIqVasqlV2DY9M6HP7BdmxkavbfSXc+rXN68zpnS17nbikok0pocCw4GenEWFGDo9MqVarqaA2/t/kWdebS6mxtUWeuRR2taXXmgs9bkgkdGZrSwOmJ4Ht+emL25yWVSMzWn0qYOnMt6s5n1Ft44mdtsljRyfGiTo5Nzx7XQjp1xkj/ru6ckgnTybFgv8GxaZ0cK2qiWD7jGJpMyUTw/8L8Uf1M6ok/TjKphLItydmfw4X+kKhWXacnirPfw7k/UwOnJ/Wyi7fpnS8+b03/9taCkTAANRueLOnI8KRaW5LhL46UMqnEGaM87h4GQldLMvGk/xjdXYOj03rs1IQePTmhR09NaLpcCaZLE8EIWkvSNFms6ujIlI6PTOnY6JSODk9rulzR1raMtoZr/ba2ZdSSTOjRkxM6eGJcD58Ymw14qYTpwv628MSPLj11e7uq7hqbKmu8WNbYdDB1PBFO+U6UKpqYDgJpKmnKtgS/jLPhL+Fy1YOzd8MTOEanSnIFIX0mmLVnW5RJJVSpuiruqlZdlao0WarM+TqmdHxkWmPFsrZ3tGpPb05n9eR1dk9eO7paJWl2enu6HEx1t7Ykw2DconwmqXw6pclSRafHizoVhoqT40UNTZR0cjy4PxNy0qmEztmS19m9+fAXdkGduRaNTpU1MlnSSPjx9EQQoo6OBEFqcPSJM5Dz6aQ6w1/ihUxKo1Pl2fecnhM8Z4LctvastrZlNDRZ0qMnx/XoyYkz9puRCNvOSNLQZOmMEdgZ6WRC2zuz2tHVqo7WsO6Z2ieDAOxS8FdJqBL+DC6nLZNS1V0TpUrNJ/XUqrUlqd62tHoLGXW0tsjn/KFUrgR/GI3PGeEcny6f8UdIwoI/5loSpi1tGW3vbA1uHVn1d7ZqdKqkg4NBuD54YkwnxoIwm0yYegvB+24J/30MTwTH9/RESUMTxWVH3pMJ0/bOrPraszKz2X/PlTAUDk0GP1tz/0CZq6O1Rd35tMamy2f8HEUpYUEo7S1kZn++B0endXK8+KSfhXQqoR2drdrR2ap9T+vTG37irEhrYyQMQF10tAajEEsxs2Dt2SKzY2amre1ZbW3Pau+e7rrWV626jo1O6eRYUedtLSjbsvwUXVwqVW/oKcBiuarhyZLaW1OLTnW6uyZLFQ1PltTZmlZreuH9qlXX8dFpPXoyOOGlp5BWdz4IJzPfg2rVNTpdnh1xc0k7O1vVW8is+DJn7q6pUlUjU6UwaAZnP89M4XXlgp/jmTWRM+sgg9HhsqbL1XDU64n1nrIgWLW2JNWaDsJ5Kmmq+kwLnXBq3Ew9hbTymZX9ep2pOZGQWsKRp5UYniypXKmqK5de8rnurvFicMyGJooaDkcEp8oV9XcEo1Xb2jLLXu/X3TUyVZ4N+7l0Uj35J598NFWqzI6sHTo9qWrV1VvIqKeQng2LuXRqdoQ/eO0gSJfK1dnR9TNG+CvV8I+UiiZLldmRxxNj0xocLWpooqht7Vldsr1j9gouvYWM+juz2tnVqt78yn+mohLpSJiZXSXpA5KSkj7q7n8873ELH3+5pAlJb3H37y71moyEAQCAZrHUSFhk58qbWVLSByXtk3SxpNeZ2cXzdtsn6fzwdo2kD0dVDwAAQCOJsmHRZZIOuPtBdy9KulHS1fP2uVrSJz3wbUmdZtYfYU0AAAANIcoQtkPSoTn3B8JtK91HZnaNme03s/2Dg4N1LxQAAGC9RRnCFlr1Nn8BWi37yN1vcPe97r53y5YtdSkOAAAgTlGGsAFJu+bc3ynp8Cr2AQAA2HCiDGF3STrfzM42s7Sk10q6ad4+N0n6ZQtcLmnY3Y9EWBMAAEBDiKxPmLuXzexdkm5R0KLi4+5+n5ldGz5+vaSbFbSnOKCgRcVbo6oHAACgkUTarNXdb1YQtOZuu37O5y7pnVHWAAAA0IiinI4EAADAIghhAAAAMSCEAQAAxIAQBgAAEANCGAAAQAwIYQAAADEghAEAAMSAEAYAABADQhgAAEAMCGEAAAAxsODKQc3DzAYlPboOb9Ur6cQ6vA9WhuPSuDg2jYnj0pg4Lo2r3sfmLHffstADTRfC1ouZ7Xf3vXHXgTNxXBoXx6YxcVwaE8elca3nsWE6EgAAIAaEMAAAgBgQwhZ3Q9wFYEEcl8bFsWlMHJfGxHFpXOt2bFgTBgAAEANGwgAAAGJACJvHzK4yswfN7ICZvTfuejYrM9tlZv9mZveb2X1mdl24vdvM/sXMfhR+7Iq71s3KzJJm9h9m9k/hfY5NzMys08w+b2YPhP92ruC4NAYz+/Xw/7IfmNlnzSzLsYmHmX3czI6b2Q/mbFv0WJjZb4eZ4EEzu7KetRDC5jCzpKQPSton6WJJrzOzi+OtatMqS/oNd79I0uWS3hkei/dKutXdz5d0a3gf8bhO0v1z7nNs4vcBSV9x9wslPUPB8eG4xMzMdkj6NUl73f0SSUlJrxXHJi6fkHTVvG0LHovw985rJT01fM6HwqxQF4SwM10m6YC7H3T3oqQbJV0dc02bkrsfcffvhp+PKvhlskPB8fibcLe/kfTKeCrc3Mxsp6SfkfTROZs5NjEys3ZJL5D0MUly96K7D4nj0ihSklrNLCUpJ+mwODaxcPfbJJ2at3mxY3G1pBvdfdrdH5Z0QEFWqAtC2Jl2SDo05/5AuA0xMrM9kp4p6U5J29z9iBQENUlb46tsU3u/pHdLqs7ZxrGJ1zmSBiX9dThN/FEzy4vjEjt3f1zS/yfpMUlHJA27+1fFsWkkix2LSHMBIexMtsA2Th+NkZkVJP29pP/i7iNx1wPJzF4h6bi73x13LThDStKzJH3Y3Z8paVxMbzWEcH3R1ZLOlrRdUt7M3hhvVahRpLmAEHamAUm75tzfqWDIGDEwsxYFAezT7v6FcPMxM+sPH++XdDyu+jaxn5T0c2b2iIIp+5eY2afEsYnbgKQBd78zvP95BaGM4xK/n5L0sLsPuntJ0hckPVccm0ay2LGINBcQws50l6TzzexsM0srWIx3U8w1bUpmZgrWttzv7n8+56GbJL05/PzNkr603rVtdu7+2+6+0933KPg38jV3f6M4NrFy96OSDpnZBeGml0r6oTgujeAxSZebWS78v+2lCta5cmwax2LH4iZJrzWzjJmdLel8Sd+p15vSrHUeM3u5gvUuSUkfd/f/J+aSNiUze56kb0r6vp5Yd/Q7CtaFfU7SbgX/sf2Su89fYIl1YmYvkvSb7v4KM+sRxyZWZnapgpMl0pIOSnqrgj+2OS4xM7M/kPQaBWd+/4ekt0sqiGOz7szss5JeJKlX0jFJ75P0RS1yLMzsv0n6TwqO3X9x9y/XrRZCGAAAwPpjOhIAACAGhDAAAIAYEMIAAABiQAgDAACIASEMAAAgBoQwAE3JzG4PP+4xs9fX+bV/Z6H3AoB6okUFgKY2t1fZCp6TdPfKEo+PuXuhHvUBwGIYCQPQlMxsLPz0jyU938zuMbNfN7Okmf2pmd1lZvea2a+E+7/IzP7NzD6joAmwzOyLZna3md1nZteE2/5YUmv4ep+e+14W+FMz+4GZfd/MXjPntb9uZp83swfM7NNhZ3QAWFQq7gIAYI3eqzkjYWGYGnb355hZRtK3zOyr4b6XSbrE3R8O7/8ndz9lZq2S7jKzv3f395rZu9z90gXe6+clXSrpGQq6bd9lZreFjz1T0lMVXFfuWwqusfnv9f9yAWwUjIQB2GheJumXzeweBZe56lFwvTdJ+s6cACZJv2Zm35P0bQUX6T1fS3uepM+6e8Xdj0n6hqTnzHntAXevSrpH0p66fDUANixGwgBsNCbpV939ljM2BmvHxufd/ylJV7j7hJl9XVK2htdezPSczyvi/1cAy2AkDECzG5XUNuf+LZL+s5m1SJKZPcXM8gs8r0PS6TCAXSjp8jmPlWaeP89tkl4TrjvbIukFkr5Tl68CwKbDX2oAmt29ksrhtOInJH1AwVTgd8PF8YOSXrnA874i6Vozu1fSgwqmJGfcIOleM/uuu79hzvZ/kHSFpO9JcknvdvejYYgDgBWhRQUAAEAMmI4EAACIASEMAAAgBoQwAACAGBDCAAAAYkAIAwAAiAEhDAAAIAaEMAAAgBgQwgAAAGLw/wPeYazmXNFBkAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "net = init_toy_model()\n", "stats = net.train(X, y, X, y,\n", " learning_rate=1e-1, reg=5e-6,\n", " num_iters=100, verbose=False)\n", "\n", "print('Final training loss: ', stats['loss_history'][-1])\n", "\n", "# plot the loss history\n", "plt.plot(stats['loss_history'])\n", "plt.xlabel('iteration')\n", "plt.ylabel('training loss')\n", "plt.title('Training Loss history')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Load the data\n", "Now that you have implemented a two-layer network that passes gradient checks and works on toy data, it's time to load up our favorite CIFAR-10 data so we can use it to train a classifier on a real dataset." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train data shape: (49000, 3072)\n", "Train labels shape: (49000,)\n", "Validation data shape: (1000, 3072)\n", "Validation labels shape: (1000,)\n", "Test data shape: (1000, 3072)\n", "Test labels shape: (1000,)\n" ] } ], "source": [ "from cs231n.data_utils import load_CIFAR10\n", "\n", "def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000):\n", " \"\"\"\n", " Load the CIFAR-10 dataset from disk and perform preprocessing to prepare\n", " it for the two-layer neural net classifier. These are the same steps as\n", " we used for the SVM, but condensed to a single function. \n", " \"\"\"\n", " # Load the raw CIFAR-10 data\n", " cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n", " \n", " # Cleaning up variables to prevent loading data multiple times (which may cause memory issue)\n", " try:\n", " del X_train, y_train\n", " del X_test, y_test\n", " print('Clear previously loaded data.')\n", " except:\n", " pass\n", "\n", " X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n", " \n", " # Subsample the data\n", " mask = list(range(num_training, num_training + num_validation))\n", " X_val = X_train[mask]\n", " y_val = y_train[mask]\n", " mask = list(range(num_training))\n", " X_train = X_train[mask]\n", " y_train = y_train[mask]\n", " mask = list(range(num_test))\n", " X_test = X_test[mask]\n", " y_test = y_test[mask]\n", "\n", " # Normalize the data: subtract the mean image\n", " mean_image = np.mean(X_train, axis=0)\n", " X_train -= mean_image\n", " X_val -= mean_image\n", " X_test -= mean_image\n", "\n", " # Reshape data to rows\n", " X_train = X_train.reshape(num_training, -1)\n", " X_val = X_val.reshape(num_validation, -1)\n", " X_test = X_test.reshape(num_test, -1)\n", "\n", " return X_train, y_train, X_val, y_val, X_test, y_test\n", "\n", "\n", "# Invoke the above function to get our data.\n", "X_train, y_train, X_val, y_val, X_test, y_test = get_CIFAR10_data()\n", "print('Train data shape: ', X_train.shape)\n", "print('Train labels shape: ', y_train.shape)\n", "print('Validation data shape: ', X_val.shape)\n", "print('Validation labels shape: ', y_val.shape)\n", "print('Test data shape: ', X_test.shape)\n", "print('Test labels shape: ', y_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Train a network\n", "To train our network we will use SGD. In addition, we will adjust the learning rate with an exponential learning rate schedule as optimization proceeds; after each epoch, we will reduce the learning rate by multiplying it by a decay rate." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "tags": [ "code" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iteration 0 / 1000: loss 2.302954\n", "iteration 100 / 1000: loss 2.302550\n", "iteration 200 / 1000: loss 2.297648\n", "iteration 300 / 1000: loss 2.259602\n", "iteration 400 / 1000: loss 2.204170\n", "iteration 500 / 1000: loss 2.118565\n", "iteration 600 / 1000: loss 2.051535\n", "iteration 700 / 1000: loss 1.988466\n", "iteration 800 / 1000: loss 2.006591\n", "iteration 900 / 1000: loss 1.951473\n", "Validation accuracy: 0.287\n" ] } ], "source": [ "input_size = 32 * 32 * 3\n", "hidden_size = 50\n", "num_classes = 10\n", "net = TwoLayerNet(input_size, hidden_size, num_classes)\n", "\n", "# Train the network\n", "stats = net.train(X_train, y_train, X_val, y_val,\n", " num_iters=1000, batch_size=200,\n", " learning_rate=1e-4, learning_rate_decay=0.95,\n", " reg=0.25, verbose=True)\n", "\n", "# Predict on the validation set\n", "val_acc = (net.predict(X_val) == y_val).mean()\n", "print('Validation accuracy: ', val_acc)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Debug the training\n", "With the default parameters we provided above, you should get a validation accuracy of about 0.29 on the validation set. This isn't very good.\n", "\n", "One strategy for getting insight into what's wrong is to plot the loss function and the accuracies on the training and validation sets during optimization.\n", "\n", "Another strategy is to visualize the weights that were learned in the first layer of the network. In most neural networks trained on visual data, the first layer weights typically show some visible structure when visualized." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(stats['loss_history'])\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "\n", "plt.subplot(2, 1, 2)\n", "plt.plot(stats['train_acc_history'], label='train')\n", "plt.plot(stats['val_acc_history'], label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from cs231n.vis_utils import visualize_grid\n", "\n", "# Visualize the weights of the network\n", "\n", "def show_net_weights(net):\n", " W1 = net.params['W1']\n", " W1 = W1.reshape(32, 32, 3, -1).transpose(3, 0, 1, 2)\n", " plt.imshow(visualize_grid(W1, padding=3).astype('uint8'))\n", " plt.gca().axis('off')\n", " plt.show()\n", "\n", "show_net_weights(net)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tune your hyperparameters\n", "\n", "**What's wrong?**. Looking at the visualizations above, we see that the loss is decreasing more or less linearly, which seems to suggest that the learning rate may be too low. Moreover, there is no gap between the training and validation accuracy, suggesting that the model we used has low capacity, and that we should increase its size. On the other hand, with a very large model we would expect to see more overfitting, which would manifest itself as a very large gap between the training and validation accuracy.\n", "\n", "**Tuning**. Tuning the hyperparameters and developing intuition for how they affect the final performance is a large part of using Neural Networks, so we want you to get a lot of practice. Below, you should experiment with different values of the various hyperparameters, including hidden layer size, learning rate, numer of training epochs, and regularization strength. You might also consider tuning the learning rate decay, but you should be able to get good performance using the default value.\n", "\n", "**Approximate results**. You should be aim to achieve a classification accuracy of greater than 48% on the validation set. Our best network gets over 52% on the validation set.\n", "\n", "**Experiment**: You goal in this exercise is to get as good of a result on CIFAR-10 as you can (52% could serve as a reference), with a fully-connected Neural Network. Feel free implement your own techniques (e.g. PCA to reduce dimensionality, or adding dropout, or adding features to the solver, etc.)." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Explain your hyperparameter tuning process below.**\n", "\n", "$\\color{blue}{\\textit Your Answer:}$" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "tags": [ "code" ] }, "outputs": [], "source": [ "best_net = None # store the best model into this \n", "\n", "#################################################################################\n", "# TODO: Tune hyperparameters using the validation set. Store your best trained #\n", "# model in best_net. #\n", "# #\n", "# To help debug your network, it may help to use visualizations similar to the #\n", "# ones we used above; these visualizations will have significant qualitative #\n", "# differences from the ones we saw above for the poorly tuned network. #\n", "# #\n", "# Tweaking hyperparameters by hand can be fun, but you might find it useful to #\n", "# write code to sweep through possible combinations of hyperparameters #\n", "# automatically like we did on the previous exercises. #\n", "#################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "results = {}\n", "best_val = -1\n", "learning_rates = [1e-3, 5e-4]\n", "regularization_strengths = [0.25, 0.5]\n", "\n", "input_size = 32 * 32 * 3\n", "hidden_size = 100\n", "num_classes = 10\n", "net = TwoLayerNet(input_size, hidden_size, num_classes)\n", "\n", "for learning_rate in learning_rates:\n", " for regularization_strength in regularization_strengths:\n", " net = TwoLayerNet(input_size, hidden_size, num_classes)\n", " loss_hist = net.train(X_train, y_train, X_val, y_val,\n", " num_iters=1000, batch_size=200,\n", " learning_rate=learning_rate, learning_rate_decay=0.95,\n", " reg=regularization_strength, verbose=False)\n", " y_train_pred = net.predict(X_train)\n", " training_accuracy = np.mean(y_train == y_train_pred)\n", " y_val_pred = net.predict(X_val)\n", " validation_accuracy = np.mean(y_val == y_val_pred)\n", " results[(learning_rate, regularization_strength)] = (training_accuracy, validation_accuracy)\n", " if best_val < validation_accuracy:\n", " best_val = validation_accuracy\n", " best_net = net\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcEAAAHBCAYAAAARuwDoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy9Sax1WZaY9e2z9+mb277+7yIjMqMqy1nGLoNAgpklRgyREUKICQhUAwYwgAEwMEJCsmSQkPCUCSMkhJjRSiBLlBFlpylnUxkZf/zt6257+v4w2DvCEXWDmHqQbw3vu++ctVff7XXFNE08wRM8wRM8wRP8LoL1TxqBJ3iCJ3iCJ3iCf1Lw5ASf4Ame4Ame4HcWnpzgEzzBEzzBE/zOwpMTfIIneIIneILfWXhygk/wBE/wBE/wOwtPTvAJnuAJnuAJfmdB/dAf//i/+c+mh9cPANhtT3QxR2Y5nhz1F1wXW3qUbQNCAjCNPpGStJaHHDIAHOlSjS1179DVGwCur+fgeqimpyoLAPLBAtmj6pEefXUjWgXsS0EpKgS2wcyjbGv+u3/vb34H37/1n//vvP3wnrrPAQiDGOFKJlvg+Po7RZEhpoGxLLHqEgA5ixGdoGx2SMfTn1WCyulo8pY+kuYcPlZu0SJIXKFJsPKYRIjEZhL6eWVjMVkDQe8QxBEAN8+e88f/2j/zHXz/+7/5X3P2ScCm02wo/vxIlCjKsuDNY6pPuqx54Xp0pUWkdMxylz1w39YsFtfMHY2b6ge2o41KIvbHBoD0cYcjMvqu4Wx1pekpLJA+lWpxY33WZ0mMcGa06YAaen3+EP76H/8b38H33/2XLZbXV3jTJaOlz9qNksMuZxKKxeUagNgNiN2Iq9WKvatlZSoEylP4lYXr6HdkzZ506LGjC9y6AkC4JX1t0Q8TQaBpV94NHMYGd5wYPY3z5vGWvMjY3tds2o8A/A//0/Y7+P6b//p/zDCmuEGMaDQe85lLoSRdWSM7LSdx7OB0NcqfEc/mAARuwMP9R4SQeK6Wu2bcsxY2thWzHTT/fQaquqPDYxIuAHlZInGpbYsh1zqw2WwRk0WKoCs1Lv/j//ZffoPrL/7Ov6TpWdeU25xajuSZ1gvfkqw8D1VJrEifP5IBwyqgSSeU1Pyuyy3v3n6gLVuyrdafqe2wV2c4nsPi5gyAD28+MnMtni3PkKH+rB97zhcurjdwSPV7u8Hm8cMbfvnzP+Pf+ZPuO7T9n//b/xWAKssoq4xghLXhv4pC9sUebxypd0a3RYXvxiziEMvWMvt4n+HiURYpaXfUZ50k9IJOClYXMwCGDixnoB4Em42WE+kmDGNDYvtUlX6HJ216f8b5xRl//W/809/B97/4j/4WZbnTMmZPdG1PnCwY0c8b+x5/GijKgqnRsm3PAqTwmQcBm1TTOAhmxI5gk3/EG7VRmSZJOU4EoYJR06mqJ+rRoilLAlfLlFIWQkwc9nuk0rKyCJd0A/z7f/s//A6+f/s//X8YhX5WMTQ4+YDwFHYUanxdi3Z7wLYErWg1vm1HWj2y35cMg35+r2yuzgWHTOD5hp7S53j3GtdOEH0NgOM6RDOHoZOktf5MtSPCH5jGDtfRungROVxHPv/Kf/Avfgfff/vf+ldJ70oyV/N23N9y87nDL249gpU5ayRRu48kk6Qxz1OFj3MVkI0Q9touqNmaJJmYtUc+bp5p/M5KVoFNVUjEXuvetBjwKkUuLDorBiAMjtjDkoehonf1eZt3KX/nv/pPBP8/8INO0G8ksacZ6K8sWmfAxWExdwBwixFmEm/jsztqQQynnt4VqCJlqrQiOsseicBue/pRE2TuXBEHHZUAZWlhEtsUGdgMY4clzf3FwWKiw+lgcrUATGLACeMTfOtux+XKIttrIzN6JZYSeL6NNM5CNB22M9HHDtVWE90TLdJpmOSIq9HDmgua7Y7GLVCdfq+Me0TX4XkzFuda4aUzo06PhGcBXTEz/3xgKFrSumZ0NO2b7nCCrz3Z5L8RuHZl/m/EdgOq+ojnJQDEpeDYtUBGW+l35sLlLDzj6mLO+avn+rOHR/L7EdUeiRf6rMfBos9snHYg7LWidG3HuI6YOzOYNG6HskMedjiNYJppR2s5yQm+z37yR1w/f8XEhK9sg7LNr27fsrafYV8YB2J5JMEctZqxKrVxi8+hyjyaKCXyNG/zfoF1yPGTc4aZVviZspBTyECDddTvqMMPfLr4hF5aFJMJwKQgHixmrzLmd9ox8BecoHQGzlcvCBOBas1nrkvQjoSR/43TirwAYSu6pkYFWiZ8URGEHeW2REhNz9DOyFuBVA2+r/9XDTbrpU9Z2biW1gvb6mmtgcC16N1Afxb5lEVP4Ids7jYntG17bRSOrce09nlID0yd0QHb4fFxZB0ojh80freeRVxNWEIgff29pghQzqcIKQki7XyzLGB+saYoM6xuAcBqZvN8cUN8HUCjZWCxWhKvbPK85jzRPBsan3IcWOcj/MnPv4PvLtPPl2WDcALK5kgxadzGtGCSEhYxlik2hX1AWk2k6ZbQ0Xw9FCl2EKGclrrYA/DQwTBY4LoMpX7e+uwFnVXiHWFAO6NSFLhKUvcpUn+NSbqIcSLP0xP6lk2OmIwDlQ6+42FZPXWpHd4ymRF5AsfvsUbNM2FLrHpEWTW21PZtGgYaJFEAmOdNQ0hkjYSqpzYmdRg7xASKEVt9rd8wdYI4ipjkoHGJJIUJOr4Nx+NILrQ8D3c7cB2COKbMNW+ECumGAyLvuXqp9e7YCIYhJpgHhL62j95sZBzBVRO1o3Hb1S1WHIPlk4RaZuktGCqkZ+OhP+tlTZeWjINF298CEJxf0IXuCb7VNcS//xPiXMt2R8SMjJ90HZ+80jIw7OZklw7JEDEG+mxTsaNVCetI0n7Quv35pxP2vub1LOWnZ/q9tbzkJjiwO5yzX2pduepatgykL32ee+cA2M4N3V2KGkPkq98HYN/9Lyf4fhueyqFP8ARP8ARP8DsLP5gJzlbn+HMdKc79OV33QLH5gDVo3ymFS1QOdFONU+oUusi2qCHC9SXxSkcjc2uGLTvKLsc1GdxS9qgpIavf47YmkkUyHg44YYxrypLNVOB1A/7snGmmI9nb/Za6qU4Rtmp8VWEnGr/ebbGxqIeWY2HKOY6kqQa6aaBqdcSopMBzIFm4tONkCNMRhhOWJTl2OkJxB4sxkMycAT/SpGvrkilo8MacMNTvnXrIZhNjtUVJ/Vnz6Jyg2ydndNuUx1/qLPH9uuSl5xHPP2FQulTX7TKyvaSez7GkPsN1YOHfXJO1F/jdS0335BKruSVvIspaPy8bQ57bDdPqE1RgSghuiXAWzC4ivMUKgN29zd3b/wOrESQsAXj+YnmC78Ne4F9PRMIjrzQurrSJ59eMVsLa15nq6Ib0tmAWxuwSHVX/dp9z7N5Qfdgi0JHk+kyyH2OcvkUo/b7OnXDHgLpJaZe6QrDJBU11wFMj4cXSyMUVfmcxNS7NV/ensgAc9znzJIbBp811Kez2/T2uirHPZiRrzUNLWsimpCPDRmd9ZVeStxWpVXA86lQjcTOwFPYQMtWmRNr0hMMKFa6pWy0nH4+35GPJYhEjTZzZMzJ4PuuzM95vTmX3oTBlLq/DkxHS9yjjrwCQ1cSua9hkFsetllmn6Xj5e5+DEjy+1c97/S7DaQOCRc0i0OXvWbTiuMup656x0zyTVkLlhEROzK4zpc+ixZ6dQdDQ3ulsa+psuvacaBYA380EH+7eatrZNokdkGcbjpOWWdlNyDDi2r5ka8qDdCn7rCYt9zhS24qmEoyti6cUk6NT9bTvGHqHZmqpdvpcB1sRuALP97itdSY0Fjuuzs9BWfRC66xwB4Ro2B53J/Qd6pww0LyVSsCwJUsHWlP6GwILxw1x/YBp1HKR5R1WCMgep9P6Ow0DwhtxpUKMmrfOKMFO6OoDo6lU+AuJ3do8pBVDqXlmr+fISTFRIk2JtLcbuvE0c+0cxcOt/rzLK2TasPbOUJ6Wu14EZFWLbdXcdVq3B6VInIhBjtRCmbMGFGWH5wbknc62mSZKEeIoiddrmqxiB2RMPSpkr7O5KLgmnWq+fP2nOMZGeyqieHZqG5r3j/h9h7jRNrp6n3EULRvZk+w0TcS5IBJn5Ps3RNJkk8mSC2fikBY8Oprf8ceQM9smKj9hHmkaDJHHNEl8lZM80+841B3NXUFQZGBpekZjTTd1+L6LaN8D8GcP3gm+34YfdoJzmyrTB1hcLpCVTa3ANv2bL/b37NOUKAxIpGZEXoKjOpZOgOpNzXzc4U4edVnjGqdQfdkQzmpE3pAbPbHtiWkI6IUgl1opIlzmQYgbRZSWVk4v9HDUaUqurAzbdRlMmcKtK2x3xI/PEeao3ehS1zkdDYNxKp01UUwWop8ohOkdOT7Li3M22Q7PGMYmLxBKEi8CglAb90SNNEVBMPQ40pBTDYTjSJA4qFEbmXqQJ/iO4zNc/w0fzHfsrKF2jkjVcxHrMudXjaSy3jKUG4JYMz+tY6qHgX33gH2mjeeQrEirMx4efoW0NG5x0LK3BN4w8JXSZz2bfOKZJN1PzOfauIfzhuKXHnN7xrPkBQCBWJzgezg2RDtJ+GnE9rU2eIM9IPqBR6thjDTPEt/Glgv6ukH6unSRDQ33U0IuSpamnPLQBZRTwcJfIyddltrXNjgtj6Wi7rQCVI2gEAXKaokLLT9uv6Dva6yyoOuaE1wBHNXi+DZOIvmw18ZzW6bM5j2dimgrLZ+tHBjKnKmqqWzNwzQtuUu3dFOHjZaJoVMk4RwniTlkxkDJHje08D3JfamDj4Ns8WKfzm5hNP8rJiYPdvWeh9u3J7h+MI4Hq0LGCh+oKx2kHJotXR3Q5DlU+vxdPVF/2HK2dNn32kD57orMH+jkAjG/0Gc7VlT9gGOHiEnzp6xqyjcdx/yK94Wmu+d/ZG/3hCqhO+hSpzWNpEPDYfvdfiDA69t3AFyenTH6PbvDjmKrjWwvbGaLM7ZZzsEEq47toORAate0xqbUVkWkGnIUsZEJ33HJy5bKqgiklu1N+8gSl7v9nvcbXR6zxIScBq6TkLzSz/NmFkNdkR7eneDrupLFQsui4wq2jwV9sWFUWgac2EW5DtL26GutF47X0nYj/TAy+EZXXA/HVlieJPF0QC/tiKYqGYqAmbFb0yg4TiXeykGUWqaUOxBYNkdrxBWa30JaVPVpOdSKF1wcNA/fZxajU9LSEZi+XpLMsRcxRb5lsEy5cUqpcRBOR2XO0BQNygmpLMn+3swstD1zO0bGAe1OlyVHZeMvPbpyoDYy5jkQxC5hfIU16CBgvFxjO6e2oX94pFvGXCe6jfJytPiF+A3CGzlK/f3PVcuZM7LhGVmnHe2r5BNaUdJ6Luy0/hS2YOVmZGNP7+oyZ19GPOYp16uQyvT3u8lB9THPfnrFdqvPsYkt1EVH86cOY6v17PHwD0/w/Tb8oBNczxO2xlGEUw9yIrTmdLYW2BdRT24pphRKE2lfzAOqckANYO810efRhFt3BNJFdDqSKVRDmW55/2FPsrrUB20GqqmlL3KcSWcVB6smno9I0ZEbha3TCjc4Rb0p90y1wjcRX2e3yF7gq5HA9FfypsONHbqqp3e0s5BCMAnFaA1Is0tVeTZeEDJDcMy1cishiGxF50o8I+yu7aPskIVrEcx0hKTinKEt8B2oOjNo8z30rZuc3zzuGJRWCF8ssWUC8pZ3R33Wo20x7B84UFPdagHrhy/oywuu51cUJtJWboASFd2omJQ2YouZQ+cGlF/mhK1+XmF3XKQh1lzRZSZyD2yCOKB35wxz0591Xp7g64w+5LB7kDRmKGB/OLK5/cDS99koraBRIChqj988WAzTIwCt5RG6CfmP5mwOpj8qwfYt0rInMDzDEZShRy1niAdNF8cTFKlP3W1oax1srb2KtD/QiBDJ/HuoC30/4kmHsmmpW63YSRzT1iUfN3tWc/POQJL4IbUSrExTWP5oRX8R8fC4oS81jVMLhlnEMeqYIq3YyzBhsCT7qiKNNE2GrqOVCmGVNGZIKQ5XNDXsqx11e2r0pkbjkk4+dZET2x5to3HZ5wGxSiAMab8eApl5TK5NI0OSQOOSeRA6EYt5jGVmyGq3JhlCwsjHM3IRvyupB8nD447C08+rKpePj3ueXdhsDybbsgaO+5rfbD6e4Hso9LPm52uGGt7utnRm0Ky3Oj5sS9xww2j6qfP5FfH5jH05YCVadzJlUVPQVyVRbwzvbMWhONB2PfO11icx9rwtdkjLZ29mBey6oSru6LhGjsamPG7pqgbG/gTfssyQUut7i0VRN/huQGFp/Iq0IAw9pKWQyddZlIfPgLQVgXFaWVNRVAV2FWHFGue8yrAdh9BN6M1QTVuWWKFPOLjkrj5v3ZaM9sgqvqA0iURd5tTVqTz0dcNkgur1YsWkFig1Etj6WUO7oattxrblaHqnZZPjUqEaC8fVtqIqWy4agYuPNIOFYV0TLSRXyQWVmQuwhpFp06CmisTWNE6ERRfPuX5mczDviEObdjh1gh/HI2F/oHirqzIfeMfw2NOmLf1zU73pbnhY2oRtTRXqs42XC2J+wkXRoyJtP1buBW2f0gmHx+d6cGvWjJxHf8SYH1HCzIaULf4qo3AKHpTGadrk3NgzUvuWw4OW0UZ8d1bgL8IPOsHz82csXdPAtUdUrhCxR2fKKuEw423xW5p0gyrMoITdI4ueu9svuY704SP/GktAURVUmTaAMg7YFB0UFtNM/6/oJJE/MLYzxtpE0M5If6yYLyULqSO5muqbCbtvg7B6VNhRlpqxTlcRX17iSBtfmcGYCRzfZWZb7M1UlefO6WRHPTkoU7UcrJrtQXE8WjihJrArO+LAZ44g22ulCOOeIPBwPAtL6OwgriaOE/Rthu+atmt/uqi8cxpm/YByNKPj56+w5DvK1zUtOqiw7TnbuqcoRvJJR0/25ZpP15e8uvgRtTTTgl1Fe+nwl6K/xq/f/0LTmI6ZsLkLcvYmgAgeXO6uBzxZk3dasOuthe3NaMeK3ahp7HJKX9cPUM2Em6VMng5SbE9w2TukdUFh/ufjpqGt3vAwtFgGv5uf/ZSyBEc84l9r414NPXLqqHJF6Wr6rL01nVUzHka235RgHNSzgLgMaS1tPHbZRLuzkNGIWoUnuAKcrc5ZLiKKPsP1dVbVTT2dHdBZEZXBd6wb2qGialqiMz2NFl/MKPIRWynCRvOwHlu22cDxLmM916rjiop+HNgcK8Zey/FxiBgOG0LVcrUwxigfaQebKLBZX12e0nbUMjAUR+Qg2U6Sv//6SwAWkeL5hUVZ9fRK6yOhhSUc5ouY53Nd+vxH777AGzKuPnv1zXDDh+QDu3cTQlmcz/R7W7tgut+Tjg7TQdM4zfe4boitMmoz+TrVNm9ujzijzV8Ef9Kf+cWRrqsYJsW21nah9iSBsFlcLKhqrSePw0ceDyWdB2Gk6V4WKZu6Yaor8knLiTUcaLoR23PYm7J+6Nh83GwRVkBTav5ndY1bD9jFiCO1nZmwGKaJUJ2OOkSJZG6ClGwcsRyPUTgkgZbFxpNMgSTrW1wzNdx1E04UoxybXmhdER2oeUBZ22RmoCU/tri2zSq0MVVI6r6mxyIfBK1xeNbYMI9jagGjcT79OCLd03JdUJcczXRospwxWy8Y8w3LM62fsedym3Zkx47Q6HFuC9YXLwlEgG+ShF1nUWU589kZySev9LkOJeGYgyOwpOZjNu0IlEdVWHxyoXVlIGBLyvlCETWajyoPsG5O6ds0EVNvcfdG3yYoGkEQeMizEDVpuv/f3Vt+L33GfnggMQFet7FwRMSD91uKO/299b9wyUV9wc/fvWGZake2D1yS1CGeDeT7f6Df+T4i+1GE+rOcyteJih+2ZGOBUC6u8xoAR52Wb78NT4MxT/AET/AET/A7Cz+YCSaRhTs3GV4qqUZJ26Ycdqb2v+kJion79zvKR11/7Zcx9XFPSE+Fjlp3b2Ku5jOc/chjZmbVwxFsl3C06e7185IzBzn4LM9WHNAlmeKQoZYuyRQRL3X0MPUdO1OO/DZ4jsATDcKUcOkHPKvB90YSk+LFK8mYS95hETo6/a4aRd+0bIYcket3DONEmW2pZc3K1bX/rodJwtC22MPXww1rVtc+YnRpOl36U+1IuztSH2uswMQZyWlBdGZHBM+vGO511vc+f8+i/MCYP/AxMffrogZ2imZQVEtd9nsuFmxti+fY1J7O8CZnhmh73hS3pEedMdYIPr9ZYAUBHx80q5eLgvy443KsiTyN27GGAYchH/Et3XNZTxcn+L58/hm9mDO2OZ7JrJ+df8Kx29Ec3uOau5iZq6jKlGEqcfxLQ+OBf3T7mvVsyfKFziK3+wek5WJHPs6gs7m8atj1DUVb83XVJc5i8m6PmjrsRvOidx3GucRbjyyn7xfjdSIY2z2rWUxR6YjybSMIoxWe79OYisZhyKHNidSC1NYy4XgLMhwcscbyTTa3fWQ3HmlGnU0AsK+gq7DskNTc67PUiB+EBHLOaqnP+lgfcJTCciKC5PwU2UbLu7N/y6MTUlohda/PtX2wuX61Ipokh0EPcpQzSdXt+NQ/Z3vUFYiysJDLc2rXo290hve4gXe7PbO9jedpBlUPI/d9RzBI2ivN5/F9S1rVzA6Cqda8zbOWJm1YX34G/N3voGuNWmfffdjhRjN8JbCVzm66oSOIIEhsdqbf/XDI6ZqO2XLGaK4cbbuBQQ4Eq4Q81//7kLa4quNCxOwO+lztoGg6SVcfGYav2xoDsa0IV2eUuSkt1hlT5+BdrU7I68iJQ6Wf5wchwUxRdw3y6/u+tqLuO7KxIK/M3Tk7QjiK2hIce20XRuUgkBTWSFWYDKwfWdkOh7zCVkYughntYU8zjYyWfofsJ6ZBUrUN/dezAl2JDPwTfC3R45mrY6XVERZbgrBjGWqZdSKXmTuhrJC+M3YxP+CpBG82wzdoiP1vsAg5Oj2t6fU6dYEYHKa+ZzKtLY4Dky2wY4dtpW0KQ09VldyVPbZxFU7fYz+ezmPE1oCz2eDPtDxlVQHdDC+ZcV/qcmR7nPP/fnbHq6any7QMFNcDub+l3fSEf3CjP3NX/DzbM/PX/NwMkYXjnht7Ysp2jL0uaw9OQfa2xPNsrK3OQNvgpzRTxlAq/Of6ikRUHE/w/Tb8oBMUzcjYmjJACWQN+48p+YM29tvXG9L7HY9f/BmbVH8WvpEMXc+rs4TG3EH5mG8YWp8wibFyzZ3D7pFWuoSL51iNRmOllpSuT14WOEtdIlh9/iPyrCKe+/gzbaBusz3z+rRcZ9mCBo+5uRlfiJapEMhVzyS1IZtZgjwaCUpBsNbKkqcdm6pC5QN5q4XMcx2acYS6IRt0IHA2SxhsBxUrpDF4TV9Qlh6OV1HtTA9LSfq2YqgbZmai1fFPBf3KFmxdnyDTuGVf/Rlj3RNHl5wlOoCYXb6iumgpjh3no6lxExOIgNfTHT81fbh2ecfrTcU+f+DMlOB2/sSXnU8VvKMTxlAkYFUj78v3JKlWTntU9OM5aeuTT+airPvdaUAA13FReYkMBckLXb6blKBMAyI3JsFMcz5mKEfQHRzEUstAV94xWII2lNybstnuzR3PXv2I+bMEW1egSHf3WENOY4MzaGdRhRPNh5LAjRHG0wZlztRZXEVn7GengxsAXz18IAgsZkuP0NLniu2RtC7Ah7TSynFsC4ZpxL2ec1/rwODL3x45+hHt5CEKU9I7eEjbxXZsKmM8g6BkqDZ0tUO30MYhHm2qzYFBTRRmiranIBg9FrOIzK9PkR1NuXoQXNgNmTVnEerSV96kVNXIKHtyU14/T1weP6S8O9wxHjVNvixL5qFF8YsWlDYUIxuE7yCe3fDGlLT+PPuIykfEfM2zxjhGx0Lu99w2R8JMf6/ab7G4oDmeTrNuTa8TIbhZe/htwSLRvB6yEhlPbA57vrzVE3r7LMNZXJE4ZwymryXCOVPVgVDcT5pO5dgxCcnD3YbY0e/Y5BvSx552sjkPTGmrb2l6Dx+PotbC46mAKHb/cQviW5DWJTNTlvOiELuRlI3F16F0OYwcj1sq2aDM/MDMX9DgUPUTpSmJW8pGYJFPBZ0ZEFHKo6XDC+YwaFz6rgcvwhl60mpnUBZU9khbHZGWfvNsFqG+pyc4sz0aMyji2Yrt4YExDMlNj9XrBYnrMvgua9MAngabCYXdt+yOHzSNq54wqjg+3lIddYA7uANx9AmO61HlZqq/29A2OxbrZ0yTGUhrYeUltPuC0jjabm5zJk9bO1ZZUcYxa3Mn8tlPnzEx4+NjRWjud0ciopI+D15CYO7UqotLttuetX1NOpi733/vCzbWnDPXJfD1oF6/fcubs5b94gXJXgf5/tUzXtk56T/8JVms6Z5sbZTdcXW5IxPaqc7kaU/72/CDTpC+5M6M6cb+FUMb0FTQmUhu8HeMsqaZoL3TTjDPJ1yg9c8QRhHLTnAVw1zF7GOt7GfEtJ2CSWdXANmbPdYyo7cmPE9HFM7FCis/kvcxGMdnWxG2GWr5NuSdxYX3j51NPZT044Arwm+uXOApog5Waw/O9DssPyPPCs7UDGlGhj3LQyYxXVvRm+sf8WzJOpmzigeUEeIuL7j9mCKmmpXpa92mE90hw5lKlBkH98ZTUifPf0ycZdyt/y8APq1XFLtb2h4uHZ1BnUcRD8rlD707Xk/a8VzIiC52oTqwjbQx9uQLlNjSxBNvHHOxt5e8yb7ESQ9wY4ZqRsVxHRDtJh7v3wAQhAlLAaF0GIyzGOPTPtAmbVjEA8nijJXZEJSXgq44ECpBVmiDx2JO7Mx4kx8JzJDCuHPYyhGahsrw++hM/CjwWEYxRxPJJecuXV1T/aJkutCyci3P6IXL1JQEoeaj00nsucTxaiL7+2v+5e0t47MF0l4SLM2VlkNJm6eE4TVjo9/ZjD1ZO6fOBGWllemhytmoGdezawIzMbovBUniMoUJtaU/e5e19LkkcCWLUPPMaVI2WcbFOsYzk8qiL5jNI86XFvfqdJp1Heu+3rbuGWXLmYKXcx3gvB4cigmaXnKs9POK39yyKdW3sO0AACAASURBVBrWV4qi1QHTMQi4zVPkxyOXL3TV4JNnN4SziYdNimvO0USCu8OB88Zh/WNtZGLrili5DM0e29e8rw4RU1MzytNFD3d7nQnOk4i03aME5KP+3rttzqKE0v3AY6vpmTcWcejy5V0Fo5axP398ZOEuufjkRzzstYFO7IjWtsj6lPtU8yd980jYjPgqJD8zWfmuZR4XVIeSr+97R3FCuIqx+tMAuWsLxsEMxjgN/soje39g+/WWEscDKobJJh21ThW4lPuGvOiphRncsRVKCjaHloXhjxQ+0wRVMdGZDTmep2kjpCQ1Q0QuClcOeO6IE2o7FUqP9+3plY6Xr/6AptY2ph8z+tjGHjt2t9rOBlWAn8QEcw/b9ESLMGAcPLKxJDPTy7a/RIQWdbpDWpouMljQBw7Z2KAszTPbm5HnW+g231zryvMN0mogXGBbWu9i30fJU9s72Ud83+OvfvIzAHbX5xxvFQU1WaXxSw8lyUVCJwbcmcbPKn7Cl8dfU4Zrxlzz4q3oGETHPHmGbXRlWIY8iyR9e6CdaRlY1D7OEPCF8w+Z7fQgXx6/5/nQciTA9bWu+Nv8BN9vww86wYv4HGnpco6bTWzoaHuFNEJ3FgYEsqM6c8nv9EHr8hZf+Vii4u1WG8WL+SuarqZqjvhm4GNwXDwv5ECFNWklbruRZFqgLIug1cy2UwW2zeFYkNfmXleywhtOy6GukMhZRFtoQYzrCGV19KXA/6aUOnLsBpSIsA76vcsxppo/o80FsW0MQK9Y2yucMWWfamOcqBGZ7vGZcxZouuzKCUs1tK1kMA5U9FuGqSJ2VgypxnPTn94FGqaGbTMR1WZF3OKM0a7I84mDub9EObF9KaCRnJuVWbmomEZB9LlH0epzZccHnKAgvIbSROlKgDeNyGchb27NZG1b8LNgQdk5OOYdMi0Y3IF6bIl6U9Lan8rDLPBZKEU8ulgmw1mEDjfXc7rO5j7Vo+lecsa+sYm6BttE+FmwIJQzRivg0twHEmJBlx541w3UuRbUly88ij93aMo3WHeGZ3FI0ilUkOMZ3p6/eEnRFShrxFPfgyzw8jzhbJYQKZ8cMzHrhniWYOa3tHvNm2NVc6wUk9fgmbuJoecyqJghE7hLM1UnfVQ10VWA0rRL7JByOGIVFb6r35EeH7mKJH94NWcd6P91xBmW6hnrCns6xffGNgbaEqzcS4KrS8RCy2d3caA9ZrTdxGCc763oWFyv6UPBUWict92ew6ZnNlf8+EYP+IyXMW3aUlcQ+zp4fR5+hjVK8l3Lb95oHf3UyTkLJbZ7hbmyR/7xNzzcbrkKTwMix9YG9XK2wndjir7Ds3Vm5DkDpcyxbEFga2e82e8YdilO2yNMQDr1M/Zi5HmrWKAdihhaNh+PqL3FhRlIwy/pqpwgXEGrcTmfJfzRZ58QWB1Wo42i5TrEnuLwPeWvyLHBbKtyeg976BgcD4y8Y43UAzweclJTSrbqM4QXsM8mWnNF4FgVeJMDzcjO6LY1tZy7NquZz+agpyOtYUee9rRVizQbaOKZYmw7okkSmClnlTT0zWlQ9NgdsZR2CraAYPDpZcvdo85qkiJiJTvaaY5rJqsXTLw+ZNRiYhaZNYke9FeKoILS03jsm563d78kigWJMEGFJ9ntFc7k0JT6rFK2PL77CGr8Zmo8moNanJZDb4Il189+RHSmq2u+rZhci5+GP+ZjqOU4u22RZw6HDzt68QcAnF0+458Xc17PcmSjZTYf3uC8e+AfVEd+nGi/UnYR8zDj/tHHe//nGr/nI6tFzGc3L3DM5p/p6LNObBr2uMZfvD+9ov0deBqMeYIneIIneILfWfjBTFAlK5S5RjA2NsP4BujIzJ0RUbRsekE1QGcGBbzAw52tGMI1/qCzgNER7PqOMWuoTWPbjgSWLel7C/vrEpyv2LQ5/iJiMGW0fXlAXSY0/YhtfHZZVszj07sqnjUiuorA7DBs7I66dZiqmu6oM41ZHGAJn95yKE1Ka3c9z5wVXQB5+PWy1zn5cU/fwMKMG9tqopr2+LZPYUZ3hyYFOSDaifyoSwv10HPoasKixLkygxzN6d2lLIe0fI2QOopJ1cggHB7yFqu4A+DdQ8Ewe4W1TqkrnWmpPGL22RXL8x/TmWXmlvvIOKx5WXfMjhq3pLBQf+Dy8696XoRmG0M80OeKUeQ8n0zPqZ+o+y1umUBgdv/tT8Mn2Qe0/YF9PmAbmkTJASEtumEkCfUFf5mNHDcZ8WIGvdmx2kFe9nhThzSLsQOrJ7/d0Fo9M7PXMPuVZNgMzNMlnukxPWYFz8/mLOU1o4lmX15cM4mBvH1kmw8nuAKsogVno037eKA+Hs07Hehborrk83Pdc1z3If1thjuPUaZMtXRX3O9bvvpwRz+Y3oK3Ymob3MZiZgYUztXEmIxU6YbYjLTHyRzfd1mOEcpkFWEb0jkdsh+YytPI//3RjJZnPmrsGPuBtZHFF4nPG3LybEbi6sg4uQkJ1wP3+YadyYSPo6ReJwh/4ksT3t5+lTMICyzY3uqR8aVlcbN6zm7VIYuvt54klIctdlOzinSJ1OKea3uHG53GyrNYZ5XrKCCvJxQTkdmC8mzZIL2A2XzG1mxQKQ/georL9fk3vfgv3m3Isgm/lkSmv9YXHTP7nGc/Hnm1MDMFd2/IdvdETkJohpQWtstffvmCbn9Pvtd617YDcl9+sx3o2xB6PnNfy05VThRjTS9iDmabiyomlBcgxpD9oTDPKyBa0wLv32u9uLvfc5MskDKEUtNgbsUMi4lBSfZfX4xPJWXZMPU5S3P3tK9cymlEjBO9WdytmprmeFquy+4zdqb35YY7lBD0x5zc9Kft2GY7liykT22y8uO7R7Km5PL8Z6jza/1OsWXaP7A+87FvtBwfdnvKqGUuBK1pp8RRzOIqxOoruky/d1EkpO1b7rsDbW/6k+4rUnm6t9kRB6Td8PBbfRYhB8oFZPWOM6XbTuv+jLQUdG5MYO5A1vu3ONFLXqSKX2519W/RrIiSK361PfCiNvyeHtgUPfXYEJlb1/lhhf96z/N/7jNEYTbLvKh5kSzIH1u2jsnoOe1hfht+0AmmxYHWOJ5pGHi3+cj94y0bs5Ghu9txPN6yzWsOpi9h2zOuwwvK4JLHVPecnMhhCDx21oRlBjk6VyETlyFr2T/q6aHGiijGA7Npzuy5Np4zVzHaCUkM46gdct4OZA+nWyG6tEF5Do5nnOC+p+0H0uye2DRnHTfB9WD7kOENGmdn4bItLUQEz3zNsOXZOZkKcdWa1KxhatOCpmqZC0VrWup5fsBqJEPf0JjhoLbr6Q4Dh3BDaLZZWM4pqX98HrFaznm/0WddFl/RCBcrhL/7Sx0YPN79mk+ShqvrFxyEFrCm/8jjXcehLpGuWefUbbl5MVGOAbhmQ/vzC9ZWwKeveo7vzeRqFVG/+xX1eEuXa6MQtEdcLyC46JCu7jt633MBPTl7iSpGbu8zxq/0NHC8LGmRoCKGhVayrMz46uErzq8/xb02pcTAYew6tm82tGY123w9xy4VwfFAZnghjjVTVeGpAFmbSbP6DcXB5vzTC5pH/b1yoVBzwS7rGPzvL2hkux33VksbBewLzUPHclh2DVYlWJybFXE3c6ZhomVEminivJzwBkE9VPimz5PEEuEIlGvjmi0dFYIb74a6kcyMDnR5TjRIimbLzvQYG8sn7FrUOqQ2dza/DdKs5huajEFEbP7+r9kvTA985vP55XMOSUVhyovjS8GfvP01lpoYhC4vtkvJmFwTvXzBzvSx3bQjcC5xp559bn5tQrTIRUI8hszMdiFrf2RcxuRfvqO50J9dvfwJTVmSDafl25WvnVZX5ZTDxIDF+Y12bq8+/xllVeDNJAuzSm6bWFhhwO89P6PrNO3s5Zov+gMqFcxNr9eLQkLfZR26vLjR/PnRxafkmw+Ejo1t7gAmVcNiHlANHkNhFl4PE12f0fanQUaaFkj0sEjnhty3Nf0UIr6+j2z5TEmEbQvqx6954WHLibK3scyCc7ubGMQl2QCWGRbB8an3KcciJTTDHTaSQEDdTnQmGchooYYpGKlKHfTMVYDiNIgbZiOq1DQZ7ZHYanmYDpwHOnCbrwTWrGe5CMgs/fxHK0fUR+63vyGUZmuWEsyDgsBxufpMy7G7nVPKiVFIRrO+bHRniGpD+W7g0bRJ7Ok97icDqvcojPkqZQrx6Q8yxNaa8KuO4kw7HOm3iI8RV5Ukm5nnLfZE0w3Z+w84K+3crt0L7jbvsTcFi0o77kdnjxMp/ll3Tn1nppBFC+rAheORTDrYTmqHnZNz/acdr9f6eZd3A7/6vOPH6Rrf1UFfEH7/Rqmv4QedoN12TMYAFIeJQ7HjaBWoUL+wmeXsD2u+Sg+Mpln6e9cr5NUNjlqgzG7OZnlOdb7CHRswyi6CCTdwaGjB1U4gGV3aY0kSWcxN05lkgdfWPJv75KOOADZvvuChP52oSrMD85mHMs3ubHcgkBJ6OJT64rG9yTlfxgTCozEb9N3RwWkOHAuHytbCyXHAW0AcezhmJPer3S3HbIeo9kyGrk2aU252KNthZi699n2PGzZUcuBotrLY3zMd+mbUl9RFpJWTUWJZR+rbhodMf9aEA5xLnDrlcqUdyscphHTDu+MeGi1g4foR6+FHPB7vODPrptKiZPZPvWSJx0Oqn2fvoNkdKTYPuOZ//9onn/KmD/F5zs/+qv4JGuHcnOA7SzzSQmEPHnsT4VuNTVdN7IsN0d5sUTmTxIPDlPbYoZloPeqmukgsAqUNRXbw6ccD42RTbHVQcb+5w5Yj125C32jlPr4uuZ2gr16jjON6/ad/irJ7FhcRl/PTyBTgsH/kcTriVg6Rp5W9LR6J7JCZ9LFLjdusqLkZGx4Obwg6k+GncLl+yfPPbqhKbaTqakegQqQ14pkJx65ssS2LuXIILW0A9s1bzgPFbD7S1EYm7JCxsag2HX2TneDqmUUQ4/4Nd/YGm4zq3kzqfvaXcRY2i8SiNxWX42STLBbUtk+80HSPl0uODMyuF1T3JjuyAqYe6vuK1YU2Mm154N2h5LPWwfH02frYxXm0iZaXjGYNnTOkCMtloU7NRHile05eN3JBhe16/MErnUEuZnO26YYia7iZaVm0f98nOV/jRAG392bbzNUrrlc9Li5DZSZG3YDJGgkjBeaXTxLp4ccLpr4kMNdaXjxzOF/NuR0aDo22Bf3jjqycaMzCh29DNrT4rQ5wWrdB2gHCdQl7s30kiOmxaHCIZvq8h1ySlw1p7+AnevDiE3+id1z6vGEy/HZ9ByaXqqzB9P8uZyHK65BTQ+KYYFsU9JZksCx6s6mmbgdG6zSIq8IV9erXAJzfTVh+ydnMI2/NjtVx4pWtiJ/5XJjAQE1rervm3Ztf8fb2t/p/7ZDp9ySFPaP6rcn68wNZ1XL+4tU39mOSkq7J6baP7D/qnluQFfzk/CVTZtEa2/bqxR+yOvv9E3yH4J5G2MwcHaQN04xV0+NIG3mn7WyWXbBOau4eXPoHszrx8df0Ejwirr7+2a1mx7QvGC4sCqF5Np8kbuBzLl2iwEycz5YMxYZxmfB5ZyaYFy8ZR0kVvaYw28n82++fGfgaftAJVtk9hcnSHrYTjt1TTzWHRzO1VU8cihTltcivFy5fPKNSHtxYzK+1oqyWDt7ax5qWqM40MC24urnk8e0bGlNGnFBYg8VOFvRmVVmeZ3iLBcncpslM2XQYID81JHmTcuxDHj7q5+3/POXqymO5iEhb/f3qYUv+uKBzFyihjWdwlqPCBfaxpyh1KeDhLuOi8qiqiP29Hh7ojlv2v/ktWVcRzs14dFcyNg2W8KnMOqy0g05A5C8Qwde4nZY8vsi2rOsNlmeGHYaOHzs+SeBxc6WFJFUh83pP601k5npJNFPMzy7wpyW//T//nn7+IWX1V96yROHbekrx8O4LfjH1uKOPMMM9njhjPh2hhhvze4IX5wlDbWP5sDwz20zK03uNq6VN8XCD7N6AEc7q6LLZ72h7l/Mbc+9ynLj0R9KmpL0z5bDFgGPFhPaC4tYEMOMW79zBKQb2ZjuMY3mc2zbxek313mRWx5Bm1lN7c0JHv9faNxzcHcNhYj77ficozyPKqaUbCkIzLPH5bKV/sy7vcMyWkv6xR2UBM6umzDSdrFLSH3fIzkGZCcdun+JcXdJMgsQEw87QgDMxdxWO+a3Di6sL6FLWEsZYO5SjPZIeK/L0jro5VcrJDEfsNzm+M7D4LGD+QjutYb1k3/hYC+eb0nlxLEmnCMtZcDeYO51dzq+PB27sisH8jJk/WcSORxiO2Lam3SqKyap3yOIcS2mjNR8H/D5lProos8KsbhYM3W/o56eR/8W1dnh2kYFsWUYOf+XzvwRA6Fj86ouabIyYzDDXH51dMKJwViuShbmf2ghkXeNZkvSgaby4vsJ2POTjIzNTho0dG2HHdAMsPe0E1ucLLjxFlQsO5ie33oqOd8dHevk9G1gWM0ZzfmXZhNi4wTmpoXszSA61ohA+nXGMYuiRfkzsB0xm+KjxA/p6pK+zb64JqUngFA2t7eCYMnG0DvGmjuXVjKW5AxpNKeOQo6aO0mTDxzLjWJ7asmNVMz2Y32iNbZqyZG6FuIHZ8FNM/H/svUeTHEmW5/kzzt2ce1CwysrMok2me2b3uMe97XdekZ4V6e2e6coulgkkgEAwD2fmxrntQRWYnHVIXubY0KNLhLuampKn7/1J0+rE9xssU9JL1v8Nbxi4Cjvc7mO6NadeZxjzMe2deI+5OnBct1RFyWMp9vJvghmTlc9+9xpPZmUcrUXrFKo6ofiYMQgGNPW0tPPt2RQ1d0lacV5o2ZTZqynRo0pfi337f//2ii7XqObveHcj9ujme40y/guj0ZxWEefF9VAQZRWjx5BQarb204znXwW8pKOWYuaH27d0XKG1T9RyXxhPdij+M2btL7n9XgLVVj8voP0FGPOlfWlf2pf2pf2HbT97E2x3H1BrqXGngeHAle9Rh1KX8PBInKb4rokvU1KDkmI4Dmczg720mxksDzMIOHu+RJVE9s3jI6mlMvgjalm/qNDRz85Iiy2VtFFp7AVK6/Kg17SSyDy+PGO8/xxZ3mazO1KkkienlxyPKpq6xpPcn21ecnt/oC0VjFDkll8UVziGTW8MWPJ2kKW3HBubMrLY3wtY8j66o00a8vxI38pIyzZRgKGP+LAWvxspBU44QfE1bMkdzD6jxTlVp5iGynguTSKDlnT9Pf5K5aKUTs7jDPPSYDHSBPkIQPFRVYdQUbCei3fx4Skj3tl4jUVwJkA16W7H013FxS8vWfpSZWHfM51P+P15iL0TUfCVG9C5kDZr1uv/CkDZXJ/013oVoLyN2Wsepby56ZnC26eWb15dY0sD5qdsTdGbTCZjngapzRj1FHXNYrrEzsU4Jfs9bXnFYI64dqSjhzJCz464HZTS9aC1GvpaR9EHHEPMn3YxJ5w/x7cjLmdXJ30FyO2clWLQVRWOTK3Z+QZbnwhjV1f85rrZEBoTfCx+/CDTiH3F0NQo2ohAZlrSh0dQVZYzC02K87bFBnti4KpzrEYCqOqYPDtini/IZSox23S0igW6+cmQ+KftRwlmsoKAcDViMXH45d8KztWt6vHvg47njzlkos6e9iUXr77iv99uuJf0l+vwmmC14vx8gSq/7xDtub1/wK9apBc2dbji5eXfYR999DdSGxhQtZ4oKzFk2vCQdqRtgxuf3lRauQcswhFtWjJXPdy96IdpNVw3BomT09siY2KsllSNguYsqCvJJzwmJKpGN+ggzWKNzGc6H9GlOoYqbofL8SXnVysGCgJN3KJXV1d0hwozbbEC6fwydXizT9HN05urapSEIzEXj0lPj0UdF59I267pYNsmeWUQyFqfrhqUuPT4HKSIRqOZhL5DE2dIWWUcy2IwTUaOSSjNlhfjGZ7d4w0ao0TcZlwd6s6mPWYoMkXaVC0dp1miUA/Rz8UanAcOYWPTtgdsmVpywyOaFdNWMaUEAhpqzFjzIcxwbZHRKZuE7SblzA3RJX/SNVqmX5vc3e95GYrvm481nL7nl4sr/DOxVqrNB/bxW3RzRKjLtPFxQ6KdAo/2fsjF9BmdXBf+3kMPxlj3j5xL/uzuuCN606JrE/5WJpoe0w/8878/0fza5OxS7B9hPWGT/IWmTLAktc2805nka/5c7/nKEuNy8HKMJubt+4iz34ssxKYauI4dcr9nKTMOFYuT/v60/ewhWFUVhnx4Tx3oyoKtptEgNuMyH5jNQ1zNpSvFS12sRpy/XPLs7BJXeiSlpoqitGzblulYbO7teMTNU0zaDaTycDNmFlNrTmefgazN9LlBrGvsihZV1hPz9wWOfbqR5EmCkvS0ubQzoWCdHmmHEZ7kJilDz1O0I36oCSQy6jFKsIx36L2CGYq/Wz9G2P6YieHQSlflOD5iWClDVXJzI35j4jpY6oBqWaxrsbhVzcFRLfoOGlWABYzhtL93h/esrCP7O5GC1aM/Y7NlsrL5/VfiRR+Le1rVYn/fol1LlJme892//jvO3CNJxIRU0p6HN08MdYO+EZ8dLBdzUNk8DqRPIqX79OOGM9fj/O//C/5cCh67NYumwqwW+FIxJk5Pi8mz1df8MahQLjL8SoxTPBSMXBu996kkdzA/qnRTFdUZCORhaZgW4XSKs7rAK8Q4Pdkmg23RqC2vxiK9VkdbXLMn8HpsWYDf3WUcCnB3E3qZvso0A8to+fXiW1bXo5O+Amh1RHD2git9gS95pf3DDruuMK2QQLpvZ8eOMy8nzzQS+a4X7hTVqOiUhKUsuv/92TUFA5hQSvk/TUsJ2o7xPsGWyNI6jah2GTU2pSSeK6xoaoO63qF7p4LfH/78/wIQes+x1CW5afD0IEEl6oYmdvjhTCGVSMNkWxDqO9ptRSK5mFXiM1Q6hS9SdCBodcZkwld+SyddOdpKwzBG6NuKWAraF0NPfLOl1yuW0u+xL0uoNpTVKZCnG0QaregdllaIWtQ8rkWweO6azD2d0PTQpiJF7s4n3K1zjtUBTSqkXDjgWDZ+1zMM4l10VU7Y1xAaLBXpGKIeaZsUvYH4o/3Z6z22bhM/9ezjj0IYBkv7nDI4VRBK8yOWKcZ9MjmnN33STY8nA8tgck4zCuiygdFCHAz7uOa46xjpFitHbKS1FrCcBFjfXJBGIvXnOA7kNmqvspR2TZpSo/UxodqgW2LHV9sxSlXSGyq2xDc0bYExnKIXkzol+AhQsQbKumHm6PiWGPeVWpM5JYo95cMPAqTmjCwsR+UPf3oi8MQ769WEaPvA903GWKIkL67P8efwbG5hWuL9ZHrBzbs3BJrDL68/cgwXlPdHxu0IWxXP5VkDVXGaDl05MdQNTS32u+nvHbSbHi932Adi/SxuHbb5DeNDRxlI4YZ3b/nmN79CfSz46kqM8TO/5zBbkV1dsNclKnXXEdVbrN1bsguxzn61Cjg8NSjVQOEJ/Mkz7Zrda4viKqKXdnDH+jMKTT9pP3sI5uuCTmpftp1Np02p8veUsZhkqm6gmyaeahK1UuszKyhKhc3hgGGKgZsB+7LEbRW2WxHJdftbsrRBHVTsC/F3jm0wlD20GeEgIrQysFG6gSkTkkosssEpP3nS/bQpSs7Q9RiSNnCzfaStFdpewZfKLUrX89e7J5K7mMlSIs3qkLk9kOUlR+lOkWY54WLJd8cMpOzRL858Bqun8yaf/LUOxxTbs8m7hEySZyeLJZ3WoPYBqpwwbXcqPRUfY6Fu70hnDc3D1RUIGupMjFOuL+ksm6kzR2tEoBEfWt5EO5LHN0ykzQ/pA8f7I66Sc+hF5PV+k5BW56yiCl1ajWRFzer6Ff5YYS7NOA3Xo6xc5mdXZBsZpLw+tR9R8anzLbvbPdFGjOfjuuXKnWOZHlkuzZZdC9NSiOOe2pMAmhycyZzW1Yk3H0Noj3X0xLn/nPeRGJ+lWTH4GvE2xvbFRuGcjzk85jy2He1GBAw/Rm8ZPU4YXY/5TfXNSV8BirImPua0kwmKL55rfD3FrFTqXOXuL+K7qiHDcHxMzeFXkhhujjzKtqfsK9RGjEWgQ5nkfMgGfElk9o2BfrsjrwfaQPTXnY755sULRuGSdzsxTk91Q1oPZING+xlZr4kriczHhO/MW9w45OZc1rB8m4cu5fEvJZ0kHj9//i3RYHIWRuiJ1IRMn7CXI/ZvX3OIxbOZvsnkbMGhVvE7aZa6L3m4+4CWVViIObBnTGfYdHHGJBTz2AgN5i8nYqP8693/1F9NBsfR45EySgiaDuO5qGG6XU+7HWhtBV0Rv7lJU+LMQHVVXAkEWTo+ZbJFcw2Wl+L9vHu/YfNwg2+ZKLKemCd7bt/eMpgwCsRtQWWNUrvUxwpbBuWdAuokpNE+c2h3CkUsgoDxzGBkB4xeBZimOHz13ucxq9DrAV1meV5OptS+ju5O6aUvZjaYqJrC2BtRh1LHtCyxRz5j3UY3xLzIoh1ZnqP4Kmog8BL2AH2foA4T8koEW5o2w3Y/gw7NK8pKILpzRSFUS2ZGjmOKZ5sEPYmtcHPMMWzxLn5xdkGqN5RHl3spJfeUNjwLxtR9wl6C2V7ZC9r9BtIDxvLXANSaQleXeFbAYH3ULF3gnz1j7E6IpDVTdgi5229P+js1Ao7xE6EuQI7v1yGXMxN9sPiVzIbc3Aw8q0zS4UfUvXiPv76aYJ3P0AMIVAmkbH10f0R3yNBN8dni6wkBL+gvp3SlxHK0Duao5TF3+E3zCoDjxuIuybDe3HHx9wLM9Mz73076+9P2s4fg4Kqf+GBDlKB2Lo7mYVlig552KnU5UHodtuTcJWnE04/vMS4dJjMRUSyDl1huiG5OqAOxKTj6Oaa1Jn/KeDgIlYUsDlFKg6Zu0WRKo616NKujrg408mAYqR1tlVv/lgAAIABJREFUcjrRXcUhbnOKSCq8YJNbCnFSoq7EBmVGDWPXQV2qVOZHgd6G/eDRDbCTen2bJOUxK2k7h1aaXnq2weX1OebEYSSxGFXd05k+TZTRS1sS1x84bmP6TEWfysXDqYqFNqjUWY5x+RKAQn1DYg3YLdirXwDgZyV/fnrDJAywp2Kyvz7c0O63mINCehSpT6/sqdWUfW/TR7IfL36B3WrMrr4ilOkXfTLCcH0OTUfwUfYpL4h2PfHrB7paLID3fzpVuFlvNrw/NNw+ZBwT8c7ePR7oRmd0g8VMBrRJW3GMEgLPopPp5UO+J/nhHfs4Io/FoTIYFl6vYf+tw2ErAo2otWnT75ks50j1N9oypx5CnDIleRQf6prHaDZi0F9x0D8f6TXFgaPhsm5HTAYxF3srZJeu0bqWqURV6huFdJeC2TPI20Ib5xTRA2nbMEgvRmUc0Jcmq+mcTlpjRducZL3D9TVqCa3/XXDGYrbAH3TuW3lLyzQwTPZ5xyH+jE3VSDqGaybT6ZJBndJK1HTjauSPTyhGhyoRza6hMfg2U31FL1VkpgsD62LMw7sNkVTWmY5M3LZj8+MjtdRKHfYaavJAHDV48n/TZoqdVdjdkZeXYq50cUWCzXA4nbvre4Fc7G5bRp1P18Pdj7Js0DV4usHs4hxV2iE1bgDjCYrugykzOrsb4nWFMa5IH8TB8/5uw6AFTLWGQ/DxcGspoyNqr3A5lf6MgYF2H9NXLZZEK+7dMUUfUA+nHNdmKFAsMcZ5lOOvTFzHJUnE+9HUEkvT8RUTVRPPv1yNSCuNloFBWnhRV5i9jlnlODIfunCgyCqUsqCUot86LUNa0g06o4Xsz7Gn7noMy0STFJOsjCmTz7iN1oCMb221pFko7FQFR3o2WtqM+OGW+4cjrSMOlKgeyNOcqGvYSi5dbrSsFiZFrZO1Yp3cHiO8UMELPfxvROAyUzwsI6BrIwxX7gtpRB/a3CcJb7+TMmdzhcfsVKYwCCZ8WKvEj+LwtZwYqzRxtN/xRylBNG91BqenSzSCjXiOR2zsXY85ith/kPZPvCdQFezfrphIKoV5q7GYQHRXUU7F2kv2Nq5j8Pzsit1ezNGSCvVDSfx8yi934v30n6Gn/bR9AcZ8aV/al/alfWn/YdvPHpHexZjoXpywm9v32O4ctW0/sfPTPCZSCqa7klIqz+sGhHbFYecwDkQEZBomY0cn64+oW3HuOnZDuct5/7Alk2RPo62w1ZbpyGFyIXhqx+2WptlR6BNa6aJQRDtc7VQxZn4xor5XGGSkGekD6IJ7NJmL71O8jHbe0BwMDMnXqkqVQjUYXZ1RyQg/aXWWFyHueIGykZHWUGF0DRe6jSNFXJNaw2hyVNdA1vFpK4NGg8Y2UXVZi2pO07fv3xVoy4H5neTI9QHudkP2UmHSity6xhovmVA7GdU78QMf3v+IEU9hpJFlIq1iJyUv/9P/gWIohKOvAfj6dxfku5im07m/E+9i6qkUecfDLkFbSxh9ndHE72iVv6X/WKswT6Ppg2LShB6Tlxd4e2mqq9ySVQrl0FPJ9zh0PVY4YM7cTwbH1qglJifrjiDFt8d+h6PZpG2MmomozfcLpt4lU8fBlBF5Ek2w9T1F5TDIOqEx2OSGR54c2Nfzk74CdGrPePmM0H7J3YMYu7LJsBSbuZazGom5GE4N+o1Oklb0jujbMlyStAnbhw+sJC/p+nJFU3v0mkHWyIyGFRL6zwk0A90Xy2k8GlEdS1pdYS3VlX58f0BxDqRFRl6f1oD8UMzPq8mC0ctvKdcpf3oruF7GZMQ2zdEcHQLxfXdv/0jxMGHjdpxL921LqfHLijdFz7KQwupPCe4Qcha6bJ7ETW23bXG2HStHQ5Hp9LQ/UBYpxm7L+0FaQg0127uaX704tdXqC7HeJ57LlDFqmnMsxE1rtDxD0zMUKlpZ7zqWO7SHksyFyUuRusr7gdZKGRs6uhzjs94Xt/CHN7TSXstcLgjPLLoSBilI/uHPB+ymwQp0Okk8f3pYc3/Y4pyfWlU1JQSvxHNMlAvSLOYxUwgccavRtBbDBrdrMaTRbhvHMKiMxjMyKVw+5DnW2GU2Mvl4h1DrimEXoykFtaQrBKaN2QQMdUwh99DAVFCVlrwuMA05jxWbmNO9IckSMqly9NbIuLQN7tISQ7oNjK487pmzrkrqTux3yeN7uiRiF7cMqhS9UH3iJOGbX/2Whayn2u4YvT7g2AZZKr4vOt6RVh1Dp3Ivb1UjB/wekrTEkDzbajAJhlPKQetBeDA5qhIgWVe8Px5poyeGQHyfpa8IsgeCrcJWlhjM2Ob8Hzw22Zibw3cALIwpl98uqOY67V7077DLMYue8a8WXF2K99isazZ1RLSueWuK9e1XJTf7A90k4LH8VvSteDjp70/bzx6CZZqRl/IaXCdUXU/Qj/ionxpPLEJ9ie227B6lTUec09oux6Yklrw51fcYX1hMLJsP9+Kztx8StmVGlKxxpWRSGWhE+4ywVQnkZNL7BqVRqeoMaUaMr7vgnk4c1TTwXRcpoI7m9pj+hLnvcfVCpMMOUU2VZdhaRJWKVGU1U5iF5xjTgPOZ+N6zX6uURg11x/RrMeiBWZPtD2irAFUW1Jedzr72MKY9nuTx9WZI3yZgep8wobp1mvcfWzVlG/Oj5NKNzg68rVzCbcZOE+N5bB54u8mwlAlLSzoIRA3uRKdmiuaJSbd9LLmKMtraZOGLv+u3BnEypcVmqkgiqh7zanyNqWr0UpFESzIO7YrL2YhEHviGtTnpb9UO9JbLeHVN44tN8FHXCLKWYldQNFJZR4PqXUJyUzGMpTu8Mea5N+Nw5jKSPKSLqUVW3qI2A4daLJSltkDzGqrNLUYo3s/V3KaIVMpQQd3JzV1NyNZvWJ+P0bXTuQDg+AsaPBoCjlKVo1B1tKokHC0wJeBFTw5MDIM/vX8glzXhdm8zDz3a80sUufFENzWtmmGEU0xLLB3HmBA3NWWX8XzyAoCbd49E+R3jZ7/m6SBltHyNVs+x9RFDcgossBcSVNM5tOsPPG5LniTAyVZbjMADU0OVAd508QzNHNDyjguZz2kPPV285mqX8EHKsNmdj1L+iGrU2NL/TjM67KWL0fWMZL3q9vjAK89jaupstkJpQ+tz+mIA+xR4NMhgCXNOGvdcSLlEAMud0dQl+dDTyBXQlDHvfvwDrTOllCnd/XFPqbcU4zNm7sfx7DFnOnUbEkpQUd202HXH1eUV63tREnkYtljemG3dfCKjb5KKrmo+cS5/2jTLpa9kX0YGZTGQ0xPFMn1ntkxdlyorMKXYxDHf0Q4WtgW9RDRrecK20CgfFSzzoxehgtqnHHcpldzzWk3nPAy53eXsDmItdctzDM/EUyArRR9VHVTzNChS1J5G8hp7LRcc4UTDlt6DP2QaT9s1r58KPCmi0e0ajoqBs7yASnyWNnuiQ8WHbYYnAVmh7zC4DnXXoDTi+aPdEScI8PRrgoUMhKOCTeCg2yXBC7EvDKnC8TOyf46yon2pUr8WAcjubUvUeOyLe15JbnhxcHh53jNXG+xz8b7ftQW/8grcucW8FSjv4dzDuHQxNh37WIznTbIlGC+wWo36vVwXukpa2fzb+oZMpjyHtuXg1oRlw0Gi+ofz/wXFmGh3R40pBy7AMKY0mcV8LKKMrBvTGS6dm9M+iY7F1Y6+6PAsB3MlN9SVRab3+KM5qlSBbzZHtNhivLrACsRG7rUqWZxSDVvinSx+mjZ9smb3cCDPZGH/YkUZnW7SaqdhuAHWStysxvaK+eSciTUl747ygWsW8wXWAMVKbJ6artA7BrZv8+0r8SIKDaI8pi11fGktMtIr9ocJm7sHlpIEP4xW6HmOrYUMlnjZnqKgtxZZ3eAqcuGpn4Ft6y2BZ9IY4iXd36yJDjtiy+LKEf0oS5OlWRBYM3YHIRX31Thk3zj807/8E9m7P4vPrEv+8M87/OdLfKnft3jWsPJGTPSeuBYH435X0RdHNGfG7iA97C4cXlkBfdMxFGLzbO3TQ3tQdPrOIjFLNBkNrhYhThNzoz3RSa+z9GHHzdOR0A5RJan+UmuZsaQlRZVefEHpEr+uqeo3tLUYg/3xSHVQMN0GRaL8FM9jbKaUxgouxaLoext7ZmNZBXn2eauU6Nhwa+aUTkQoKRieptEfVBRzoNfF5v5wiJhpI/RFT/NeRKjr7SOvrGcEXk+WijHZP+xwgTbfM14J8NFi9oK06AkMH1ei4CZjGy0YqLQxtS7nrK7QhCuSdsdc/0jp+Of/0VcJZDm2sFdhl3e0uojmPMWiyWF69pxagkqmTk+lmWCA0ol5rCQxVZ3SRy3/IOkqlu9wu31P1XSoEvE7C67pipyw71Gl/92krYTdmHrA0HM5VwbMKsFsT8n9b/8i1lO+cphWPq7vciY36E4b6OqGtjsSbaT6jG1TGj56r3P3R1FPrNWB+bOALlqTy3pqsb2l6FNcxcL1RL3q6cdHBtfldXlHJcFXF5MXhBrs6gJDZpxGZcMWBd85Rd/WrUIqb72alqFqOpqio0kHmy7J6BQ4biPmMqgIgxFRXLJ79z2qVC+q64akSkmLGsuUFDC1wjYGRtaMQtKkDK3n0FZY5cBUOiE4pg2GgaYopBJJrbjg6acmwKOxz+hKIKaX4zFFfkfdaWSKRO4eM9bqwODXaP5Hk+KCYDTHVm1u3ou94ljcUWYWpb1Gk36K0zLi1fVz1LKi+CCFT9ItCgru+SV1J95ZWsUM6MwWl7y9lR6TSU5anR7a2vk50et7KlWcA6pzxbx2CLodVSveY2Jl/PX7LfFix0QVt7QgTEjvdZ7/w4Td30nz8j+rEL3jZm9xP5PB6x7a34Rs1y7fSQpcVzzxlWszXHjsM+mI01hYpkWv1RS1mLdhfJo1/Gn72UMwTVQGiUi8Cq/oNZvHJqVxxWKfGQOb4z3dXU3/kQ6RGRh2g266qJ5MS2gKaaXimS6aRDuUcU6UlqiOjimloCxnyvRZyLFao8i0ZKlruLMxQWVgGzJ9NZuyck7BBX3ToHc9biEeq3FVvLmPZUISi/+dXSxpm5x6mDKTQJO8a6iLkuVlyGohBqwzdAZlSZIcSaUEldo2LHSPPrHoJKrO0n1aE9r8iC89Dg1zYGyHaElJJoEBqvKZoc53qLM5IBF01QfwQ84Lm7dSuiiYT9F+94LQtgmfi9vs+9dHsh9v8O4dLE1Mppe/nVP3KkPp4i5FevAXk2fkukN9qEk9ETRUhw223rCpD1wsZAG893CXK5IuRDuK9z32T2Hm/dAxHhnEhx2FXMRWtOc+e4tFRplLZKXdodRrgpc+V1LbtNin/DX9f+iaOQuZItte7KiS92S9RVmKQ7qoM7Z7h5HXo/5CLB4/mDJbXVP0A7UmbuVtlTH351jBnMb+DLAA0NyAtChx3Qbp7Us/lDTOQGebGBLNGZ7NcYOKs3rM9TMBUjK6DpKGTtmSPIn+jrwZZRrjGCa2fK7ZYkVVqZh2hyE1USdTl3y/5uGQUsln1QKVWO3QUDBG5yd9VSXlYnxlsN4pDP07nj//KEGlsVi9wLccNlK95f22A/2Jd/kBrRHP4c8m3OcKS3WCM5ZAm+QeZ7clPL9gdSnQchk68QPMvJa9BCSpQ41hloRLDc0X9JzlIidPfF4+O+3v4Im5nkYJ4dhhqEtSKVxtDQ4jKq4Wc5ahOCy3HVxbDpodkEvgmq6aeJ7C03HHcJD/q2fYKKioXMqgano1pzAs0sFAkWleJc3YKy2YHZp0ZM6LjLooyYvTuatqGqmkg4zmc3RNg2yPqog9wHZ0Jp6NMRsxk4Cc3tcIXY/8mJNKA+py6KgORwwV4r1YU5alYJkWoTMhDEWfNQyaWkPVXfhI6ykr6Ad0XcOSXquWamDopzJvXd/gG/KA7jqyY4G5NLmaiwDqIX7kbPKC6eKKx6OYY646ZdAK9nking/49vkvUI0ZXVWBpH/pnYZv22iuRnUUf1cPI9blgWT7HvsgMgaBGfDVbEzrP8evpcB7XuHZp1CS8/OvcLwdlZzbeuby4/2/sX08opmC2/rcusIsOkh97nc/AHC2+pq1mXHzxweqUuxb1/YDTR/QHyJqXwSCG8/lj2sH3VcJE3G4HY4dx+cml5qL74vS1tt/WVPN73nu/iN+IALal787Tef/tH0BxnxpX9qX9qV9af9h28/eBDeFSZ9JvlhlYCgVj09H6kYSTKcTqmrEXbnBrcVn316sUDWT1XJCuxMndpRMGbtzHFR0qWQxtHsMq6EsDOJcRGjuzGHm++iVh96L8/kQJcwWIefnI7JYpAKcsUE6nPLuLGsgsC38QERLSaniGiG6paJLu5FGCSlVC2Oq40ly8zF6z2wV4J9fEEoDVefcwx5s3r6pMSRAwylc+qzCeXlGI6Mh07LYHlS2RcZOAh7GCL5QrRboUmdvHJzWrfr1Ox7nCSNL9C1Wp1xdTthnLR8eRWQ8jlSuvSmbwcOXiveKMaE3Iv7P/+sfcSTXL/Bibl4/UigQS8Hnw3cPtLqKejXBkmK/6uIb3KonPWwwbfH826DDiyK0QcWV4A6zPVUJca5XdG8+0Aw1oayT9RacuwbDXMGRZNzkvuH6Kw+ryug+vsebO3qrZjxpOVuIyNe2R/j6NzwWCY9P/wpAlQ7Yo4RatUCWztxpzXHwmPpjLmSE+/4AtmrR5SXO5BQIAXBxdcX+tuMp2tNLZ2xfybE9nTY8476XCj9NxErRmV6MMTXJh9o+0TkmdBmLRkSouhnSZi3z2YjFQvymYi+Ior+SJTvWuhAkiDHJC43aNYgkoCCNIel7LMuk0k5rggdJw1Gedvi6zeSrF3z9O3ErffiQUpsqm6wkW4s5UDsl9pBzFgzUUivz11+9YBqVqK2KWohbinMcsIMxRlVjSveK9c07bt9+QDk/+yQEr1tb8vTA91HE301FNsRaLLmYVvjT05vK2QsBbhketpR5wr43P7mZp67KC6ejGBQOUrN11xYwDDiOSyN1ge2RS582dE+3jFTRt/FoQuAH7A8FXSfdZZKK1oJ90RMdZLZBM1gu5mziiFg6hx8yhaSoiQ//M6cRwLedT4Ls8S5G1zqKtsbyxbsYTS+paoirklqWCezWxjFc+q6kknwFs43R+wijGwgk4fv6bIHVqTiGTi8BL3mRkUQ5ra3y6a5RqqhKT19X6K3UwLX5rOvFD08/kJhirr9QFZJ6QMlMdCnwsb95QJtfo4YeRS/edU/F1Fkx5Bkv/uH3gOAel2ZLoOS82Yl30WoWDzc5utJijkTKdREcKA8p/bEHyQmcrObESk8Tx7SSY1nUNWn9GV3hpc8z/TmPSJDS/A/oy2ccmw2Lo5hPb7PXmIeGPm+ppBKM1owo4oDNYQSWIP3Xnkd9GTL8dsTZSBqOv4tR9IGYDT/0Yu/vSKn/HTJvTVWJMU60lM7w+KCu+fVM/G5sf35/+Nh+9hDsugqjl0igtuM2iVg/NmjSEEFv95R5Srl7wDbEQ13MA9JCZTEeM7fElb+635OMdIYsp9bEhHU8l75ooE5Id5Lsqxjs3Y6JMqJWxGSfqDGdoVO1Hcj8fZzuaaSH2E/bdGERJzbniEV7cR1QdwZNr9LL2pxpd4xGM2LFolNkzlh3sWwDTakoJdfPKHt0s8UJbYZMOkiPK3aHhNEq+CQE0GYdhpnjGCZKKGsiBXTNgD4kaIZEc01OEVWlrxGUNrokCv/nqzFpfSB+fMTRRKqyN3UsRWGGyuteLM6rZ7/kmCj0jy39ldiMRguLhfKGepeieuJ/K2aM5wNlq/Js9V/EcykNxw9/oLxVqUrxfl6eXaKOJrixQSkth5rZqesFrcdq8ZwkLGh6CWSZBeCe4Ss+mRSGHrIdWaNiEJPLNPAw64kOA3lygzEW6QljfcDVrnjcvscvxThZC5c8S/FnOo0u6wGJxXjhYl5avL0XC6CduejhiqjuKcvP+wnq1oSq37PZ7DkYoh8XDow1h221ZiwXZ5Wn3Kkt5dCgd2JDcacznMWK4VFDlRw+b7kkPmQcmoantfi7bRZxvz9w2N6zlwHJUwv2KGAw5tyU0tarAWeqUTxs0Zenh0op+amuq9HpFl3vcb8Wh8Cm7HBVnbPpjNdvBGKUrqGlp3HAW4oU1J9ef2C2POeXZxNSeVj4qkWTqfxp84QqOWbDjznXbUX7cIfpij5rfkGvuvgjhURu0IFTojYJD5vTtWZIVGXlVpR1gmq7+L4EPLku1pCQZE8cZOozaktcW6V+eo8hhQGyHva7iE1ypA2kalRVUA+w2xyI+KjyVGOh0MQVSifeozseUaslNw8/cqykcLvucLs+Esh956et6kfkqTiki2aDOcqxNY3mIOaTVjeEg8YQNayl8IdiO4ShhqaMBdoLGNoeWzXxRhaO9MV0DJPH6AF7qDBkndDWIEsiqjjHG8myg24T7VVUBbSPQLV9gWWf7g0DEEnDgGq64vyrX7Df70hisT7zbsq2aZjqU0qprNMx8HJ2QVbesV1LqbZXHo2uUdY9qpRNGwyVaFsQpztmEmA4mY1QFIvocMdCuqilcYA72LRqy7GRvNjuiMnpIdh4c9wXEdmfRADytl0QrhKe5zbdC5nW/eHIhh1tv+JcF8/xfxffYxUvOHcqTOmkEj0vmag9VW/Q9eLwfVsYKIcMrdhylIL2hrLnfTOQmz1jRQAJM2uOTs/kmUsiVcd+fwxP+vvT9rOHoKN1GFLyJytLtM5jvuzQpJVSsemwWh/X9D8dgobuEBgtqurjmDICSsCfqBhDhitP7IU555jGRElOJGWZtncqRqhQ+y0flYRc3cbRSxxacmnsGB92tJ+Rwuk6BXOoMWW05Ns9cdtjDy6WvG2pXoUytVHqmqL5qPoxolVramJaacNSqwXv13e0jcahE/3r8iNm4BHMprhyoTXpQKkX+IOFJTeGYxKTlglBO2EhjUGN8DTz3B9SfvN3IdYrUYOpq4g/vr2nmAy8MCRReulwfX2BRk30vXiZE2zG5Zh9G3Mp1THW9xHu5AynK2mlRJxtQbzPUBuFUpqRLhyT28MYJwzRezGZ9MzFGnvUZU4ua3PWh5uT/pbJQJnrZGHL4UZEfJapMr4OCMoQ4yAK29U8oR1aPD1nvRaTfXfY0g0abaayllqX4SikGXQGPcdciv6V1JSFShOnVN5HjcIVrdlwOHRkqqwFdz1RBYOvkzSnoCOAVy9+S5HfUugJh0wgxRzTRjN17qKYRMq3mXnOuAyojAmOIebV14sVXaeTTick8oavNBqbfY6uNBxiSTx3xmRnK2K950kar9auBa1BmbTUg5SIazpm43Oc2ZLp8xenfX0uUXW1QVMO1PVbPuRiPJ9fviC8ntIeTXpJuWm2ew6NQekWrGOxyayTjl+eV4x+P1Af5K0s2dAcj6hphy9rp7laodoutD1dI+ZUXq/p1S0vltd0R7HxxGnLYMS0zemhggTMTVdnVIlBGxfonvgsN1UCJeB+m9BIpSZvsOnUnmNZcjaTqN/Zgr82JXCOL9WBBqUjSxIIxyzOxZyoWw1f0bBCE13eUpRO4emYYRsehURRNmbACJ+RVK75aTOCCabcezJ1oCgKGk0hlUFKEh+4j2uGDjRd7GXBrON4NLBU5RMCWVd7dN0ibSCPJEHbUknjGHsWUmvS5SHJyNuUSu1w5cW/jlo6tUPRNQZXrNHQ9Oj9UyBPlB0IpNbp0Brkxhn7+DW1pBfNz8/xXJ3p6gWZLj7rjgllk3NXpahS9GJeK3R9j4VGLgPyw+2GoS7RXY+3kRDb2N4dsVYBadaQB9Lk+zFhUcF8dYYxlhmIjUGxOQVKBfYF/ewD418L0OT15oAa1VRfr+gkICk8j1BvLcKwJZUAnyZxuAh74pmJJv1S3Ycz+nOTbRpjSbL8/lWCRkJXHoml6liW7Hhha8zagEEKS7TTgWFoKLyYK+n0kyz/F4AxI9VkJ4VtTcfHdidMOg29E5PpbXfLyLHRVq8wpDajgc67ZIO/eaLqxAKzly5OWeL7Y1oZja5Cn9wz0XMLTR60kaZQVQ1ZWWMqUqB5CqF9iW0r5IVUY1BSDO30ELQJsaYOui0WcVOa2CMTRWlxDfF9nTumtSyy6oAuJ8VyYTL0IzLbwZdybPEmIs1yFMMVztxArUDfHEkqH0dGs5YLF43KLtKpFKnm4HZYlidEmqWjvFad3qz+dPfvjKIzXn4Q378Znki3dySdwfmFmExprTGUQmHnqysR2dRdRqA2HM906lT012q3GE9zslDHk7qOifE1feWw2yX8Rqa40npL6Dh4Mx+lFpvRY3fH/EGYyBayyF6mp36N+bFl4IiPRy15MknREVgKR6tFO5MWPPsxQ3pkGEb0ukCpaX1P1EWQ9ZQybVpYLlZ3y3jkocvNXQ8abMXiUBVYUjZsYgwMhomrZJi1GM9DntM6EXM1pC8/jw79/a//ho45x/o7ngqhcPOUZGSqTm1ZbOTmtH98gDcRX9c+y6UY9/ivCXEbcygzxo5YYMco4/6QMTENSslhq5oGrTP58HTkr3JxerqHZXo0SUksYfR94LEaOoL5BfOL0/SML9PLD9URZ2Hh22PeS6WWu+MD892YoS4ZJD+xqnQcs0NtVZIncfjOuxYn7th+dyCQt5TdfsNSz3l+GZDJ0kYQ9IwvnxMdUo5yLQfTMWaqETpTGqS0YaujE+INn6F0BGI+m6VHrx9o/JpEAqMcR6PuB5h5VJI21HUqwWhBr1SkEs6+SbZ8f3/HoGukmhgTtdrRVDpqoNNGYr5PwguejhnrqsGXSPKszFAqBWN6TZeJ+dToI/yxhaudnfR3Pl2QmlIn8/6R4nigcw16RepzKh7xAPebNYq8MZ2rV4zsEAuFQyMDnE5hFoSUbfPJG7UuKpRhoFNzqkx89mF9x34bgxrgyEC10QwGXaXXDVxJHdGtEMc+3Rv+fP+OI893AAAgAElEQVQjCiJV6Y9TbPYkzpSF/D9zPKWTiPe5DL6t2Yy2KfC0A5UERhlGzeOHHePJ+FNJpCwGlC4ksxoq6ZY7O79kYg60QU9oS3637xOsLggmFyzl3vam2FK3p6BEZdvzG+8VN78Rv7v972/R7YGwNNg8SZWj52co5b/QKAa2VKt6eNfzg10Sv3lEkwbUfxo9MPd+g378V/S1KAmovy/Y/6igVHvySMzPoIPy6oFq1FFZ0mS9VHHyZ+g/bCmkQP5D8uKkvz9tX4AxX9qX9qV9aV/af9j2szdBU1cYOeJPfNvHdWfkXUbyXmppDgqKqoELlVQGSfoMbeh4uLtFkSTJqblEVVzmmk0txVk3dwe6pscZLTjWIkpvsor53MUKRmiS2BtaA0rboLUwskT0bYU++WdSYJWioCsKaSYimarNGbk+nW1hGB9dUE0aTeWoKQy9JHJbJoYaYBigftRKTVvyFixTw5Vpnt1Ww1JsXArKWEQ88SHHURQaTaeJpKluD4beM58EHJA1rL4+HeCnP1LcPKOdSBJ8luHqF0yWKxQJ+Q166GqFqt3gdSJafrjJmfziG84rnQddRPf592PyPiJMe8xn4u/s5sBfno6YUw1P3iCi8gEKjbZ+YJBp09FwTknF03c/sJZR1sP6VGVhXz6hthNcM2WYisLBdntkk5VMm5ZBKt/cHRp80+IxSfBWAqS0nC2xHzKy+AnkDTwzddyhZgg0LHmzdI0x7rcTdhuDV89kOqjSiOII42yJJjVbl3pLPW3QpxMG4zP1S8Cwr3DsI12v0xXiuz7snlh0CqgqfS/tbMyQ/eZA9hAx+6iY825HP2hYgcXlQkSURa1w7APWhyN30gh6HJhczac4Z3NmMi2VpAqD2lN2Jbl0/Tbp8eZTwtkF89mzk762nXg/F0pHPQnZNTpOK9ZA+nBHu3QZ0h5Hcrh+N9GpLJOsSJFmE4zsEV+HY2bncwhF3fVWazCVAZeWuBBQ9Us7ZDwdo8YFvQQHGUA4GTM1W3ZSe1YdUtyRS5+f8sJ2e7GeZkbLMWkxGhVLgsAUyydtc9TaIxiJObYtGnZ9gmYobI9SfcXSWLx6hul5FLUYp2KvodBTqQq5I35D7zWSLiNOC/a5dEdoXLzFjKIyqOXeYwcuuj7Hn5/etPveRpUiDUPTkeUZZacymYtbfm+rWK7K+bNz7h7FDSspBwxX4RDFDNJyyQp0zLFPVVa0ilijnWZQNw1GnGHqYi5ercYMukqWVaSDyGAFVkjR92Rpjm6IOq6hdRjOqSn05vu/kkmNzPvXBcrM4NvVHO1c9FdzWkL3AjNQ2UoD5bYoIddZLZe4gftp7HbGHdk6AsnFDf05RVFStiVaIDIf49mU7H7DODDwLZFFuB6dcWws9tGBmzcC9LWNDmylW8hP2/27jKcwYfpWvO+/mc/4/vt/40F3QJPHTK2gnI1ZntlYhXh+Zfxn3v5B52g/UEsN4OWZwdG6JaxMEkvsKd4PJcGsYaE+x7wSe8/FxZj0mGH5Hk+S35xGU5rne7qX/8hyIoT1Z/PPW619bD97CFp9QCTFg4t+ALOkeirZPIjiZ1bWBCGYak8nARCW7+NrPUlj40o1E8eyeMo7kl1POBaTpFFTPjwd6NKazpdkV23AtxVaJcV2xKKw9TFGb+LpJoMiDsvBUhiG0zrFIe3wBo1SigIX25z7zS3++Qx3Lu1Mio58BFmjodpi8UTHBrOLaNWOKpU1gqrg6fCEke4/pTIHtcawVLq242YrgBFqqxLrYKBROWKs0n2NkdWsdR9bpkPr4HSorUkO3FPpIjVwPgsIV2N8b0o+Egd+cv+W9N0PZKVG1Ihxt9Wc5XJFXne8lEK86dLAyQveZUd8SVB+dblEDRUSv6A2Rbpg3LWUmcb+/oHpUvzGphrIhoT7IqH9IMWtu1OwyV9e75i4AWqjEwZSRafWCewSzzHZyGK/XVZk5iOJ4jFIrlOtWgxFSrrtqGSKcGFrFN4ZvtdTjyTHMhhRGwbjcxNH8lGHswV9XhI3Ka48uJNC1L2euoI37//ppK8AHzYxeW1hGQaVdPJuVYND0uFfzbBlmvu4faK/vibyPZ4iKfqw3tG2PZORz8NGLPpwccmH6Ia2ammlG/jQu6A7GP4cV0pGZXaOb5roQ0vVijmh6Rp6uCC8vP6EVP1paxHvzPBcou0Db4scGvH83lSjyLZ4tQlPYg3Uuo01O8dQDXpNbBRZW2CaAXkZcynTTboTkEdHiiLClgpJ4cTGSCu6Kmdsifl585CSVBvm314yl+/+OBwxNZXePQXyrFOpSmRqDJ1GfKjESQqEZcdysaIvU2JJns4ZuLt/RGtzaokBWJ1fMxrpKJ3yscTI4+GIGzospmOQIhUfdkeUykR1fdJOzJMgsChVn4iEI2LzHIoR+ljB+IxASFVBL4UGDF0F1UTtTQaZ0jRnKzxfoSgzOumB2A8dpapR6KBLZRXPmBEle+q+I/kImAtNzJGPZmgoEtBnhDMu7BFJXmDo4pCyTAsGKA7N//AGNYVT/f+/jRwhzg+gTWxWF2fo8wnTc/Fe66bEUVqih1ueJF9RL8c07sDSsQhcma4Hfvn8Kx7v9zzIYGZqwtm3L6mTjF4K+yuVgnvuYvQBdSTt1CYtddsSpzvuZcq9TLZon1G/ev2X79FWE3qJKRibCkYw5betx8NC7H2jYs74+ol31pYXC/Eu9PQZnXLEeben3YkxibSOr5qMvdfx7VKMwW2r4rkuSXnH9VTsxwujZe8ppN0N/iAO8+OoQ61tJlZLoIo1evvuD/Cf/+Z0Usj2s4egqhooEkOdZxVluiFNKnp5siuKQRw3JHGPpkhzzgIMVZWWJyKCzgqNtmvZtznSSgxda9BVl7Q94KnioYxB4ap26DWbzpDoUNdHryvSImUnC9HZU0TnnWpbpqWGbln0EjwRZxmDPVAfVMpWuiiMxmzznrosMGyxAWybAcv1/z/23tzHti1b8/qtvl+7jR3NaW+TN/v3qh4IVCocDBxMDCRcBFIJwT+AaMxCRT1waYRRQkIqjHLKAAfhIIQEpXrvZZJZmTfvvaeJcyJi93v1zVxzYcwZ593LvpllYKE8w4zYe6+5ZjvmGN/4PpamR56rCbXLj1RFRTg1cbXor2xKGhkzOg2OVhtwo4Chbth3FYet+lw/wth4yKBkrm8HVn3e3tPrgubne9iqg8d7OWVhOwh5Qn6jPK/xviBOwBlDhPNIGWZhSIep4bLRhfz+lc98WJAefHJXvVcdWdysLPaV5P61RimaOYiMY21y/LV6hp++ZXNw2Lx/havLX0LvPCd4dzxgW5B4DaYWqXXmM/ylTZRe43vqsHBDg6/uBvZjRhyrRetQUvQ5/rgg0KinZ9dzpClxLINQF+5jRGx9wcyAg6+eYZgWs9Wc2B7Jpep3Kx1pWoc3t1/yl/fnOSsAI1wwWySE7lvCVHnjWS+RUYTlP8PXuanImpIVB3ai4UFDwQ+FgKrFy9UBD/DUCsnqBqtr8bTjJoKI901DbF0wfaI8zvhqIPAMEiSeZrJwApv04gmz9BLPOs9CnEp1uGVGwiE/sPEkvq823qfiORM5crfNqDSYS5YNr979mulVgtAlF33f8dYyefnZE5q9et/bX79FODvaXuJpp7RzbN7c3nPcFUjNRYoY6fYj5d2exRN1+Pa/zPjtrmThnwM3CqlZajpJHF5QlR1mpyVzyhHcgmVocyjU2j62BcJ2Odk2BIohpW8l5B1LuwGd69vKGLeQ2FMTU6g94DC2uFFMMF9S5bokyI3pTJuxbYn0OJpyirCntP35Jm0HE7xR3SCmqWSUAaeqphG6CL71GF2LzhyxtNqEtAfqWmIkEb1GUhfdSD8M4Fh0Gq1+agSxZWMPfAAHGYOHl3okcY8GVtKPI45pMnEHQo3g9uyATp5vw9bExIvU/hnc2ERLj3gaMrSabCR/w+uhJ3RsAn0Db90Bs+8Jr58iQ9Wf2f6WdByZzyYfxIbNEOJZSB8Jyr36brbpSOKALmzRtLDk92s6MbLb1Ty8UfvMXtoE8lwb9b098lO3wJyqPv6yHXn+4x+xEgv+1g9UjvbVbc36rsYrO7baqbicCJww5pv4h3T1I4fyA3/2/JqH+g7/kSXM7AiPKYSSqY4aPdRX3Pnv+AQPQ+vULhKbRW1gm8/Il6rjf/W/3sG/edbkv54bv/9fkPcVttSoG9nRNB2n/Y5kpia25Yasy46cFk8vRKcEf+ISOgGRppZyTRfhpQhGWo20LLe3zIKBi5efUkm1UZSjpA4HJsOIEGqwH44DdfbAIvDYazRfX1UMw3l4sRc523pk0PRQgzXgYtM3JzKN8JPlBjHxGfCoS+W1mIaBldVs4pBQs29UTY3NiCXBjvUtohF0ZoWZjehcNKPt0WQlZdMQ6Ztl24wIZ8QZBgaNIq2684VZXwQEBXR6GD65mhEGE/YPGeujJpleBqz3BZ8kNzzTYJwx8BgTSb0dGGx14Lf7ltnEp52ZoNlsop3gy9c7XGvghebhtNsUI3WhdBi1llo6G3CaA9kkxrHUeHvTc1j8EFqYpo8TB5y0rp8367icvsQLYdDgm8CpuDYavFnGoPtkNt4wDi7fGCHoQ7pKpji2gWn5tJpWzh0DPLPmbpdTaITbdNXSdgGuExHpkHgrDeqm523j0dTfD4xhSLG9nHCx4kLf8Ox4jn+xwHJ8qkfnJjRg6LCthFjfNHo3oTpkeBagQSCt7SLTBUXfc6WJtmW4xA8DjDEivFZJ/EU4MnQeWD0TTW4szZCL5QvSdE4znh+CXamh9eGAk9g8p2eviU92eUne9DSFiaOdqYmTYC0i/NCk0x5+kxncVg2yuuc3nXJw8l1JJrbcXC2JWoWavDtuKBnBTTgeVB8kscQP5sjO5f17TUFlxJT54cPG+22Ll2qzm9s+rsgxzJ5Bb/YH2WCeJFVVs8uUY1S3LcKyGKRLPFFjWBc5gYw4uR6GvvV0ScipKnC2Jp2j17gdkN2fGB8E4UTtKcbcw5IWSbzE0OCbKLymMRzy79mki9JkpkOE8eySTtoYkwp0LV4rbYpGMDQdhV6rYeJgWALDcjE1cGk0R+zIILAC0ChSAxhci0x6RFpnse+BOMb3Qhx9A63GiiGHwLGYaoR9j0vfnDPcOK7D6OtUlO2QOD0uOfl7zfyU3zFMHeqTgeeodef7Nqb0aOWIcVTrsx86TnXJmE5wtOq90Rdsv/wNXS1IQ33ZWKaYp54wnWEkOj2TV3i0uLTIiQ7pjjMSee4UfX1fEFdLDjcavOjZtAuH8IdPWeRqrszMnl8OP2Ho3vGiUu82DCfapy+w23uae9UPP46vafYOQ+9jPlf7wk8Mi82lgIeaSkdw3kc27mLO4auI6UyN7U8uptzel2yMI9WXmrf3ewjKv20fgTEf7aN9tI/20f5o7Q8DY6oOU9fHeLFN7e4xvZA2U57iIAw8Rp5e2FS58h7sSUCSBPRWQatPYMcccSKJMbQMj5/zWuQIgdex+ep36vccg/19zMkYiXXepPZsjqLBMmtKzSc6DwPkeH4T9BzIstd4prr1zCcRpm1jyeEDLL8yLbqqwEtb3FF7I32PrEvKqmTU3qJjdHS9YCIj5o+3rWlAU0is1OPUaqj69oDfdHiOwNOgH89ssKRPMdYUgw5hGufgDW8ScldmJJqc9vR6h+NJxpmNq5P9bW8ylRHLC49MK0Nv9oIfLeYwNwkmqo+7RhB6Pl12R6xFOt/UBWaRIxYhs0j1V3iz4PDOQ0Ydrg6ZGV5MMDf4U9dm26rxcdpzcMFwEGwdj7zokbo2y3uQ/Hr/NWkoWF2ocOB8cUEnAvxUMmjal8CoaUYlFfQor+NZNhfXM3ZdzKNyk++73Fy6NPctpeZiDSKTw11LOEKj6y6PWcU+F4hOkJ++X1T3zevXDHKgNgycuZbREZIoiuhlR6lD+LHvYflzpOmSatHnp/WScnLE8YIPY931I31j8mTqMr9QIb1mHDHHADtcfMh1xpMnzMOUoW7o2kHPJ4NmMHh/6Ei/py5MR+XITy3CCukmIa4mEJcPBtuqYRZcEMb6BjFIYmfCcBRYumbRrSyaoeTrfEM4WB9+OL+DTb4nfK7681QLpnHMYIyctOpB2LXASNN5xHrOtt0Rs3TJ78+jAvag1qdpmrjLOdIe6BqdXxo98upINDFJF0oiyqpysi7HEA6jqdqxiCziqzkGNpkmZZ7GFr7hYE1ibJ1KcOyEqq0RHfg6ujS5eIrICt6/2ZA9gvL6ks4Kcf1zz7+oW1xPtdl1Y9wYDGP+gdFJDhUNErwIz3sE+BhUuIRuzKDV3wPToB4a8mFEaBL5NAoJfJ9dXuLr5Kbh+jSNged7WJpn1mpsmj7HNEwOmtWpHVqQ58XnSRwx6OjF6e49IRaVW1NpkI3vOPhtjxg8HA1e7AyTu+OOmecy12xYC39G73skoU0jNCDpFILbMAgDN1QhLXeQ2MuBwXZwe506qGsM1yNIXT6pNaH/xKXbnucwd+J3/GY7Mq3VOouvWyZWgrk98vWjor1jMf2TFf2vbOzP1J4n7BvocoJ3PrtSgybNCcPkS6wuwJurfSiKjownB9MIEa6KJprDgaljcHe54HKunvEX77Z4hzWbexvfV5Gu+nz6fsf+OYwxNo1m0KjrFq8fSMIEd6pr3zoHt5M4wmKicySjD9N0hRMJhK5BGlyXaWLjSA/h6CR7MsMZJF3+nlijeMx+oJMmkW0SapSVZQfctQWdrFjlKuxl2pIoPJd3MZwWX0T4uu5QNDWj32I5HbZWLrAGB9focW0TV8fv+97ADH1cUeA8FsrGCdLsCXwbQ1+/k0lEGlmc6gahC0Dd4cRg+ThmgKNZSQgSZD8iHgYSLfOyDL8HGLNtOVg9X96/Ur/1ziW3DoivJzxkCgQzHl2GS5O7/BUnraqetTXf/MUUpx1Jf6xDHJmgfHhPfxViapLhzW/XbIaSyTKlPPxAPdPoKOoNm7s7Hno1tlebK66CELsSHLQydt2eF8T+4je/4dkpJwh9CNSh2u4zgr7Hs1xml+r3VpMUKXwSYdLo+qLtCIY7YXkZUWbqu/5NwDgumfoNolJj9v50ZL1zKT0Qd2r2StNC0hM+uOy/VACfvvW4y9dsbhsedGj2/23Hw5FTWdIV8gNoBWcgsEfGzsbU8bvOkcz9lH4wSDT7RnTzjIUfcigOlLq2dRgchKwwpflBEzGNXUxhY44Ohs5Xlc0OGdSYtoUuzSJwfbKihKrHFecO3G+/VgeI45pYaYubxzQaWTqNYxZpQGFYaMIQnNqkbte0Q0mjgTFesiAZA7zGxNSyQY4VIi56vK6g0Ww7s1WA7xhsTh2cNNoyCbgwQvzTyMuXnwNwdwrY91/THQPguzR6jZa+yqWBcfQZpEOntRMrOeAxUK1rJpq4wvE9nMBADgazRDkBZnpNUzSMY49tatV30dK1HV1TY/q6kP945CFrcRyXw1cqdypPIITLq+1a6REBQ2PRDCeSyTmlYpX11JXqPNcZGQX04/ChfthzDIzGQvQ9ZqxTBwICc2CeprgagVw2B9rcYGZbtLpWuWsb6qqmYSArtEqO6IhMl/tDTqiRpVZoIUtBhsnYP9b8Onjxefi2K05U+pm3b97QyI6qhmjQiGFKpm2B4YbEy1r/Vs8uq1jvDqRaOswdIVhOCCIDq1TrKRc9hzd7ZCuwFsohMYYBv3c41jsOb9Ta71wwPA+HlMHRBPfvLKrmfP7+6n858BC85ckPNaaggfj4V+T2JUKjnPuuJHt6SVseif6pem56bWEkKaE/x7lQe49sC3r7C3xH4K/UnndtT/nFYYMwOoJO9afd3SOOJoFZsNPqImZpImyfqjyS1QosI4pz4o9vmzGO5/DnD/80jN//z4/20T7aR/toH+3/BzaO4/fTSvExJ/jRPtpH+2gf7Y/YPh6CH+2jfbSP9tH+aO3jIfjRPtpH+2gf7Y/W/iAw5s//s7+L7WkmizAhnAQ0ecOllj0pnIRDmZMXNaGralVGs+MqiHm729BqotVw6vEkjInnU+pWJ4S7E148IzsOpPFfg1Zks8NIJgitsSUeat6LDTPLIwy1BldfklcR/+7f+Q+/095/8I//Ppt1SRRrcmtHcNqtqd9taSuVYG2rnrLtsToPVxd2mvGMpB3pqopTppUqeothKBC9Qd2ohK2Lj+sYlKc9idYHHA2b4HKJYUEQqaSwY0/ww5Ao8NEKTtzt1/wXf/5ffae9//0//vd4Ht2wlapP3uZbuLulK6ZoQnWavCWZORieydeFqrkyhcHoTxl3HYNmm6itgaGpOFFg61qqpVNQNCWdsyDRpLjOQ4AxH0h+/inRqBCOqbVDBBGRV9Gr8jKMny/5D/72f/Sd9v5Pf+8Zq5/+hHlv8cpU33XEPcYhYF9COVXJ+FUwQ8oAipjCVFRdpzc53nTC0c2RJ51YFwbpPCYkZEjVVCy7hod3PYNXM+oargujI14keCfIM62pmLaYbs361VeUWwUi+k/+6+80l3/j3/rXqGSP0zYsF2qs62rL8bak6kYyXYx9qnsi3+PJkyWOreax0TR0CF4/vGejwUKxdHBHgWMPBK4CLchhRHQdg2MRTVSfuCEYeY0sHTpP6zimCUnkUXRb3r5RffL+6/2Htv7Df/DfqfG2Mvouw089qlbNxcPXIaGbIbwL8kax/hurKf49bJ0D8UY9o3Q8lnGNPYvpMrUGzE4iwoa07skeFVL8ikNXMxcxBaoNViXpLI9+kuB76rkX1gVO5WNNev79v/Offqdv/8v/5u8BMF1EuP6U0TOoKzVpLy5iOiPmlAl6QwEqYt+hFyYMDWWhpXBsSeR62GaArVVoTrKiLY88Wd2w1/RqngNe7LE9bfE08tOVA6VoyHd7FguFcAwcE2usicw5//rf/re/097P/tV/h6UGmoiuhyBgEga0tQK3+IlP5LrMowssR+0Vi9iitSXC8+g1Ank8dlgRkATUnVq3dhVALbDShECjobvSZDQsimLNoVHjU3Qt8lRQhyGtrguNpope7n//n//ud9r73/7Df8TDrZY1IydwHYrjlr1GdDvWjDi94PXxAatSe6VreIxRRJdLHuHWd/sjx/uSWPrMNCaxGjo6KibSIdBMVmNnMb9ZcHU9x6w1EOxYUVQ1nT8SJHqvdFyafsef//3/+Dvt/R//8/+BL3/9C9C6mLNlihAjh29u0aBcYn/B2+M7LoTB0y+Uck48n8Dgg+ex1+vs3atb2iFk6fccTxqoV3Z4lsfS7ZmkqpZ5cfmcqdHz7u4VngZD7t7v2YkdjnFJq2ntvtKMOr/P/jA6tB8/MIP07YGvfvcWszMwn+sNJRJkjcdgjhwa9SALgZ137Hfv2eqNfJ6H7Mwjs4sKQyhUZSf3TFKoTY+q1rpxoqZZ3zF7ck2vWVR26yPSH6iCELnTYpeVxWJyDovf7CvKsmC0VMe1p4EhPzBzbIapQpPedxvEQTI0JcFE8ddduDGBZyP9lDhV73Y5uhhCkp0ypC7NGLsaL3B529i0uRpsMzLI7nOiNMQ0tMNgV1ihD8LCi9TgzOJzZvvDcY3sR6ZLzZQe93hXl3xhWvz6qKWK/nJHHl+zGjyMXo3F9t2R2WXJNJjjLBQCymlafjHsefOrv8DTUPVDafCjn15wJV9SaQ7TIqo4CZtP9z6pLgL/Jg/5ycOch9DioE/B+a/Oi/td+zMGMeVONLRr9a6W9ZJ3bYMZxTRrXTZyOWFbN7T7Epmq994ZLjM3QBzh0Grh3tQl5Jp1V3HUBdpdEFJEBV8kC4xObcaNdcHUuKYZ98iZJluwEuIyxzECosuf6xb+4jvtLdue7LBn7HIcjfB0BgfP9TBkga70wZACug6nvWClD0tn6mKMPdEQUKeax9V9gud3GEgGLbQsSni9zxDlhlEjDc3eZTBqnKD/IF8EgqHviWOfTz99AXz3EDSF6vddVuLYa7I3V7h63ln2HfvFAmkU2Lk63L58nWObB8z7lK3mhGwnNbuNwfR2jXuhEJ7+ag3DC75pKhYrtTHWUnJ4mzNMIdYw/60wEJnEmbYEvfrcg9sT+iXL7nt4ejXRzCBc6mYkXxfIRpMPtND5gl76GBoZWfc9zmgxDgYbzcozjJLLWcTQDgSakEKOLnVnsck6mko5PNteELUWRSuJND3jPivIiyNyGBh7Nd9tt8XOB5aLc7TlD549pT+qvaf3BN6yx3UG0kYrX7gGdmcwn3TUj8QazYFhcInikkrT2tUGhK6BmWcYUvVLMNqELgjvgK9Lu8TUoq0mtOOOq6n626EKKKYDTgYyUPNnMnlG35yTEdwfatZrNT+6KmO28OkGiRUoZG1oB3RDx/7te0pNDrKYLmCE4r5n1OjlrpY4hkGYmMhEOQupEATmyGB47NYKCSr9Eg8PYThE+ruja5Nj0FctTaPWohN6WJPzY6N9c+L+/kS/UWvFbGwMsyUbK1JN/zdYI7e7Pa3ZsCxV6UPoVFTVEUvYH/RNDSNkacMqumaqS2yOx5y6bGkTh5PWM7RPa9r5EssIwNT6jFaH6C2O+zWuFghfeOc0hd+2P3gIPr+KPrBR7PICz7AxbImpxV2rNxm9ZUDvMrlSHdz1A4UtcMYIW8voUIzU2Di+gxnoOjzHxU4TLpMFx/fqwMsOOfVJML8Ymej6lSGsuW9yxmJPovlEPdtFiu8Rdiwb2sOAdr6xLQcXkz6N/hoKXghmsY3luBiaqcYQOa6zwLUNbFfVufRDj28HBEFIqz3SvgiRxRYG0CVmVPuGfKwZ6RkNNUFlUODeCaK0IZQKmj/a51ynVb/kWAw0liKrLnrJ2BfYLxPcV1oyKPQ4bDP25cAvX6t+qrMN7sHg2azgYVC3oMi1GOUWK5O8+uWvVT9Jm6XxY+Tla8VbCEgaFl6EbHr2enIEh55fVL8mvPBx5CMd3HkJyic//TH707QLitYAACAASURBVA65ntO6eoN2Qy7shMGMGbWnOVQCY5vj34TUub69h08g6ylkinTUQsmCGUWTE3Xg6Fv5i1VEU5SMTshsUN7i5UsX0QfcVpsPAroTK+bzy4RvJj6T/pE27buH4CzwcdoLjGjJ9LGG0/eIQpdTdcB9pTbP6EmCM4ARLQi0KGpguwSGw9XLlwh9COyESRxFTPyGWNf6rY8l6bsdZbak14Tx3djRuhFl/ppcqCUWRCZiqHm4b0jjcwq93+jbsd20lO2E3I258DQNn/cTMDso7slMNRcjYdM0Ln4wEH2m5ph822B4PXbyyYfbjFN6HI01nwQVX++VwxTUeyIyunbB+4NaR66T40ctY+nQaTFb1xTsmpaJdjy+bYuZeqbjONT5kb6p8fW6s/IeozzRiYhKMzvF0wAzSGEwMXRpSl2VFK6HqARN87hoBdI0mVkpN5+qObh7v6EWgu4EM102wmDSGSZSSIxeHQKh45HMPJZ6Ln3b9vmeia47jF0LS4w0XU2vyzr6MMFzDOLtGkPTLh7jEik8uq7COKnxPtUbytpm5kuu5qoPNuWA76U0HLCl2twzYSLke0JnoPM1A09fYlSSYJrQDMpR78eS4ntKZrJGUhhaCMCbkHYBUeKSaictP23Zvd4RRCHUqk/W2Ynh2FPvWmaeWu/XacixcelOJrbm8RUjOFOL0+bAVkeXlsYEK6sQ8QypnWNTZqShzcGIOW1Ve3eHe1b9/Ly9hwzbNllrdpxlbmJNPWb2ik2lnZSi5EdPPseIOjKdiSuFxNlZWL3J9afquZGMsSrB9eozghtNDn4S/NNf/pahc7nUIsWjc6ApdszmEWgWs8k4xRsLWnvHg2Ynk9m5U/Rt+5gT/Ggf7aN9tI/2R2t/8CY4BikLzTeHcOjFA1Fn4upi7AvboaoNutTmc50PyYaGL796j+WM2LUunEwXLC5slukFha28myZISIcYV1o0/aN3B7IZqe5yel0A3GU7qCWTmU+cKq8gMCOi9Fx+pD1Y7KuSqlNhjzgIkE2H0ZZkR3WdL95t8FHs+v74qMB+jeEb2H5CoLk+LcMkDCKS4ZrGV55MHxx4/+aAEUWMgfJGUrOkOb1ne8q5F4+5DofZxKHqJbYWAna8c++pzHfU+zldqm7MQfiUYDnjVET0J5X7yd7d03UT3nYHBh02PgwD7lZw9zBi1epmcPmzH2I5c9y5hFuttBCP5FREvUegxYLlrc/Wq9lmHV98qjxeM5ki3/eIwSZYKK/1zbdCdY8muyXCcNg1NYlWkbC5oBE5pdtR7ZXn1Zoj1vKa3JhRGjpM7jsQjFz7MVt9sdhXFn2zYHflsgw1K49cYl4GyP2eB53rKG4XjLLitPaJNWNKeQ9vk4AondM9fYwK/KPvtNfwPOxFgN/4GLp4eBF6jLZFJObMEjWf0jRiYk0JL2eYjhrXoOmJfZtemDiaLCGoLKQbsrBaXM3/ue86CGPcziG9UG071hnV6zXvG6haNRefLyStdDietpTe+S07Rs3nfWww2Ae8ouWfWcq7vfYf2JUGaRsyTtTn+vgXJK8TrOkSa9QcuP7AYPWMp3ukVHPxPnCw3YDi0qbRMlm/fZ1jxROW5h1potpiekteH+6Z9z7S0GsrtjASySk8Lz53NPmD6diYjYE1mgjUmhW1g+OPUOVEmnFqNZni+QHf3D58kGZypIlZGNgyxNUF752wiK9WGHaAPegi82CG3NxidiPFQau3dD12bdG0Dcaj4syYMI0S5uE5O5OQLWaox9EOqWXHzUxw1OmZwbfwRMze7rE71XdB7mBQsm0b9qWKuJg5JEGGS8o61ykBd8Y+K3AbE0IdOnfg1I9YbsTkRuWZxZcBpfGGwRuY6BDoSXpY9bnsRRrN2cbqlmrnJYIQo2zZjmof263v2N6/pTUljhYbSEaDPjKZGD4z+1GUYCTkyOgvMWs1/llxwNjUbPY5Gz0nps9fIKcWxwwKLVK8Pd7TBgZhMqex9I3MgmI8nw+NYSDMgItIi+qOO4Z9iyFdpOaetaYWk3SOLw2GR1UOc8b1DwI802J4UP0wXUUQRfhBxPFBY0hOa9oKMAoqW83ZT65XHI4jG8OAVhFmDFOf0LwiwMD4ncq9+9fnKijftj94CNpexVEfRv4iIm6nlNWBhabpWVoXnPyadHmNG6iNt9mCgUlVQ1NoqRp5zyq8gaGm07ppUWpT2YL6zQNDqTax6CAIfYu5N1I+hi+PJlOvpW/B18z108uEi8nsrL3r3QMPhwyrVAMbuAZ9nXGsMtLH3IyQJPGc2fWSRaRycavrp/jxEivysS3dYZ3NIAxMV3x4btZaxPOGhd+y1Xm3sRroypKibrl7rQ68zhp5Mbvh4mlMrcM3hnt+qGS3PbRr3heqP5PAYTg88OaU05dqkrx/a+DFLat4ynKq8muhVdAcc77ZZRz6L1U/7WpehEvieMmTmQqvWnbAp17EZXIFjqI9ms5tfr39Hc36HdmTT/U4mgRhQ9yAm6nDYifPc67NxQ9YyCOFcSJ5/mfqvYaE+vb/otx3DJo8uB5Kqq9K5LLBfHSiZIArB+qm5bTTIIhAIMYDN0NCdaucD/lCwJ1LS8Rc00mV+4qiOmD2cNLpk7J4xyie8+zpJUn7+wi0LaoGyvzAROcHcsPFrUamaci1BjJNLies5iu8ziTXea155GAS0Y8Ogz6MvcRkc/eONIyRuvZ25YyI2OFoGtiWDlXuG9p0xLut+VrrnJlBzTRI6WUJ2feE8l01ZlE9cmdJCusrmkaFvm5Hj156GJYkLXROPV+xO7xnWk24NdV8fxb7HDuHIGspWy07ho0/TXh4JbFNtabSYs77ao3s5lw+URutT8/MnCCsmOmlzhOecq6tnuS0PGtvpXUIXdkTr1IMbBydr5tEIb0wKet7bFfTcgkPrBDXm1NowFN1kHS7E7HnYmgAXtNZuO6Evhl5rZmATrsTlthiixItBE/RFNjSxeo7cn2IXC0mxH6I75xzfEQDmPpwl11DEIx0RQOWJkI/WNhPJUluImO9l7UQOD5C9KQaU5AsLC7TiLY2ub5Rjn97sCmtA5MggYnqz2M38PC2wgpLnpzUHtCEgipvmAcx9aAOi6GuEen5fDBdkL06yLp+R2ZWbE3BWKvvxZHFs6sZ49hi6pRLtr7nbv2ORNok2tFKk2uC5sDp+BY028y1UVKMPandEP9QaVsmgUUad/TFA46mJizy93x1D5c3LbY+97JaYNrfw3BjlGTZkeatekYTnTCDAccauV4qh3l5EzNbXvFpmpB/+RsArL5lYpm4omX6L6pcObXH2DmcjJE0VGP5Nq+4ngz0k+dch2rtTQKX+fwlm3bHl1+qdXa7ObB46vK+q3jQqhRx8v/hENwOPUIrLdRvd/jHB9wuoNRgGztslUBqZuBqpB21QWhMEQZ8eqkmySBGdr+tacMeoZ3gaPDIKEjblEF7mss0wTZr4u6vhRD3Vszbr79hSFpaLbk0Dt2HRO13BqIbYBRsNS+feL+hFUeGfKDXLONzz6cPfJ7Mr1gslNc/Wy4Ipjd40qTr1EYeLUO6yuHh4S2F1kJxHZ/r1SfY7AhPauLdvauRaUTVF4wa5ep2kA9HxoNNo+mgFvE5uGAShbw9nXAvtMd7+prfvamosRg1l2IYDjhyxexmwXSm2vbcn9LsG/zhLbepopy7alPqomQYckKNoEs9GylWhP4KMSqP6sH0WK5WbPoZtfZ4nTFnqFPEYkRG6rmX7jl36P440NYBO9Fg63j77r6izjOszkB66vdcKRG2QT96mHpzu5iaxKeITZdhJGrTntVbJp9/RjLckFypA950M/Zjh8MC01cbvj8ILvyUW7/km/fqGaMTML6QjKFNmv7orK0Au/2eQgaIMuNWKwvc+DHCFISdiaGlcGbYPHUCvF5QaC5JS9rYfUvTNjiW+q5d1Yi8wIt7poGayFdXL4naA9VJkmlU3XpSsrycka6WdL/5K/Vd28ZJpwSDhRV/D7BAo16xQkwrYh4mnPQt38BhZe3ZIXnQEl4C8M2YptvT5eqWsmuuCK8d+oc126Pqp8RbsJRbdvFTPK0B2DkFzpBh1xaHd2oD/mTu81ddwN+48LG07FgsR/yhQgbnc/ckHgWpBw7be6LOYjFVOceqqqlPNf2+RmpQ0XHrYVQtx12DpynsPn/+nPX6lvuv10x8tT5X1xfE9gzTGHB03r+p14Sdhd1LQn3rW12+QNQV24caz1fj440unjMyDufclhd+hFPrv4c+Ixm0M1b61lj7PlVzZKw7hFalmM07smYEccJ2tIRXLElnIa3nUNxpwWzXxIxcMlNgbNQc2Kwf2DYecbvgnamiOnXjYI0W+0OBq29TcXBNI87b++7+Dbap+hN3QZ7tGcyRQI9F1ww4o2SOxPEeQV81Zb1nFkYkpfrNi3TKs0XAZigpNHo3mXZsT4JyETJ9+sh3HJNGAYYh0fKp/OxPfoa5K/C9CeNc7VHy/j11c+502mPLYkzIV2rMvCfPsQ93FDLD19E13/W4dAamc0F8qSkrTYk1M/GaBE/qKGEyYRxCyvuamT7wovgSnlqYpk2n57F/HbGaPuXaeEo/qvHprFfI0CbxnhBPNVBNa2v+PvuDhyDWnLWG5O6yI1/0U1y3QaI64c2xJHZ87AD6QosujjGTbiQep8wu1Qn8cL/mN+sN1wuXm5mScwlTi+L9WwpDEK01UCAZkK8a9lOXRDMKj72PG7kMtaXu4kA1uNCdpzP9UTINfVwtc3NXN2S3Nbao6bVOXj4xiA1J/6cJuFrMdnLDbHlJ3Y4g1ebmL6ZErk+6Cljf/Up1R5NiOi71q54x1erbxhNOssA3bCaD8o6FJ0htj1E6jJpL0PoeNY/RsVk8mX+41XZ1QznzKNcd7UR50MbVSOi5rF4+B0O1bWkZrLMj8cWRv2kqTtDVswX/7NUGp74j1MryaXvgs4VDMB7Y5aodn0xtXp8iYveB/K0iLt/MJ3w+f8GuOZG4yrlo5fcAebwFD6+O/K7r2OtwTnzsKOcetOUHNPDk0ysGq6Px1jy9UosxyHzW447GvqfWgsTSGnlig0wbylLx+4kuZH06YBUFxkp5qd3YIXqDjRlxr/lOn8QzuuACy3rBi9XFeeeiNOQWbsxt3n4AeJVrgRfUmIlJm6vNXoYFi+uR+XyqXHBganncvb1ls6kphLp+PA98rj9L2VcHmlz9zbMSZkaI69XgaNDCbo7tSubJhM90mE94NUMjqfqONj8PJ7VakNiyYgILUtfE0rfNpMj4JxY0446nazW3e9+hik3SbE+uw7oyy/Adi3blc6kPeLt6YJA+nxoZbzUR/M3CwNst6Bcxtg7hH1uL+byg2TxQaK27yIUm9FiV5+E6w1dzsRp6qjpnklwwSLUmd/uC7fs9iWWTDsqRGQ87RGNgnY5EiXJ4noZz7HDg2GeEc/W3y6efMFvFHI4Z+VEd7mFnEI+S5lBy1ByRRrLA7BzKQhJ6GuY/2hzzE8V4jmweSfAmqi3TsON+K7l5GhFO1Hs0p5bDKcaZNzQaaeh44NQQBClVocZ771ik2ZQ2z4k1OCzrW6JBIIyIYtRoSzdh4c+YJvGHQ380Wo5Tn3ozgIb0W2mCk30PO+V+xE973Z8HqnxPXxcf5skidTFsGMWRwFbvP5/bfLK4JAmn9Ce1jifegcqHTxyTXAvP/uKb39LsH4gmz3n0bxZpSjydcL+vaTRhfPLiKQsnw5Am262aA6Nd48nv8sgCzLqRKhjpddSkuz+Q5wWGvaOJ1Dnw9nd7xPE18/zFo3wk3ujzPLhkV+0p9c1/VwimNxGzxOarV8qBGCqT2fSSeJUQ6AtNRc1J9PSDIJqqPph9/oJ8VxGaW4ZezeP5w/l8+LZ9BMZ8tI/20T7aR/ujtT94E5w6FmKiARBlTXXsiOKICw3xNnYFXjkw8U70vTral7MleR9j2Rl+pcUZ64BP/SnTyMZ5ZF4vPOzWQnaC9EoXt3ce9eWU+2xPca88ANtoCD2f5GqCpXM4TZMx885vKmV/IhwMOl0WklY+pesxdB2DDpnIxsC/cAnknL5QYYTXr39NcXzg+uZHPArAn/YPLK6fE2EzT1VoNpnX3B1PWJbPQjO/Z9WWWR8yDi61zHRD9gTpE45jRqkFM5PiPC4d2D6BN6HRobpirFl5K973I0stydLvSrynKdFszlf/5GsA7j2B9HyeXv4QdLi6aiSfP7tiJi4INdjB/vKXNEWtivd1Lm0YIp6tniBPR9qD+uP+8BXlpyVuBEJX97fluVr7dGqwX7ls/7cC62ca9vzyGjmGtPUt6FtFeDqRmzlPfeh2yms0vBbTOTG9GHh90uG2sWQM10zNgcJVHmTWTzhEJmE1sNNhF9ndUogZLT7zpYokLNKIgY4HUfNreX6zAjCbE9kgKHdH/KkKzVt1zUVkYwqHVpf6jFmNl+fYgYEQ6qa5PuTkzZHNLmN9pzzUyc9+xHwWYx9zhKHG89Xrb+j8Bd5qgaUBAEFiUHUGd8cCKdX4h/6Kb7JXvHm3JY7O566j1dHDyGQvfI7ENIYqibFtyTPznuEQIfT8DK0W+2rG08DD1gWPZbghET5T18Ceaxj5KiJYTNh1J17q6MrV9JLJpGcb9LQHVYbiBfCjacybwQFL5RP9G8l1MaHxz1U6Yg0y6aw5Rg1dWyG0cn08cdhtOkRjE5kqTBXEC6QX0RwLglHnNbdbYgE/uLkkDNXnhirndOi539zR3CnAmIXEGhosJPc7Ne8GLBzfI049pvpdjUXEqcyZTc7rwtyx4agRWd51wzIO8B0TT9ecdZMG0fb0ocDXEadusIhTh152jK4a72Nm8xfGhnRw8Rr1vtGiopYtC0tCr+anuxwx+xi4QG5VxAXPI20uEWZGo5UQzL1k5LwExZAWx3v1rvf393imgzuOjJosIUkSIumQvztxcaXa8ZNPFhwfCo6b3/H8qYok3e/fIkqT5PkViVbSOeUOgeWxq0bQajjJUwPTHYinKRNX3Rjf5YJ9bSHrgdNa3cq/uV0Tf8/Vqd3f89X7Ld1G9V3mVRz3By6fRVj2K9UnC5vm7cgrkfDDz1X+r7VNfvsmIwwqtp56D8vsuPSX5MeKHh0qlpJyXxNPY4KplpTrR+qix6oyTpo0pNhvqfqBd9l77jJdaM/v5c4G/jmHYOtW1KbqpDqHshG4VsnN5UsAFoON5zmkrsdehxs/u3zCG2PLxErJc7UBLjjhTkOczmbYqIaNVUMgXS6XSzxdlxLUJ4Z4Qb59jdShysKcMSYNg+kQ6NBSMlkiOEeHjlVGeTIZdS4pNiwsy8cKTSa6ANZYupShzWG/42Sow0esOsauIn7ylNO92lDzo0XbDKSuINEK5IWoEUPNLDLYFyrcII47XNFg9AZGp35vNB2O2we2pwNtq+Og6Xkcvdi/5QezgDevVa3Om9d73sYr8vXpgySLa6/orDs6mfBGC2NduVOmnUtnesxdVfBvhm8RTciPLq5ZxmoSv3nzhqqRBCsPVyPNTl/e8syekj655JdfqXrCPM+4f93grVKEBl407nkIwY+fIhff8IO/NcHM1VikQUrblxSGgyjUeNcGdMuK8r7D9lWYU36+on7YsK5C7o+vAPBWJ5q3a/6Fyx8yCxb6u3ueR8+pBkFVq02wM3sWTxyu6hniRm0eyeoJ2eYe4YfY5flcAMj3NXt7JLR8Il9tCp9MJ1ykFsnMZMy0VmZn8+o3tzyZLzEKBVBpjnckT64IDBgLlWAfhhaxG3F6MD3VT8+SKaXncOx3zHT92yHrsDrBdHR5eFSW78CzY1xzys2VAiRt//Kv6xpdqUKpx27ATOYMVwbX94/h4Fvk3sf4wRfYWuuuPI5EZcExbgh0+M/PQrq442b1hHava8/GkWdGwJOn17zTG54zWPhTWAQHHnL1udwcIHYghUXxUn3O6RGeTTaeb9KtzgnbnsPxmJHXJ/pGOV+LIMI0wJQ1Qut+2pYkXV1gjTY9ep3IDnscCNIFva6V82vJPtvi5QWmPiw96eCFFpEd0zzmSeWA4VrIcaQ0VJ+ko43hjvTGeY5tfdoxc7TqebDA7SX3Wcml9p/2kSCUgq6sOejx7tqRLqqpfROhNRD9+Zxq71BEPgvtlLdtjWhiqtTD6NVecVwLAtNjtB64W6s5NZulYHuM2YFSg7kWs566OA83B1OHrS5kT+ZT/M4lSWIudB3r1TSkOpbYyx5TO1p1keE0Ga4xMg1Ve8fBYG2MjN6EhS5y//nfeMZv7+aY2wrf0/m1eoszCt5sbyFVF59T13PMBkw7Yi90LeKuo3bOT0F7+Qz5TUa60HWCwWfcB18zmZY8e672qMkiQO6OCPHAodDsPeKSLnH47Md/QnKn1mhWduwsA5E42HrOtmZH2Vu8utty0OjVL54/pckKvtoc2JWPYX1BYi/wk4pMywCuXl6ftfc7bf9D/zxmFa2pBqiUGbHtgTNye9Sw/HiK6XrUo8MXz/6m+s6hYyIsDDOm2ClPtjhUvN09MO4zXv5cATnm9pTOc8ksib3VMejnz5mZgq/CS7b6kKuQZFnF7uEdX/zsJQCfW/4Hocpvm8wMsvrAsNcbjxREbkPtOuQ6EZ26CYYX03SwWKqDdnWxoq8NpAgQvhrEVm7ojhPuzQZ/1LREaYpx7HFFRb5X79bXR2y/52o5pdZMGJ1zTfvwQHUo8DX7QiLP4/7r9yeS45qsUp524tTEl0+ZDH9K5iiPr++OfJZ+hi02/CtXKv/3s3/5cx5ev8K0EqKp8lDDckpnlrycXvJsoQ6Ua+dfYlN/xcIKWN/qA2pWcmtsKCpBqA+yEA/TveThn/2fSF0s3zjnt6t1L/A9B8d4jpHowyiWHB72dKJiL7V+l3nA3ZuY2TsmuoK6O+6poxy5f2ChNWW90mTRDAQ/99lpyiQzbOnbLW9GwaAdlyGvyB5ChLljefWFavOPoDUTws7lNHw/OrQy4eHdGicTXE/VArOtiEpkBE3CzL/S42rhNYL9ccPDN2rhHNd3vMxrhmCJ0DqR+2PPfddxGVp0OhLRGQZEFrFoqDQd2FC0DG1Pbre4nRr/o3PEbG1mN9dEV8/O2mo97iuLiMELiWWK+Vw5EOm7CXkzsHgSwULrxJWS0u6Ydh6eZh+xG58XTzzsiwgMtXm8OZ7IC8kuyLAb9R73rkdfBrRVgo363Dd7j7jscGOD7ge6tKm2qGcFq+K85KCsdRmB5+BPRlwvYHNQCL3T3iCcTqDPyLUG6MXqEw73B+rcINJzZ+xMit2O4/FAp0uJLp8/ITYdsjqj3qo52HgjlxfXGOGWYaNQ1tJMGLwLaDqyWpehxB6JfYmp3+nbNo9GlvqmYZ9qOttmNeb0Uh00z6MJt9s9bVqTndRaCd0JN+lnFPmatRZMDoRkEth03ZFKOzjZtsa2D7j+kkijN4cywxIGi9jh5vHmbwtM68DJq4l12Y0zFojvKeloB4v7tQ7f1CX2YoEduyTOIypekl6uSEKBda/65OH2hNNldJbHptRO6uIp8cSlmHmIXM1tIaCVDX1oE+vFKLqSzhoZh4b1GzVmvTun2+/pjYRA56cvnz/jOrF4+NV322uaT/G9B9xH2jjH48n1jNV8yWdf6GhieEGV3nJ4feIvN2v9agMLe8GBZ7xYaMFswyHPc96+2SB0dKUfByLpcu0a9JrMoMu21HVL1Pa8Pap367Z79kmB3BxIVtphmDw9699v2x88BK+emcSaUaJ/YhL1kNpTQg22KTNBb5tE9pxYbwqjDfX0hvp+h5XpEEc2Qbx7xzY/Mv9GhVrwb5hKD9NxkRpufahsnLgjeXbJdq1eyhARq8UUmQkcV3lo47jAjs5hurvTHa7jf0iU26bB9fVzeiEp9aYw9itCaWI+uyFKbvQ3DYqh5f/4+mueTBVND5NL1nbDmBXEEzVJk9Gls2c4NwMrQ22qomvY7nL2RoHUvKhP4mvamxmJ5XLSqqpufF7S8frdjqb2mU2VE7B88af88Oqn1FdH1js1cXZ3Ixedgz8+4zJUYzHtS2Z/9lPMKqet1TMd32TaP0dOY3Z6M65WDtOvpqwWL0gexZHznuMQc/+L/5u8UJMufPYpk3bDK3PO1+9UyLULzjeSsYjJs5h69Al1m7/e13RVQXMCK9Qq3cJjnAtORxdTRyJ6E65jH2M1cNir8Z5mId6kRpze0/iqj1PL48uHIw8bGHW9Z/PuwHDZ8dy5YNQhzP2hJTZdzHSkc76fFmmoW9z/h733+JIrudI8f09r1+4hEAEEgEQmk2STTU6fmhabntXM39ybEWempnqquopVFIkUSCCka/H8aT0LM2Sz6NnZi14WbBnHw93eM7NrV3z3++wWq85pJCesPnXoCoPSsdk3It3EUWXWc7m939DICPwxUtjdR3z5r6+wr8XlvjdBqzuS2YDhSKRzctVjG6aEe5WVFAsuiiO1WnF4yjGmYt2NtKMyK/rnE/reqdGzHfG3uNRpioy5GaDMJQ1fqlL5Jv3igfROnKnZ0CPOImy3YyRh/s5Yxb5+wav7PRtH7J9a32A0BWbW0UrGlDR3UA1o0x6pLX5jqKzpXr+kiFXWG3F+Bt6AahAQV6eR9vmZiKIN10RvTeLH/8qEk6c5VVtj+wambJuo85Au6jFwhxiyfzhoGnLVx+wSthKRqUQp27Rkc6ywP57jOmOx3OG5LfZEnLtDrTByO3qzSxJVXAK5VqGbKo5x2nLQFRm+jBDzYk1T6aSOwvCj05vuOTMMog2kpvicpmjY0RylbMglo492bDm7uSbNJqh7kamwcpOB3WOU6PRU4ZRqj2vw9nRNQyBtgF9ZFFrBcDBim4i9t1ZdbPUUNbddPlF4kmkmKkn3GY3dcS+za5fDmiBROW4XPJM9ttvHCM3QKYqQbiuR2s8uKcISz9TYysvdNnSmN6/RUpVSkyCTJmS534BjaDSRkgAAIABJREFUMrQEsG4fZ3i2QaEqJEdxZgMDppIt6Z+/4DmDIKVIZNZgPyeauvT1llIaAU1teL9Zo2gaSSbeye2HW/7vcM/N2ib8N7Jk1bfxOoP324wgkC0hjUWe7PiuKvhXgTiP63VM4HUY0w53KbM1Rk2WpFRNxYUp9m3vv9Mn+AkY82l8Gp/Gp/Fp/IsdPxkJfvhuzWQiuQ/Jsd2AIzm6JjyB4PIMNzUoygG1rAk6/T7p05b1uxXv7kVUUR927OYVz67eoDsyX78wGPz7S87GE2oJ8VbaDU2y5/lwgjMU3sittsP2dbRdiyn7l0o3QqtPYbqaqWB0Bq7MLQ0CDce2ifIcrRENv7WvkdY1m6xhXwjS4rnWQ9XOiJuY1hEe2tnZFN102dQdFcJbct0hZfyeh8WW9UoSOTcKhWXRpRHXz2/ERIwKUx3iuTe4kgX9Y1j/56NT+yzdEDsSnuvZMmV0fsB9doZRyaJuVfFhdeDf/tIhlLn43WpI4DmslzGd7BFCG/LQ6NzYPqHso5n4Y4zrHpZjs0hEJBSMenz9TUFceWh9UZsq85ivjwX5oUEtJWdpe5piHNy85vZthaUcQJIRl1qNOrkhUI40d38EwBw/Z3STsqg2fB2JuqNXNMx+ZXPea/nMEGvhj0Jy1WIeH7noifVujzYD1+PC27OzxPPWQ5eb4Rc4vSlFTzYtGwbauIe5NnCCH+8D2mYhpuHTcxSmUvmkc0yW4ZbUdBkaIhOQHSKaDmL1jMFUPFfP9bBMuHz1JeZRpL7TTuOw37MrTM56MvV7LHjYh0R5zFpGm1GTEWUZmBotYm8HA5+hZ/Mh3BElp1H2w1icn+rQUTg93K7GdQQJdmrHKP/4gcdNxngqa4K7jKFR0fN8ZraINlvbJF7eM6fiUIv9Yx8HKD2Tg3kgaCSoKIj4/uigvdBR+7KnNJ+QpRXq1OLMFO9K81PUY4L3I4TUjYxkekODMDtQlDFpIfbdoDcgsHuUm5x4L1l/wgzf7BMYJrsHAbLYL2NGmkm0zVH1ifxeFVMJuJz5dJ141vHMpooWKF3M5YXI1Hiug+l3+L5FK9sB4mSH6w0oOQV1qZ2NJtPm7r4DC/rNkYFsissMhWpSM8kd9K1Ys8o+MrIvSXY7Ekn6HozB2K4Yaw2e7CndJlvcZEDPs3HkeXzm9lmv1pTlAW0i6r3uuKVJdfxRQ1KIyMWoj8TlaWSVZDmNtB1dpaL1a4zgnOheZNLu25zr2TlNq3N7J8kxCLkYvsbjnOkLkXJ/9fIaJyux9Zz7tTgn2tDlxegKZ5vxh3vBqqLbLtu6pssUZmOp3tF7hnO/wtQdPF/skz/96Y8c7dPMS1Hs2B62qLX430OdcOFdsVod+IMv3udf/fpLWjcjrGP0ibgHjKjDdXrov/4c/Vzs49x02cQrwp7OmWyHeD2e8dXbf+SbzTfMXor3bjCmTwH7I8+kwtBec1iEBsEgotzKvu3j6V3x5+O/UxNc0R8J42RMh5h1TBSqHGRBeOJrnA0uYGdimOJvelLgZxq1l+HKRvGHMCLcrPji5TVTTxiPY/xE9SEg932cQNSwrPKRVXagf/2KbCjRfG8rlst7bDVHk7WPdL9DHZ6GuNfTIZ7i/SC5ZNsdm0POZDLl7EwY/NVW43a5I1uv6Z+JmpAzHNApDmprEkm5lbJOOS7nfLh/YNyTNQz9ml30wPvVLfFRov58l9FkyOz6ijYVB+CwnaN2NvGmJZd/a8zTYv3nFwqHtc3MEIZdG1W8vV3y715f8GoqQBFa3rG4OdLzr7m4Eakguy1o+jN6z1vW98JAq1Of/TJlG+64kWzs27xj0K/426eE5E+S0soaYbsNwzcDulxskpQdaVKySVO2tTBurlMD//wiHBkVU8/h7f5IIAmad4eCxWPK2aTi2BO/26MlLl0qt8dmIVI6zrWLFSaYuoV5JoysuXLR4pjC93j4XhxuPR9y+bLH7cZGl+lFezKjnfrkozPsTvxGtM4w7Aal/wa1OU01A+hUaG2H6WrEklWkeIwwAp9xf4zeibX+4/qWTT3k5myIKQ97r1PRmwR3ds3oUhTW0/f3zI9brDzjfCFqGtGuQc0rVNOmln14phPgKH201Y7F3R/Eu2uu8V9cwP6Irq5O5lqsJEWWNsDVe5RKwZktzt7rTOV3n+tctR7TXMw5cvv0yoDV5ogtAWPqOKa/zQgLV6CTgPfKHu9myjD0Wew/iB9TXbTZjMYdoRhyX+6e2GNhHEoaSZiQxH1ePpsyU5+dzDf72FDfVKDlNHVEJVG6itVjPO6jWD47SdKgNKA3LUqYQSTORH6MeFrF3D2umD4TF77uTKgOS4yBjnMpU4uqxeNygTHMmF6KNK/i2iRaTrl+wJGpeweVLHnCUE5BXWadcZA9i3pXMTRLLsdDZpK5JY0XsA3oqpq6EunVZF3jlSmJEXG9l32h0yvSDx9oXZcqks7M+pZDpGIdn+P7Ys2+mFqMiprtPMOTNUqnHHFwYrLYppKN+/toR22GJ/M9HHc/9JM2eYd+rFhuOgbSMbR1jX1Wcngq6KSD/bOXl4zOp5S6y+WX4hK8/uwNry4u+Ic//IFqLXuAq4511vC4mJMsxQVqvfkCa3xJic62FfspO8QsNk+4rY7uSduDQZmdXirHAjTVoJQYEtVrqWyN/sUFoewd/CZe81WYsEsSHEks745HRE6PXbrmoRRO2tUzg3RfYdoKR1us5XFqkN4mVA81bSX+NpipJIeIdV3Ryf7Mh6cPPG4ano8GqJKgxDb+By7B0URoAAJMriyUUiX5eoGZix90gz5dW5BUJcdcGLE+I+IiQk8zzi4loODeYdIfkGY5xV4sbFtrKCi4rc5VIAxbNX2BVw3pLgPSSvwGxo4qqdBMFV1KlxiaT1edwl5vRkMUxSTdyyjKanBNB81QsGWLhG00YCvYToBpib99WC9R8z34Brq8uK18zfzdAw+L73nzQnipF7OW3faRY76nk82ux7pBH3qcmyNA6pp5Gl1ZkaYdqlQWGAandaD4uGW5DjHbGwC88oDXW/P0jcn8I1efbtM7G2K9tMEX7y5sfCZaQ90b8SApjs4sj/vBEvPDE5/95j8CMLWPPDxFKFHFxpUORJKRuS3PznrkS3E4b/ceh+A5/sRhLQ3ZTNnzl5fgu9s9+8eMKNlxlPWajdGwaWKUsgRfGK0sy8iShINhoA1EUbpmS4KPbvTROklV1SUs5g2qoxFKirC4gmAR42VLQokCa7rXeL5BW7fUtdgXFQqb9x7DFzp79cc3+c2zz1B9h/oxxpCKDPvkCeqS/nDEk5TD+kDJLKi4fO6jSV27anOktkOWbUQnm30jKpaHJX3P5mkryRcqhcpWqZvmB2UAY9jHscfoWYm1lyCTpkU51MyGr/CenUau862Y3+VVg9qkqHXAwRF/2yolvXBE54zRXkhGn7lKlVfUhx2xLtYp+tsC84sevwwGfJXLKMp9hbYOuM0T5hKfodR7bKsPgznbW0lz5Rq4mUqk6zxFwkDbvsmgycjiu5P5apowqF2j458bhFHN4S6R/6dguzmHqKGRUVmRJIwubOzOQCnEOxkqNr/7ZkcTVey3wn4ovZp8t8PUdUzppGl9AyPwcB2bQuqMbo+39AYWjZKjSVkr26/RDX5o2v/zYXhDdElNZ6cd47hiFkyZfqSrMy8xqgNbs6BEXEr9qkA91nTHBakm9rv9TkHrKvqtjlqK9X7RtCROy3OrYiTrjoNkj1XUvLnuo0gE7tFMGFg6mQWOIqOUsMYpTtGhdmUSyAtvsSlQRgZ1lXEbymjWcKDZ0g9szp5/KebbUwjOJhjeEHUg678jE902UWc+lURf1lHGMi/IlYjRREbghk/eZNRVRCfrmorrM3MneGrJXKKNW68HPyJNlDkXGP2SKhPr2AZDskYnfNyhJGIf3z78HUvVxbct1FK8z7yMWFQJilMz7V6LvVIZWOM+LwIFF6mpqdxzKI+MLgeYl+I5jLMxmtliRfe8K6XsVJPjdBXx1qeSwZrOT6tI/OQl+MrysWxJtdMfgKWxylSGjZjELsqIjzHXw5+j5yLCi44Zm2pPXsVUEn3YWi6z6wn9Fz6Pmlj8CQHu9II8qTFkLxGmTaRXYDUca0kU2+1Az/AMl1oTG6z/5hLK08gqjhc0rcc+EptTS1R+9vmI7x5CVncCjt7ZEzJFQT3e0+pi831YrDGCK4FjP4jv/fzXL0jdHXWQkbViLrfhd8RNyHLzRCY9OdWuudu0zIJzbibC+2oTA6XM8LyA1xfSw/dPi/Xzp++ItypLuUms5Rm/+J+e88e3C76rxWb67evf0JwpNFXERvZdlquvWHUpr84mKBKl9Ie79xyjezZbk2LxnwH49aTHi1GfP3y9Zt+Iw75ab/j6w5af3VzzdCe+bzk/cmxLptMjxVYYPO3yFBZfVSq7PKQyTDJNXDw1Nnpvj2oZaBIB+341J9x8w9Bo0GVkndRnJMWWZdxiaSLKz7UZZTfHiAKsSlw+gXFFGi7YP/UxVyLKLd8kbFYVQzclly0SL4wz0H0+xDlvjPHJXAEmTcAhLbGdFt2TKfK+Tp2VhA9rDgexJhPHxrZVIj1Byj+ijVvKROVP3/yR4LXwUDd2TTlzyFSDney52kVH7p/WVLVDIiNBrR+y2Rcous74RiJQdQUceHF9heufXoKe9Onq0mXf7RhNesQSIh+vV4w1g/0u/MH5u3AdFuuUX/rP2ezeiffkrplnM+xUZWWL9bnggtU4p1AcTAn6mZQZ5C3H3SueT0V7jlL0mU89+o1DJpHUV3VNZfZJmlPgxrkELNhuIsoQL11MSap9dm7StXtabURjCLtg+jpx0RJlKZZk76nSEscO6E1rYpn6fPywwO/reFVFLdsNbEejd3lDbWzRnol1HNY6TZegWDm1J/Zq1mi4wyHdj9CQGedHxql4d2rfglyjiL9DVcSznZklNAbLMGIi0e9KabGNFxiHjIuR2MfntkKPc7piQ/eRKtJNSUqfcXlATySBduPw237AIc5pJE2e4fah0QnrEq0SG+1iOGYbnVJA9geXHN6KtRn0a6ajC4xizUKS6Ff7nM3+lt/+8jOuXkrGpCpmrTrYZcvyK5Ft+H/e/SeuXr3mqBq83Yi5heGKm25IGJXoH2no2oaBZtFaBpW0x6syZjZw2MYxy0r878C/oD88bTm4Mi2qwYCh5JC2ntfsFjuSjcpKSp2tukdG/udMXvTQPJG9eQwburJl3sH93/0NAH9VfM7lxZQkq/ClQzJ9sDiGKbVfcpQR+IM/55kBqdsSyPNtTYZ0Wsn225jxr34u1ts+5b798/EJGPNpfBqfxqfxafyLHT8ZCRrPfDREmJmW77C6IV9cTVBk/9ZGyRkP+lB3eJLx4zbLKAxYbWt2cxF9JFGBfubQFDqXz4XX4ukR2/hIfT1g2YrbPtpUKLMWu3BxJUPDF88vaNsax+54PEiAQrkFToUz480B2y/wPtb1sPnTdyuWqwPbQnxfMOtj+gpJmpMeBJO54mucX0x52iZEqXje9UInaRMaXyUai++7jQ+kT0uyLgLJr+i7PdbLB9r0EVtKQgX6ELVuKFvIJGPMQD2NrM5ffMblxSVVKOsS84zD0wK1H/C4FM86GOz4ef+a+TCnzUQ/4VEPcPI1//j9gq2MIrfHB/76//g/WV2eUd39AoBuN+D3+xbzENOUwoM0xn2i//eBv+kWLP5ezOm5beL3FaKHkL70lmv/HHj/z+arY+K6Lprh4kpoeXmzxwkD7FXGXHrQRdrRszo6zUJzhadtDxvSJmCTlly+EfWfyV2DejkgV0102VD8pB/Zftsy8k3sRqh8LCudw3KB4zv4jgQ9vFKYNjnRdktanaaTAJo2po5iquKIIaNUJxhTlypoGaYu5ubWJWWqsLiPmb0RkdtnF1fsdyq7px1I7sxcaZmdX9O1DWkq0kO7JCdTbBxjyORGtE1k1Z6k+BpNsTmT4sSGrXEsc/bre8LktAZ0LfsfMzT8umBf3WHkN/J9btGfTRicJaiSHSYNbUafjXmsW7RIRKqPfsNUf8Ufy5R4JTztwk5I9AbF82kl3Uyoj5j2oOfW9M6FV//hq5yJ2ZB3B0LZ66aPJ/jugKvmR4gTPmb3my1loeIoClcyQDB6LeEqpXVMRtfiN42jS7GvSXchxZOIKtLlgVbXuLiZkkmgSNo1OGZJYzYYEopfVjVpFqEFOp0qIqjZTR+VnKZx0HXxfU0+R8PA+pG+O6dSSGSadOxeMmgOtMcFoeSFnasdw0HHyIzwChkb2ECn4fQDplLG7aXdcRao7Jtz9FZEWx/WNb06p64izuRzmO0z1LKmUVoWsmfPQsHqaxhLk06WmVozxYxPQWiu6oEUwdXLmiw+4PUGTFSZ5bJKJi8v+Hw0AKlys0kX6BcZ/vMrUhktvXv/jnIxZ99qvF2IiNMqO/qDCtMIsDpZ/8tcLmY+jdGy2gvbM6kbulphv9yR7MQZaOstXXmaXkyaioGnc7Bkarq0uCwsvmtTzh1ZsqksKl8ljWISmdY99If4I580VjANka9/ePpAqMQMPIuP5UdrVmPPzrjWNDLZ80xk0l5BcXyHJSPkXXGg3dSofQttJ95BGvw3VGbk+MlLcGyX1DIvHbVHirJFNSyanUSMdga9QYvtViwOoh6QHkIWdUhjG+iS8T7OY/LdE/bjAzXCyBjWkVfNJV7bJ4qlYbNtsqRBdY8kgXgoTQfXD8BOydZiIR5/d8fZ2ak+X286BMvDRVxQ4aFhsdyjqS6B7AnUDI3eSMfqnbGQaYhBz+XQZsRFgSn12va1ybpSmZw95+JG5s3TFAUF+85CkzXBrDExnSEjx8KQh69NSqgikv0OX9Zhrs8v+cvx5l+9YvFugDUTv/mQvGdfNfQ9hbYvNtrbpyWu+098fm6y0cUzJ0pAUR3ZzOccZIojKkIe7QSyHaNnEjyxbamqI26S03oiRXSfGMQ3z3iuWQy+EAd2TMNiM2cyU+BMGPJf/eaC//Sf//kl2GoVec9DzxdUhSQGPxjY24wVBYqsh/RcuJr+hqIfc5QAknPrmpdvXOJVxmwrLgbLaTCcES9mI/4YCKOgf/0tY31AbhocJKKzKgx6ao2uqshyNNv116BdEu8jtrIW95ejVEyMUY/l/RPlRuyn6PYJo9D45Zd9hn1x4etdh38+QNVaRkOx1trkAs3tYxCTSFWO/XLL+KXHxGhZvX8v3/EGzVFwzgNUTzzDMYxR4gx7rNHaYm+rdkeX6ZThnoF2euzWuqwdtxWbEqzNBaokSz6/PmMUhByKCbVk+NikW8yHltQ8/qDc3bv+Jbl5xUxdox0ka9C8Q2vfozU2w5HsOxtotOqCKD7n+J1Iu7+73WIEGtfjIVtJtLx6HKCd19xapwmjWvbmdVnKsWoIAgdFEamw9WFBXpgMLZ3JTJYIPJui6Sh2Fb2ZSF+7bp/t0wrbUXEkiME1ararBW4X0PvYw2eWuH0NVVVwJdq2qxMUA6yBiyFzybv5hu38iYv+qW0Y2kMKqWZ2OB5pdgesqGLaiLUwRyY0FoGSMbkSzzFfhvxqekWeH/AUSfoQb9jHYE9sMtl32dDhBQFmzyGQJB5KmJGZGrrn0i+lGIAx40ktKK2GXComuJaBe/Ejl+BowvWlWId/+Oq/QJ5R+x55LA7A5zdTDA9yI4FQEprkLWFh0fMnmBNheJ5XI6K6pOkaAl8Ct6waVVdQaojTj7qtj+iFRp7siULhkHb0qCsYeTrzUCpmVDmUp0h3o1WoVI8qFf8bVzUHclZxzI0kh1DrgvnuW7Yrj60jAERO32VQ9xmfX5B6Aj/QPM1pti01Lpou9vbjPkVXG4LBFD6ywxzuSMqEdLXHlpd5ndmMXozZ3lfc7QQKeZj9OMH+x/GTl2Dlt3i6mOzRMsjWMUkWo8uaTqsYvP/wO3792/+VyzfCyNcNjB897MPwB+CB6psUYc7B2pJIkcRfX58zL7bY948/oENHmofpaRiGBxIeHKs1XduiuX2GHyUxzrIfLX4PxgPc8ZToUfxu42m8fHGD5am8XcvanGdh+zaNbqFJ4clGK0nTEj/QsKRnjDsgUFu8RsXIZXOvUxOqEJpA/JGWSsMNVDwTbENs9mOzYzZoKNWSmeRT1NxTb7oZt+y/fYfXiucPZlOqYkNsOySSu/Nnz002Rk381DDzRSQYWw1ucKTUK6KZ+F71Meff/ea31Hafr98Kw6Y93WHnJWNlxuZJXDyuo/Psjc8sKzDsGzEPc81v39i4owsKpDbd7BTGv48Kjl5IVRQoR8mO0jbMLs9ovv4980y8dyUJiQMfrXFxHIHKPZtecmk9wzxfkn8jDq0zGfOsp6N3HueSQUMdw/+1e8v9VyXaQKzPeDBmkfv03R6bRurkRQZXQUWlHSk/rsVfjKjOsM0+vmeyOQgGnkOU8T9ff4EfNNwdxF7Uq4arVgXbpa0+Fv1NwEcJdHbSy1xGBio1o6GDI8V3O7UBz2E6G5FJrUxbcZi8vMTsq4Qb8U7iIqM2DFp1RNHsT+ZavxPrfdS2hJsW9WqHeZDtIE3C9npMNWzJ7kT2wsk6ussB5XLNQZIRtXGBldxSOSNeXQgD7Y8z5m8DvHGK97FzYDKm/d5iMNhySIUJePnqmtZUWd9n9HTJWfpiyI1yhnJ5Ws82ZTbIO5/RlSFKA4akK3SxaZOC9eaRvifQnMbYx7NcfMvCjsS6Pt2HVKVO1rYspPRTXi8ZGh2NXhErYn3aTscOVPyZhf9cat3pGUW3w/X7WI5wthXVpOgaivwUKGUPVNRQfG6T7NB9k+2+w5TKL0+FQZf6jK4cNKnW0jdr2qQjMCZ0K7F/6qxmM97TsycYhnhes3Zh5OJZJn3ZnhXqOnldEMUVdysJtjq7xRxfoKsmnfxcZii0zmlWK0kz4kTYQKVquD18S39t8h9+JRU4BjZhnZLcPRJImzUeTOi1feqwQ5GUgFFpEFYNTQW+lEebBS6+X6GXDXsJNKq1nCwLKaIWJRNzWycZ9+E9ummjICWXygzDOj1vsapgqipKKx2hxR2VajCyA9RCbDxLzXFTky8mAbcyOrwwfZrxFMu75F7Kx60Nl/3mHm2fcvEzGTEfFdQoRxnmXF4KR3X39YJhG6I/v8CRALTo4U/EscV9lGLkwq4qzf8AOnRzf4Br4aFG2wXhLiXqHGbSa+/bNppn8tDc48jLcjhzyZ73eLp9Tyx5RyevA8r7nHTfkKYyFaKc4asG+/pAIAuxo+sxalNw7CIcSVNk5hneSMXqufR/ISjXJv6QcP1wMt8kS9GijEaXiDc1Qm1VyqTDlUSsdVYRhQXuGVxKDyUnxorXLJWW0VDyGpomx6eMQ3LAVKQ4o5mhVRWu4iP1Yxl6BtWmQtEtITuNUNvGVghyjVougFaeGhJ9F3KmQi0JXlvmlPsck4bfXIl0VqZnZPGBtT0ilS0IZpdyKCLRMyQj4vftHcWTTq/XI06E0VYcj2kdsM0jDhdi010NJwT9Ebu/uSOYiCjtF5/9FqV4R3O35BhKlN7N2cl8//DtgmiSo4RbKlu8zy+vNbSjR9ZpRNIbUzqbZ64LA2iWMjrsPUPXhtihQlwLQ24eNCq9ZpF8jy1bZx7f2jz+U4qqhYwQ6dCi19CrWtrySCApty6qA2Wq4jse7fGUkBrg9jHHSfZUTQ2qONi/fvWSi75DXSu4qlRo7TRMreHXr3+BK5Fv+3CL413Qm1hsvxPG6Ou//yfu3Rz1xTXRUTDwHA8Z/aFD3mbkMpXeZAfe/OwNh2JPJmVp/L5PXSiUTYaanwI3DhKR16Z35MqSs+0Vly+EIdPUmsY6QlhTS/q3y/EZWRVh1APCVhho+/2Rr0bwH9QRlUQ5B3rLzsqoyVHlO46+zrktEtooJH+S/Jy+i/vqSGfodJZA6Z1bNVlqovin7zeTUlpjzaQqUrbHiFxC6/uDGaBgGDXzjQDtYNYExYSXl89ZfyMuvNA4YF9YrBdzlqVw8AxqrNEEy3XITHGOlaCi9eGxyhhnsnVKa1HUHNPoY0nB7GAyQVM6tHh7Mt84TtA6MeceY7Q4otgdCWUq3c7WNO4Oe37BueyTWyUlpHA+8cktcdEsd0t2i5qpqmMNxDtOWOEsW2xTJ5U5YW/aZ/HtgaKzaBSxVxbzGUbT8f2xoB2JZ+uslDw6jazu73a8fxBRVRVtGU9t/v2Xb/jlhXz+9ogSqXTDES/OxaVw9tkb2loha1JyyTH7zHewC435t1/hDMX6VFXD7ulA/fhIT7aamUZNXhWUXoJ5JvZJuTmwPeqYnkcuEbjLb2/pqtP9cL9J2GR7JpIMPK9srsYO/TfP2Mj+WfXYcD3sEYxnzHSx76KwoQ5iAiejJ0UDvlN2bOMM31QoYnH2krsHTPZMg884l6C0xtcoEpvzyUsaR0aqf3hP2+oMPJPv3wlut3J6SlP45+MTMObT+DQ+jU/j0/gXO34yEjQp0TpxTzo1dIaCmjVUoZSguVDp0aPOVd7thdfimgHKa4/0e5NOyoXMv5+zvdxQ9Ft82aB8j8Kbnopt6xwbGV7nComhsT0e6Ms6RL+2KLY5WpsznYrUYjAdcExOQ1zHt/F0G1M2WJa5RUlJvDsyPJPp2tbjLgsJOuOH76tbAzNvaNMQXRL0jkYutqWxbRy6R+HJpW3EWdCnREftRMSg5TGlrrDZ7ck64Rm+mQwFbkY1KNdiLs6PqDIEL58RFQn9XHiyynCCbxW0lk8gibH/y/4B2ozrvkY5/AiCOdJsU96F33J9LhqZnwUOd9kH2rog/SiIWyfY1gVqcc61K561UiNutYS4XXDzTDTkf3lpc1iY/PXTHFWy93x8X38+Gmpu8oLyysFIpShonTL2GubWS4a18PrdnsXQHTEeT0jOxR6YpUM6evCkc+NIAoGyxo0LVn+sWQbiHTOv0eOGwbNLnIkV8/hbAAAgAElEQVQIty1SmmZHmqS4hgRtKCZF07FebzgrThlCABy9wtRtpsOATu6Jz69nZJsIT2v4+QuRWZhv5hzzlKCnMOwJrzrbRbRRye3bOxZ3MtLqSpQw4+3f/S1xLmoVg8DB6QfMnPwHzknfHaDXCdU+5meS4abRdcIuI85TknR9MtdOAqe2hYvXgGpE9H2ZqipjmrstX833vAjEepe97znGOYU7ZyAz17bnMg4sTGNOUYi0WbHN6M08Pny3pR6KOma4b5kUDaWT884VLTFeOyUJG6pVxYtLsS+64siHxR+40n99Ml9fRgZu1+A3LUVZU8oUeRl3tHjUrUUnW6Jay2Q0C7CCAYVUG2nrjCw6ktUVrmxX6mqPduKjOzW2XLN9HmH3fBzLJdxJRqcLF62EaL2jk7yj48DHYoryI21hmm5TDKTaRONweDqytSCU6hVZq/D5ruVe3UApzk9+VCnNlkGSk8nn3e51yoFCEeqYMhtSpB6ZWnPuTPjTXkQ9m0PN6mlOZo+pByKro459VqpCXO24lOnAKh/wI7wfvH+cs1qJ93kxtLgYjfjs4hnJUWRqSgos3QUjR7bd0oU7nOE5dtAnkj22sdIQ6Ba9qzdUqphbFR9QuwLn5ZiXkpQkyddsqooicDE0MbflPOK5p5JrBquFSOFvViuU8rRPMAlrXF9HkyTtnddQBRWHcMdhJ+zWrD9CsUuKIkZp5He4Jv0clu9usSXPbGAaBPaQtpew/FZk/CbDjp/plzz3GgLZLN84Jarbx0H9AZMy65lsshpVLal0sRGW7077XP98/OQl2LNcfKmCcGxbRqbLOjMI+sI49UZ9sjRj1L8mkhfAIdsTlxmDV1POJEFxbJhYXHNYPTE+F4dz0hsTDPqkakshFaS/WpUUTcHu6ZZAEmQ3HvTTFkyVKJG1lOEE/0ek2ltdJ29TolyExllRUdY6VatiSSmQTRixzXYUnY/fE4dx6JkMJg4kJbud7Fc63NLrVVz2+ugyDXl8SGnTmsCc0smaSNXk6HVJrRRMZI9MZ0KXJPhqgOVK0u/iFBGY5Aah6bCcCyP75dlfcfPvbfb3kJriABhdjuUPWaU5xtcizVO/sDnuF8TlA1EualP9iYu1TBnaJj1TrJmbqszb77CaEaokvHYGKul3Bf5EYTAQae39LuTt9ws2ZoJZC2McHE7RrK+GDolZ0x5CNIlSGx4t4m5H2nzg3BWn2TMVLH3IYakyk3vdGzjouwNWr2P/JA7ZNEwxrAHnn1/ysPuI8Nsxen7F6y+n9EzhMD1W99yHC8wuY78Sl7k19bE8ly4seX84ZWABGD6/5Bg9UsYRimTuWa53YML5bIAzEHvo1flLmrBifnuH8kw8Q904PB3mPC5WPD2I778ejzC0EenBop99RBq6nI1GGEofRwIPNK9lvl5QFiWGlHAqw5QkPZKUO24/7E7men0pLjfft+lqF0cJiSLxucCN2bktprelqcRh76oBatUQbDIKW6SvPn/RYulTHG9I85kwbvOHJ/J3XzMY3uAOxV583L6nyGOGnctYpk0dc4aZHdD0Hoonzs9+pWN/PuDwI+jFjyTgut7QFjGeplFJ8gmUDkVTSJwcuyc2QH8ywndNUrXAPJfOQllQn6so5xbr95KBxlDpX7s0xwNhI1KkpmehdDVlXdEU4hKIty6+pVCFFa00Y2UVo3YNinGKDi31FrMR76RUMsxznz5T4oWsdRUd24lJ4+vYssbcTi8ZeS27YgemTEP+omAYN4zGHXkhmWAGCk5n0Xgec6kS/7BYcWwsHKNHKQFz9mTE0DNQvI5WrhlXOlPl9Ba0xibtUZIWqBZKbXC7Dckb2cNp+tQ9E18/o7GFo3FIc0zNBk0lUaSijenQFhY3r87YS8ALSknPD/jyYoCfC7vw/qnmqf5AUuV81Ca4wKbnwcOhoIvE//aVlGp3et4028INBpzPxH73jia2CavNjs6SmpL9CY2jEEYdplTm6bnnOM8Dig8Rd5JOb3zW5/LzZ9Qbm42kx5z5M/63LwbMehPaQuyLdAeOF9DEObVEl7989gIzPpIULUEg9t79w2kN/s/HT16CL26uOR8Ig2UpMbcPGk5g8fzlDQBR2Qp+zWiHVovLw3Uc6rqi1hRe/VrUdOJXLugl99/anEtx04Y+RZWxT49MhLNMWGRkh0c2+Y5OemMTw8efnXHWBcSluCyMKkH/EWVHVTfJjY5ERmlFVKH6Fo2ikEmjFXUhZWSSmRrRR+mjY4M3sLC9IdFWMg8kGVo94nKqY8im3aKEqtQxjS0HKS0y1S2GffBclUzWRJRCRy1qLBJUyfBvWKeXdqdVKLXPrhWf2W83TG7+I4O/6igl76oatZhjl2az5q4Sm0T5VsMeFvx2+HOWkt29anO0J5PcfcSXihVeM+S1/iW1nzCVCMf/5V/f8E0ZUh4tgqkszic51kuTq3ZIKb/vyT1tOzhGa2oLulaDkWza9TvypGHaG6FJ/bfnn79hYtnkB4tS+UjBVaGpNslqhRaL573XAz63r+hsh76kqnKuM652BsvbJepARExhveT5cMSToVMVstFeaamTkrIMUZVTowfg6wahVtEmGp4rajWmYaD3ezQM2cp6UGA51KpHZvocJQnDrshYRSFRvqeUgI9GKWhNg1o3KBF7LNQSBrrOu6/fgSYO2+BiykE1KCjQkTB/raOpNI5JRfUjDlEqpcOq3QOfDToa1WH74QMAmzIhqxuCvk4nUTDp9oA/Djj3rqgTKdf0YcfL6ec0wy3t34o9O3JTHOMV69WKWBfv+KK22Ok1B8XCruX6KHvyrMVULTYLKVP2wkeZOyyaU1mtiVRzGPRt1knLwypDlxRsnjMgzhMc00bXhF2o2gzN6BOVS2oJhZ99OQEzJc1LukDsO0PxabsjFDmJrKe6VUmnluyjJ1pJ16aYKbQ209kUvxWXSLi6oze2wTiVLTt3pxwz8X2VamINLNzO5+P9ng0bTLukaBVuFUkvto95bs9w/HOKVOIMDDhaE1o1ZyWzX1rS4lg1ceFS1GId2yHk6w325YDBmaSFdBx2mUln98gmUi800fGfn9oy0+nhSaFltQVDVTDrikaenep6hmubTIcGnqyJ9qfP6KqA2g2IduI9jR2FMmjIyghbF3+La4/tNuTbas1HKufNNqbMFQzNYb0V567JCgxnCus1lkSz2tYYtbb4S7Uq0zBJm4pBTzzLyBzQpRnl2TlNJ9bDfjHljHMezQ3y0fDPJ6TNGNV6z+sLUYuu65DnWkdqVZhnYs5v+g21XVP5KeOhcCDOtd9g6gV//P2fKGUAcnYxQgnH5NkT2VbsqcPVj3MLfxw/eQm6dUVlSSow/yWufiTWFPKPCjR5jWqamJ5KKi+UQDVJsoTzkcJB9rCBQqm6jC8m2FNhjJKwxmwNbDv7wVMIdJvZJCBwTLpGcj2uC9xBBqZFi+xVSWLs5kdYIVITfPcHaHnfmdC6Q6I6JvkooJvb6GZBT/XwZRqtsHT6QY/9ZkkgyWE1e4Cm6wx9n05K/1izM6qw4lA25FsRpu9GEzzNRlcr0o3wUEqAvslkatCXbBuNfYq2DBqbiVuySCSE2htStnsO73Z8sxCpq3I85Vzto/3S5+VbYYzW1YbxzmLy2TNKUxDgGmHAtd+gtFuUUPxmptRMFRu1cdE14d3+73//95T3CnZgYG6EBZi/3dMfFDx/0WN1FJv9+fiUL7JLUxqvYehmzBzhudRdhoNGqVgUUjuwTQ7oF7/CVLZU78Vz702b0V6hOpggo5l5mhImT+zaHbol2xyOO8JlSnlcssnF9127ZyiOTtFFDGUkoHMJbcTGLbk4+3G9sPXTI7qv0fgOTSMMRZh0eFpL5apoezG3tukwTYu2glBKwbilTvm4wEhNZkPhVJRKjtI2HPKCppMQd2NMrts0akJPAsYmQ49823JYb9Bc8TfFzvHHKmkRkGinRm8zFReDNm+ZHxSm1RN//fv/D4DLQmX2pk97r+JLZ8pUbIqHHQ+DDOQee/fN93w4f8ez8DdYEvlcGT2OaUi2nBPOxZl59oVNL/slm+gtaSvT3rHBIVoRdDfwWhrL30P4Zsduc5r+So/CCHRaTRJllAmotURbGw6rdUQ/sHA8cQFsoi2mNcQ2LUZTcRY9V2M+X5KmOejynWgdx7bEnKh4MrsUpwl1GGPZBu5IAjnKjnqfUWsRrSRoVosKHcjC07NmWQG2/NzhkOFZPsG0oZS/q28r4q4h1vc4pngn5WpFFK6w0pwiklqEfQer2JFHBbXcA97UIlc9vtd9JjI12aYTSq+j1mcUrjgryqTHNi+YLzK0TMpfdQbl4keQ2Jt30EpEu95QZFsW327RpMm+7A24GF9ibyCVWRvtOMf3VWa2xn4pZJ7M2ZRXz2cYlsfi94KB5sPdt+zmW+Z2wy++FKwqo2mfurugbsGW4tB/vH9Hl27ZFQXzg1iLsNB/lJFnu51zMVPo2r5ci4KwWtDrOoa2CIa8vUmcv8dW9lALsIrf3zFtKuwy59kLcY69yUs+v5zxcP87IsTnvN6INI/Ji5JK+jivfQ9jMqZIY373T98BYHQW8W7LvkjoVIm6la0S/63xCRjzaXwan8an8Wn8ix0/GQk+bUPcTva4pA2KWZKtM/5Bck4qZo8KjeuXr2lkm8M6yoibkGa/oZFpxMf5GqPT6RyLrSTFdc4CLnsT9D0/5KDzrqXvjRkbB2Ip7ImeUB5yCr0ilWCMnjGk2p6CC1THwrAdXFnOWiVb8syh7BQCXXxfpLtkqobV0zFb6bnGYDc2UaljS2LbnmlhoOAmKjkCLLGc33F2OeEYHokkH96Zo6MFFo1i0x1EtNXXLAytQLN6mLKHafvhm5P5FsTkzQhzJBkftlvc5Rnf7QpSWYt1w5Zuck59+J5xT0RnVaizTEvW32xo+yKq+vmrS9qi4OLiku3XIiL9+799j/dFzdngl7y/F+9La0KKTYMZeXSqaIzvIp1aXfOkxvRNkXJeHL49ma9iVqRvH2ivSg7SfzKsAWpekkdrylws5AKYGCvSJqI1hTdmn8NusyQkxpXpkbQpiB/eknkGL8+kAkdd0hgbmkzDGgoPui0MtGqE23fZlRJUU9hovs+0c+lLEdC/HL5v0PgqRqaz+CAil6SuOL8IGFkFXSUi4f0h5s3PB+RlyXIh6q59d8jAHWFdFtztxTsJVwvCbYrruLhjkSF5/vyCKDmw2WZcSqL1Spvg+w5+f08sCdTPz4fo1iWKuWWz+lgT/K+1Cm0lIuGwU5hpDVlP5cVQAFT8vOFstcXq6eiyIb38/kDb1JTPDKxIeLp+qmKvO5bRH2lr8e5Ux2Set+zyt/SkukhquDi2QhlDLHslzaHGQH1Dp0Ts9uJzxkwhjnpY56fp5lD+32NYcMgbXNWllaTq83XIPqlYZBGfX4iosnV0HnePDEYeKeJZe3HL6nCP0qnss1TupxZr1seqO1rJzxv0LLKqQulyOnkuGq3GUhWUOqGT/WXHY4yleoTlKQjt0DRYiizttC2tWVE3FpOxOHtpkOLUOUE9pZUADdXNwdco45J5LNP1lQZpzM61MWXN6TwPKC0bzfH5XkqR1eMKjSvyvoOifZT5qchjg6jLGUjVnXAfYvROpZTs4ZT+maxXLndU4S3LouZsJHvfooR4ec9DuGPSE+1MTVRSeTo9tWYmyzAz16Pd5CzXH9jI7JK5P+AFGoFvkO1FdOipIwJvSp6klI7AbQz8DfPHA67uMroQ0XG8aMjTAtp/bh8yy6YaNChS+Ds/tNRFRZ5aDMayNeN4S/JhjjZ0KTQBVkkWA/rnn/FvX1/x2ctfis9ZLVG3ZTq0eW2KM7B2OpSyZX34J1rJnzvpTRiqLo7uY0kmoWj5gG6O6fVvuDXF+Sp7p6LQfz5+8hLcRia5THtYno0ZVTzrObidMPYf4gW+P8PwGnxTXIxxDOawJk40lFo2mfd09M7i7vGORP5kl59hjDTaaM/lROZstY4PVkwXpeiN2EyBqrNP9qj9AruSxcNiSXa/OZnvaHLBtgxpNKlQrPlkVU6cAzId2XUuRZThWxa9kTBafcOgPupUSUUVS7WB+kjPUUm0ZxzfiQO/OKZcXVh4popriznXSomuzaDM8GTT/9iBIooJwxIzEilct3/aEDvOPMxpgHEnLpTfLZ9QfIf+6IaRPCTfLR4YPK355a+veX4m0nLvvv6ab+9C1IHGVpJqq22K5d/g1HAngRye5eJlFrviQHor6YxGI3r9c8oyx5SKz8FnClo1Y+avMKUiee9HWu+yKiToF2RthSmRV4fyW2xMtJHHzUyi4NSOrx7e0XUdZSzW6bPujFiJcO2cUhqjrJzTSzPOen2eDcTaPnz/gYn9DPXLDarcu0ljUVkZRmsz8IWxXBUp/cMMxynI8lOgCUCjtoSrAss0UXsijdarwfVMVMVm/JlIzUdhja5NiaOcWIKqFNejrTqO2Zr1vUgtHaMIDQVHUUi2EvQ1mxLGKWl24GEvDKpDg67NcM5e40jNufS4ou46DtsDbu9U+un2g1if6cgltTsmzb/hsxuZ1m7WWO8NqvzIQKK19+cj0uWOfqdTe8JQjL01m/MJ1WLJc1eyCw1LXm+OVG2fTAJ38vmOeNhS6iaqJFDu0gpLe0B98dkPRjm2oU5eMZTKAH8+NpIE4FhmOLaF67Z4ntg0yWbHXXHA6I+pNPE+87Kk/v/Ze5OfXZJtveuXkZF95tt/7d67aledW6e5jQ3iMkSWYMoACYsZAyMkZFli5CGSBxYGIQEDJA8R/AMwYoRkT0AId2DOuXDrXp86tbuvfdvsm8hIBhG7OHXecs3R2TF828jIyLVirfWs5xE5ibPmaEsJvU5xmoaJiUF/rM937JqK60XGyRroeZqgY8nu+YgzWVTqKLlMHD48V9xkZr5SjziuYizPgRBDX6Inc/3x1QVl37GUgs4WxYKtYDk6NMMjjnVkydUrkAN9NZEoM+f5MkUve/J+ZGvle3jporoIN5N4lg0nkkucQ0WQhgRWmiqaC/aNpDoccO7N89MOBWF0DmeNg+V3WpQkOYvZT3HVgJtYqr9XXxH4HmM5Z7QcdsdjTjmemE03RJac48Pbb+n6jsETWCUppBR4KoDJZVuae3sqjmwWl5A51IOx0dKbMV+n3D08ozBOpnc18nKFevj+fN3Ipewy7p+N/VwsFzhqi24HVlbFwbv5gqHP8CK4t0CbaidwXobI9QXqyv7H+x7PE+RBys3a3NuHrmYqDmzvnhksmEe/qFEPKf4+4vLWpE1lfmRfu7SNx9cPlgKT80PGb48fb5GoTwiL7uqridOxIQ0GbmztQ40QBqD2z9xZUMhwavnN41tm2uNfsbWa5XTFXimyeEZgaYrungs68R6hQp4bs6LLbM1ltERPE53lA9SHgrItWewdXMsS0ziKqjpHKI2txNlJytwY96u1RPcCUXQMjlmIVIbcbCT+OCFqs5hNO9BrF71z2NsHL3VcFrMLBmdLY5GFt+GGvNFMjWa03HyPUuEVO+SkWVmYdzNFpNmGWLd0locwDs5vRJCtiNs1d5N574+/vOH2p69Q1xuGJ3N9kbhiGXj8/PIPaSxdUZpvSKVChpKdRbc9/5NnvvjTGW8rj/3WHFIu47/KxTpFP605TmZD6GhClgXvDiXxtbkup1zxOi4ZtOa1NlHVF+vz6OrF7cBT2+ALjeOZ+7g4hNTtIxdpxkVq9oruFry6PXDXjyS3FkU4CgIGVtkKb2kMY3R1Rf5rwbBStPaQ8uonc7wUoutXdA8mUqsvIoppIt+1OL1xlmFR0mweSE4ejXPebAyQ5zlV25DNv+LCss9IPRL5kiFN0J3Zx4tU43vCZiJsG04U8VBLdsWRtW3VuFo6tJ2Lq3w86yz12BM4mjBywQKDAjUx+SPZJAksYrYaRrpjweAMTNO5DJiw/zHoDUXXE1y7yMEABdZ9jB+uOfy6oF2bNZF+ysuLCbnckAnjVLfiM26FRxd7BJH533rbIi4zVvIvqS1rUhVPpF3EQy+JbNokaRNOt2t+8sWcfWMyDncK+mnPsDjfu0fL/OSuIwblk28bfGn+8+oipfQ7RJIwWqBZNWqcSNJsJ6LRXP/lTYKqA9qxZ7SmaNe0PN89kjk9gc0u3R0OxDok28yItFWSCV2mdiI/HugtuDKUHpmj6HTL7w7VagbXAsZuB7yiR7kSYaPXjBE2V/AXPb4lzCCYMU4l92OL3pg/ea8HhqhjiCXRZA/l8wve1gOEHZ+9MIePpiro8FgsfQrH7Auv9elkQ5hdc7Qo7MCHVp7v32+f3hFtTfZm/cUFl7dr4rbGsw6zcxOKruPF7BV+ZiPXYIa/ynBcwV1u7Mc37+/IFjNeTJK2sy0dOqTuK2Z9RGDrrnUl4Br0ODAEZo8pJyDIEpYq5P1HcFRzJIgSfneFg/mJ+tQye2kixsydKGRGtNF8a6PSz9wls7UmP1bMM2NfZtGCi0ufJhr5S8vKc5EIBt0xnUYOC8t53Crei5IoCpksViDufLzokuxP51z/xuzH4PXP2Z8cQr1ntTEHht0PUwt/N37UCTb5AaHNRvz2fc2wf2D1xYb5wRZ1k4Danagfd3ST2SS5m1PtTmhn4I2NGLdVQ7Ud6EaNshGe02i6SsOUcv+NiRbSP3LYbgNiXxEO5oY9lR6XYQJ+yOM33wJQOHvG6tyQZIlkKENe3Zo5KydAPH1gHDWBtMK1oU90GbD2Z2SReSiGXcfDwx7HbfAtuqs+lXjrgCof+GCFawM3oj4dCTYz4tQYiigaqGqFO3lsZmY53a6kVQPzpY9v2xVc97yY/GL2R7TxiX/jT/5Ns3bjib2YiAaNc2kisjQE7bvcPT2yvbNgofcN6avX/GtfvCDDXNe3/+wf8sv/reAXmw2Ojfoe9Hvcw4rxpPBvzedmo89OrRmrLVluHlh56XDf9PzVeMbP/9Rc12e3X53NdxAXtPUB96pnszQOpK9S9h+2HIMt7q/NOrV6xV/58pLIPSADs55/kGn2lzcUf3nH0RIDl6ecJIAL6dBZlF58kXJ3uCd+7Gkqs2aVowjihLruSKyEz/zKZa9chpuE1DkHbgAEjiBLL3g5m7OxvVpygkNRI3rBKTT78zqK+cXlZ2jR8GzFU/enR4ryX/D08C1tbU78X335JVM6cniqkRb2rsaG0UuNRmViAV6XV2gdMdRHdu9MqlKEmk5oRN1R1+fSOadnc63agypweLrTvBa2nShK+FXwlmEW83wy/zvrDlThjJdFw+7aRKX7ziFxlhx9h3BvJZJyj+5CEcQ3qBfGkHndwEN7BCZiYYzW83hgtb/g7a9a7teWnzMOqcsRefyBRjZt2ZFOksf6mWkckTbb4U8Osfbw3IDBEkq3QuA54PkTC0tcHrgDte7oO4Gy7QZ9WYHuGQjQH9Pmx4rLLMTtx++oCQPXp5s6ruYp89i2MB12PD81ONW5U3lSitiGL92pQ40pqnzPaMVi42DO6cOedu2QhKndPwmnk0JsOprCIBLL/kgUx+jYRVtn2V38BPe0JxANYrItRi+vEKphHAKOrdnczpRzEjXZbYjvmkyS1490vwu1BMbDe0ZLJRgEMXGlEV5qiLWB4qBgMSebZdzYskHsOjTOO7r7v+DDs0lXPj0+cCgygj/8E8KltW1yYNXEiFgiAyv1FcA+H+iqBmGFqxU9u2pgmBLc2MwxTGLa4dyWhZMgXUpCq2N4ahrSm1tUfuT0rbkfzVeaxcVn+O5bbkIz59aHt6eKtD5wsmwzD2PE1U++ILjO6CyidYw1roKXf/QTpjfmc6c4ZVU6dNLBsYfNt48tz08Nd09b7i2g8bg9Rzf/9vgEjPk0Po1P49P4NH5vx49Ggo9//jXJlTndne5h6mum/2dPHthwdOYyjVfIUJBY3sz9oSYSGlXWfHMyJ9SnU85m8TmqrVA2NMav6CpwnYlrKzrZPD8x9S4ilPSBPY3onm1Zk3jxd7JEXTWSeOen/2U4w7vZsN+Zk/vTsMPVktOupivNKXB+cUE4KrrrGaOlWqjbA+X+G3oHXKuEoLue8pjTtA77gzl5RLrG8VZMpY/r2GjmfU7RHgjCid1oTne3vktNyyAc4sycXNPpvDgbJidKnZFemrXrtjHd10/8r798x8IW019vUj48f8Pq+g/59n//J2Ye86+4Bn4tTzi2LFEXXyLdnn/+f50oC9vmsLgmPq54L1tWtrn/vutQ5bd4yQpl6UHjsWfsA/qm5M17SwI9OyfJja9rIpkSLnxEYNZktRAcX19yPSmEY+5ZrAa+/nDHAoEtMXLXKRbXMX9e/IZqbz439DnrYOI4eGhhXmuOJzoO5LXDYLk9r6cMpSWB1Pj21JyFc3zlIhNNcF5SAeBquUSEC0bd0VlC8imOCPyYulKknlVfv5jjeANZtuTDvYncyupIJjL81OfZ9pj+6ts3xPMleogR9tQqmhl+GJLMU1pLAl3II6PsGMYGJzJ7bKLHH0aEr7lIzmuCmxdmoabJ4VWbcHnpcGxN5H90c/ZvwJMF0Qub0ixchudnSu8l4cH8XnAN+ZsT+nbk8FENpa8R72rUouG5NFFEx4l2WJGmE//izmZh9JK/CApGd4ksTA209Ffkfsx4PJ9vsTPfa4Ocqg5IHZfRiiDXboLnugSDIrP1zzQOeDydiP2eykb4b44Tz8eO5WzOYWvWc18eYBIMpWZMzY198eKagAI6hf7IVhJKdNPhiAxL5kJxPKJ1xzo778n9ize/ZGYJpFcvVkxdjZpcltIKWjuSMfPp/Wv8xDw/QkiixcTUzUkzs+6XfcShzJm0RyNs+UNXBPFIryceLMBnOj7hRAG5VOwG8yzJcktNTVctiULzua7z6dxzIE8Qr8hsP2V+Kjk4AXPfJ7AtZv19ztOu5XK1oO1MxPOoS/LyHq+XpEubqaKnrxXPD0+4k+8hIPQAACAASURBVLHlgxSUqsZvJJ/Z9L9OE/LTPUNZ09oWpufKY3QEzixlae3206FGxyG/m2HsG48xjnj+WBMcJpxNxk0Yk/gmNXuqnvnscsaIw2jBTJ0umE8h89WM0JasvinvcQ/vyPQt1aV57f3bXxOOJc5hwSDMc/alP+Pb3SNs3/OuML7mXeVw2Cm8KMT9GGEP58Qfvz1+1AmefvMXdJVVeAivieMlbhLQfWR3bx3EtsJNrxhtM7Z33DErAT9ktTI3cZ4EyB4eypLMood4HpiWAxcXAelkLqDdVcg5MHhoawAGXTMee943v6RvzGbazASef57ySJIQN9Z8c28uvik1WTxjnmqebLG7PA6gFHJqua9Nyuju3QP39yVD3bOwBLWXi5eEjWT/dGDlmY0SJoKEANn2dLbxdnfYM48TsknhWOSivpyTxHM84bKwEkb+D8Tc//TP/hk/9VLerk0of9wrmvUa9w3sPPMF/2lHVSTU9ROO7bk6HL9mW6x5+LMTN1Zyaf3qD3is9wjxiOv9CQB5dGS9fMHPrrPvWBP6J83yyxrVhahn2xP3esWSlFZ84NfPf27W7h+dkxB3Q0GhTqyPGem1cfjycsnNskIdItYbM7/iVBOfJgYP0rV5wJ/Ugbd/eUdxOFDbA4S7VPTpnDdjx41FkCXNDYtlxPvDI9q2DvahJpMCnb3AG4zxzf4wYXwz0HkKVf5wTXCdRPRhwtBoKksCsL5eoByfqKwZLDNImT/x9O2ECo60rT3c5DV18wHXkXj2Xmw/lMzbicVNRmINdFM+0ewk8Tqm+1ib6WC2DvAuZmirQNEUBwbZs7lYUCwt+fv//P/N9Wc/tbR++5G5P6dUT+xKQ5jg7gQHT+KuexaOcZbKec/B+ZxM7PFsz+xOOIwipd7/JXVuDN7+7kgSFNy3F0RHqyf3ekksM8q5B+pjretIkH1BPHvJjWecxdcBjJ4D3vkpo7AsR95qxueLL7jIrtlYlZdjPXIce7wmwA+sk0lSZLwhkiGRVaAfPUEyhYSex0cJvziac9dUhBIuZiZVGYwlrnQR3UBg0aEcDxS7PXVX0wp7YOtPbFYxmTh3Ks7Bhc/M/+b7hlXm0cgLfCv3JrIFF7HDaSzY7cw6rXwXpEMRTCSJRR+6cCxq5osIEZiU3lOzpehbdFGhLAhkiF/g1Yp3dz2jTSVGciBQGp3uEZ5Jrzqi4CE/T4d6fga2xtpPgg/FiLdwqZRxANNsZPvuyP4+IlybebzZb0FN+GNDfmccz5B6+FHMU67JO4szmKWk8ZzuUPBokbqOHHh+3NMVBSQGMJgsZowiJQ0E2bWVjps8Hk+K3+UQWs8yCBPUg7nfz17EywCqq47MOt9SSQ7TntGXFIXpb66lw+XqBU0YUlsQ1cq5Qvcu2w9bFrZeWtQP7LeKbf8NIjHrsuxnxHHE+5OgwNgexhzdSSY1sLiw/b27HybT+Dh+1Al++dmK1jb7xqeaKF2RZBkWoMW+FOTHkVTs8CxVkV+0DGVHPZzoarOzF/6c7fYNsi+5vn0NwCsnQngBPpr0Y40gErTqSFfscCxTzcZLOXk5WhRkM9ucyp6mPK9TbO/31I5Lb2sCdQPRAl5dzfEGy8qStwydx8O25sLKg3jCI/FivBcJWWgcdzJbM7YnJj2wseKen98umOKYqig/lkRIWJIJwWoZscZqxyUxy8AnChWhRYfm03leOs9/xX32rxNW5r3E7XGaDV989RPU3krL1C49DV+sUt5bqqFhGonyEb+Fp9JK2syfacqBUimm2Hx3uZxR9yN/+evfsLQIsmnYcXxecNlVoG0dZv4N3dWSi8WKz2dmEwvODcnSnzGtMuapJJgZw1seOxJxQxW1jJYDNr0K2d3EZENE8ZH/8XBCCAmzFCzqzbkNWaDodm/oCoPuaiaHZD/wYrZhl9g5jJLDIiQqHlG+MYx+0xGKDipFvDrXjwNoXQeNJi9qFpHlgzzVXG0ixiSltj/veT4Pd3eEaUJtjWLfHtHdRJbC0JhDUJkq5sGMm01GnFgEnRsj1UQlNKu1cQIXy0vWNxckSch2Z6KqXbBADorx9MC2OK9nB4UxZKfLW9zukd3BIbT8irUscLdz9OBT+lYoNNdUL070v+l4YyWc5nLFoXgLIkJYRv7iheBDucQ/vONgUaTpExymHWPR4pbm92SaUteSvpqoroxhnLpLvOkGsfoB3tulbaMIXFLRE8ceoSWkSKRLMPnkk4tnBVhTN2KTxrS5oBoNWCapfTazFFXmXNhIyxWwKUOElxBZwgxXhCxmIW1zQhf2ZCQHrtOJgY7AwjSC2CMOjfTa746DJ+keDNAkXQZ0RCROy9amKjZ6QmkYt4r3nTkAdm2AijWzdIOyzieWimMSUekB16JDtDdDDgk6cgkwtqxtjtTdQD4UYGtYdZKwnGe4rcCxvLCjPxFxbhu8dE2nbMtR/sAgffzygCfMZy+XKTeLlE60nGprF6MUJUa2bx8IUssiE8/YK03f9nih2bNpNKdXI9HtZ8ysBubXb99w6kb8+BWBZWSRMqPqPXpPU3Y201dL9HTuNrLsgpPjcd+Za505Pff7E37Tsr41a6zLEZU/oe9aXKuVeLn0qLYDTVQRWWrLom7RnaQoWrZWceRwcuidibX8grfvTHtF2zVkWUQWf8Fgg4375/e0UvL22/ds35o99VT9sNTax/Hjoro3AY4N7+vQZSjv0EBemshttbokSSeOTcNgQRuJHPFkQKsHAts3lpePTOMzulXkTwaSe3u5QY4uidvhOlbsU7bMXE0rBtzRnMZ6WSFlgxhyJlsA72NYz86lifJmwhce85kp9oYpLDcrDvuRzEoateklD9sPOEfFVWjmvIx/wiK7xp0Gnp4t12c9odqEq+wlri12H3c1cScYywndGQO1misWUnIZLohslCudkTASeK7Ho30g4x/gM1w1CdJ/pKmN5t40mxPOBa9bwcE1ny8zh90/HrhTj6jSnpTGNaPsmccVbWPm8X/+g3/M5g/mvI5veFJmnZyhQQ/PLE8D8wtjZI9uwuqwo4hSvphZ5WonJnZd1t0Ov7a9SfG5Ibm9/oo4eUb2KR+Zv6aZYntqyPWWPjPOYnP5ki+kw3NdMFlmjOwPApbPA272ktIamampOGiPIamo9uZ/u3mFO7hIuSK26au6f2R87HhMMl7E5sT32Jd4gcvy0kf/gBQNgCMyljcv6brfICzIQsaQH3Pm8ZorG83qZqRrS4SUBBZuP/kJTlRTnyJIjWGbDg3PSpH0HdhoJnYdQikYhhHHyjz54URxOtEMiker5t27A2LU1H1PdnF+gHuXWef2BPN0RhC3FFa3re4lTXti9GBmQQmBv6D45j35fqCz6NijmKHR8BwyJcZ4zJOA9mLGXs8YItvq85zQBgPeMePV2tyzvTsn/EyybyRJYdYlWmouuo429s/mG9pU8ji5HPMjiffMw8k4dyUgXl0xixJyC4Sb7nPSBWgRoY62ly4ReHVOX+fo/iPHLqTSQVcD0cdHXPQ0pwafGjVZGabjiSiJWGYT/WDRl+5ES48czgnVm71gWNrsikzpfRc1BXhHs56PYYu7d7h/ek/nmO/fTz2XwS318YHGTmbULh9US9AI3Jl5CNbyBcFyoFIhoXWCzZ3maSxxpyUiNGs8UVA8P7BMNlQny8ncFPTFuS3LkhmLlXEedZGx0hXz5URvpejGQ8ciCHCR9LnJ8uTxROAGqHnExrZ/1a5Lm+e8KXOm6aP9HNksl6TxK3ptbEA7BSSz10RJSOCb/92NHfv9iX27p7PsX8L3ieX5flDZZ3z++QX39rnwqokxbKkff0nSRfaaYvza5dET+KUVUb68ZddWOLViHG064BRQqZq2bXGVZXVyUso+ZBl5LGYma7K5usYRKbuuZr81c+pPA++POc9Nz6NFw8rs+my+vz0+AWM+jU/j0/g0Po3f2/GjkWDouUSh5UgMfNrDyCQLVlbmZz0LYB5y0WuebJ0wloLD4DN+mCNtYTIMBqqjj6cEjiUt7u8HvKUgSsbvoNBNrbiaB/j+JcVoSVzrkYt1yvu7Z2yrGzMBx/E8j16WAbP5xDK2YqTxhiQISLIOZaWETo8N6rSgiE4fxevRXs+ET1UJhLK5/2ON0j1+mDKzqbS63HE4nghdWFiamylcEMYad5KE0vyH8BQXFxmx0zFUJlJLf0BZ3nMmKPcslvZUFP2ruOEFz+NbOssHOewrgpdbLlVMd2FrTh9ammTiELh8bhv0USfcYUa92yMCA+7wxxVeAMHLGUcr5Hq7VgTZjD+ex2RrkzOf9RW3nyW8TF1i2yf5A6QbMJPM459y43oczEET+eGJQWzYx3Nma3OC9mdX9LUi7zucwNYOD4q7emT12ZLCtgPU4YaN3zN9u8T5K+aEHxQbRCxQ7hxlFdiX/QXVa5c0X+AFFkQ0RczXLymrHHH44XTHqECqntvVGqc3+8X1Z0SiRg2KqbPp5bakz6ARHa4FEJ2ckce3LeXYU59MBF5pgZQp210OvY0qMo86GIhwoOjt5xqEMyGalsEyEOnRQVUt/QjR7Dx92wtzb4Mo5GnK2b454PY2sjoI8vGI206U7scUdk+w86ligWuBII0KeVe0rKMjoW1Peq4jIg3h0se5M3Mu05akmkg3AVNq5rIMG1QT4x99lC1gp77LLpnxhXduJtaZbTnyY8QUIgUM9j+ZfIax4eXsioWNqrq+xx87noucqbOSPlOAQtC3A1Q2Eu4G3EkTxxm+zYbkdY6eTvjBRG+J+puypG8K/HlAcTSGIQgEYTJ895nfHm13ILBtXLJ3UMyI5YHC9r+NHyJ051CNBd1g9pjnLSjKI3QjsjJr7Lgj8ykimwdggVu1eiBRIYQex0dTK80bl7bv6JsK17N8mq3E72r06Y7eAt/ydyec5Lzm6kwL1pm5NzfzEF0XpPLI1Ji5PZYd065jFo7owErH6ZFomVLiUZ/MGhyrin7oyAcftbP22NX4KmQIjoytxTHkE40/o9nCaLMIx6KlyWsEHq21t4Ps2Vye9xC/fe7x4veo9iMJwBavKkhZMdRmH9+NOc+HigqBsincLxclj+WE3wn2R1MnHAcfKZdIRxAIs+46aBlODqf+RGjrrh/eVmwPOc6ocTfGILXONaPa8lyXVK2xvS9nF2fz/f5aT+eM69+96Tj/8jc/jU/j0/g0Po1P4/8HY/ohhgo7PqVDP41P49P4ND6N39vxyQl+Gp/Gp/FpfBq/t+OTE/w0Po1P49P4NH5vx48CY/6rv/klX37xCwC8+Zy2aDnlNU1tCqclDtHg8sXPfvYdn1w7GoaDsW+IF6awO3mSOPTItydqW7SeLxaMDezEQGGVKsLFnMgVSARam+KnHHPiNCGKUvb7XwNw/+03dPWW//q/e/+9+f47//3/wbffvqGzYpRe6LEJIqapZTJSt+RFB3LkUPXk700RO1mnfLHa4OkaPNM305Yd1VAQhYLLF6aFYTNfEoqaiZidZSBRk88kR1bZFUlqwAJ7rSGAsVMUjZVwqir+4b//2ffm+3f+s/+Rrqnpe8sJ2ozI2GWaBhJpmUb6HN31tO2Rj/SjgR8xu1ig+4Z2MEVxNTiM7oSeXHxpCsJl1zKpnrGF0AreetJlCn084X+nY+rhMCqFagaE7Sd0g4y/83f/g+/N97/8u/+AYjzQdT2x7U27vrjg8XDi1FQ0lkUl9iTt+wd2QYdvBTi1lohuYJ6mzK8sZLw6EIYBokrI24/rWeJHPrtDSyvsd/eKIoDNKkRJ08Iw5iORUzJb3jKzrRn/yX/xN74337/59/4+VbVFDhNRZq4rDDXr69fk7TOHvSVQn3oSJeg7TWblMyIvoi62uIOkshyjTeeTuuBlGt/S1GwPOZGSrK6WCMuJ6johruPRT7A7mQbl0PVZhCGeH5GlZo/9rb/+734317/93/xHACyvXjBP1zRlRV4aAIlDz0LOcCbJzjb9J8uMyPEJY0FvwTyO5xFIj9ifUZ3M5/qhgakjjj0Gz4AbRKFwpSBvJrQ296yqG6QY8KIQ3yp6aFcz5Sd+9X//Gf/t3/ufvre2//R/+A/NZ6aYqmhptj6NVakfRgcmhStDrm4MB+2peuage6pTRWjNjlKaptuCB7aDiakRXP/Ba6a+4tEyfTSjxNXg1wODJYO5uohYJRIvuUXVZo13uy2Ph28QMudv/6f/6HvzfXXxb7G2BO8ol0EoLtIMYdXrx2FkcF3SWNBacoTEW3Jxe0UoXVJtAXN6pKtLplNBY9mlCDMc12PUPkNzsN8VIAWxyHAd83xX/Za8Hil2Jb39bjFVVHeP/Kb75ffm+9f+7f8YR1qVl2iBnlqUhqVtdZqiie2hoFc9kZWJcxBEwqM4Hsh7g/pLs5f4YmDQCisagyvATWY877aEVuDZyzymToEImHxrAxxoipKL5RWJb748ti3rbMPf/8//1vfm++/99b9GdLPBt0tyOpVczQOejzUiMvvCHxwCf046B6waSj+2zOMZcZjiWnWZKA0Yiy1leUQpA97zPY9VGNF7muetuWdecIHjQDmWDLbFxulhEgNqmih7u8+aEz82ftQJLl68xo0MsmnfezQnhSNv0ZZlwO0Vx7Fjt9NoazzHziVvOli9IM4MYuc0nNifFEWraC0hap93MLroICC2OnnzNCOip+4UV5Z94il36YeUZBETeKY/ZHalaI8p8H0n6IuRV6/WBL6VLpGSosq5dhIeDxYFNjwxFZqpblFHo0asa0V5v0EkLYFVe3C7AK/dEYYuWWx+b+kv8MKBRsW8soStye0LfGdGFgpa2z+TTg6tluzTjmZnN8/hnMp8HCpCOdK3xthJz0HiEACulX1pmxO+0+MH0PZWQcBRBO2IkpIgNsbY9QKqoaRtBrRl0OjrE25fIYOUZWzWc0CD6AniEOlao1Ur6qaia2oyyw4ylucNvH20ZUVMnwRc+Ob3ygBErokzF9eSIDtyZJYJurLFsYr2s0QyJh0MOepgexGTFvwZcioJIvPaKvARk0b4Gm37BJvoW0IWhL7kyiqr1wvB0M/JlpegzlUDAPr9lsjRjF5AY8kHek8RynfIxMGSvuB7CZMWxDOP1Do32XToOCL2E2wbK+FUwKCh10SRcdqrNMFVDt40oezhQ/oLhnLPMa/oSguzdQaeOCKcgDo6n2/7EYGalPjOEldH+N+t3QzdSiYvILR9Xd1xxIsdnCmkrc3zqBsHJwnRsUQMlqBZzJHOiUT6EFlW/XLPab+jmzqEb9GbXY0MJEkQEAjb0+o7KH8k9M77wnLb/1nmLWG8oUh6Aktp5vk+u+cTsu6oLHK3lysSz+UwdjhX5rW1XJHk79ht9zgrS+mWS7a1Q92FeNbwZr5knsSITcXeEpzPL25Rk4KmYZLm4DJJAeOcQZ/Tpt1ev2BhCSDawwN9XSF8hzQw1xqvMrQPEoV2zbMdJ0uuNhuk77B0zGsiiThtP3Cch3TVR6LxgNNeMOmG0KI+hR6pj1ucuOTaouljJE6lGH1BjFXS8G7pXl/ym6+/7wSrfcH6yiC/w0jQFhNCdzit+X0HReb5eKsFvmcddN3hCY9g6IxIKtB2z+TtQH9qabHakfGcZJVTH4/0kTlABv6CQIMzOQx7S5YQTCR+gHQc9rl5rdxV7LfnfbmbV5/x4uevmDrbezy0+GLgoiyY2UMfAkSYkoyCyrXI7GJP5HkIYobRfPflVUadKpz3La11bgKPbKbx4hjHHnpjsSJvSpbTnO9YKSuHvBgZUVy6Zj++vTvvw/zt8aNO8PL6j76bxHAYmLwbPBnh26b1MR1I+olJRGBZBLLba2o/YQw8ToW5qFq5VG6KezHndG9aH9qpIfA0r+YrIgvBFgwgHEIRUllpps4J8fw5YpwZuRpgOWgmfwX8L9+b7y8uIvKjQzy3hlKUyPzI2FV4VgQ0vX/mVL0j//CeemucaKBdws9veJFcMFpjlCUTTfnIPM0I94aRvZ4y3H7ETVZsXpnoMKhqLtYJchVy7MxGaaqa11df8vWx46DM9WrbQvK9xZ8GQn/EtawqXT+iHY2rFKOl7/KmFoRg0ArXin3Gvk/vdLiuZLAQ9EYr+qmhE+o7kVHVH3BdwXoekFrG+6ob0biMYwNWfUHICemNDG2HY2VoXH2+NY5fb+lfhVwkEZZohO3zkUL1yCjE9sQSKIVYTMRTTDoz92IdewwqYF/ucFpzWp5KhR+1EIS42jTQN8eEJvPQgcSxPTHPxycKGj7L5uS+eXhSP0YpF897ZPv2nOINIJ6n+I6DBHLXPLi6b9HlHtm6DB/11QjxZyv6YkBb7bexaPHihsCRbCwEvYsTmlYxao/Akh+EicPueATXJ9b2qD0O0A04dc7cQsaH6YCTgSdDtHve0uHaFgm392gbQRYkhFZTcpoaHKHxhwnPZirEKiGZQkZXculZ1QPXQY0hQwfCijGGU0CUXXG1FuxaqwHoDzRdTlGWXCzNd19fXzJOPX7gEQbmNTfMGEaHxfrqbL7ZzMik3RU7PC8mnC2Q2P00QHDhMuqOJytDJnDJZpdMfkmb22d701MHa9QmIl6YA/Ouf2RblTR3H/jZT74AYDGLCKSHyOb8/MascUfK87sdkZwQlqnJUwuEbImcczHMLJ3z0qooHAUctm+hrJBzy4Mcbei6nuvbF0jLjXxoBVJIRjweLDVf5qRUboKQkjY1z/ualE4cEeGci7Xh9gzaklMhkaEksr+XXayJFx3uuz2ub/aFH60ptICvvz/fV9cLZktL6TYNyGBEDBBpE9V0zUSsQmSSEduWlrzTCKGRsSa17CvOqFhfLDi4OzrboO4EHeF8hReDsjyuc+HSdANZqIiXxtFOY0OvBtryA4Ol5pNOixrPpbVOdc7F2LKw+6k/7KmLkglFbw+pV1evcLwYjebWRrnlfEmlj+wfBnZWWDofjyw9FyVdcsumdbX0OaqaUCyZW7amTnpsi4IkcgmtBmK8iFhkEb2EhWUE+/DuX5zN97fHp5rgp/FpfBqfxqfxezt+NBJ0g1fkz4b78FD1BPMI5YU0toZVjQ1O2dF40qRbAN93UFKT5wWTzTcH/oLOGdGTQ5XaGla0wBl6Q1BruSTr8gPCXeFogbbq8KJfUAwChpa4sVFF+hNG71w9erUK6KecJDb/u3E0lykUeuL+0UR9ze6B9vkd3cMTrhXmTQMPmbvo5wTZGlq38a4h7ApuV79g9+tvzVxu5oTpnCBOyHwzl9VcsIocxkbT2/pcNk1QPeA3LbPYKpA7593nIwMeLjKwlD/dEdXU4Ao8m6ZR0qUfXIZx+I76qxxO6H6k8xSeTQ/2wmMEAhni2rnJsSfwQha3K2L72ljU5HnDpDXKigBLx0XrnlEpHMvX2I7n5yMv0MzDlM2rOW/fmKb6b7snojFgDEcuZyYFR5uTbxucqWX+kbM0AkcVFJ1GV2YtxHDAa1cMQc22NKfAoa/YiAXhesPJKgv0ccLCdzi4Faq26TWlQQqKquK+/H5a/OPIfAc3EajjHtc2QE9qoGs6ajekPprfioKWIJkRhiOFJdUOihxRjRSpILaZj7l0SSKftlfYRwDP1Yg+QzsObWVedNyaodjjdCPCCu0mqQepRzi5OJynk7Sth/S1C2JkXHh4o1m7voBgaNGBIrXkxkI5HB9K/MlD2pBWxj5jPzHtFZNnruO+rUn9mHi44Wgbwx/elZzyliRJmWzUVKuISPZ47oIgNRFT1bboQZJG67P5bh9t9PEMeXVknlzjWmX5vtSM/Z7TIcftTPamjZcoryZXFdi0l3r0mcKYTgbsLcfuY3XiuDsQ4LIfzbMzFDUr4SPFJd3HlKtW4MXosePDO6sScKrwk5A4Pd+7MrolWpnrUD1IrSnrkiAwvzcy0rsdvaMZbBTVVD11eKSWEal9RkuVMwwdlQypLKF/moaEqxURAs8q3SSAn8Ycdw1PytiUalbguZfIcE5rsz9hHJE5583cIlEIS5s3NQ1uowikR9QZkx26LqNwaUrFYCPBhedx2vXkeUltSxOehKsoJEiz72yKG4RI6eOmS5K5idyGsYdpR9S3+NYrOJ2D6ypkBJ1V3GkayfADZAS6qRBFy+pzEwk/VXc8TQVtPXJl3cxi0sy9AOV0PJ9MulbPYp6LOTuxZW/LE6USNL1L1bv4lszhGYexhK+uBbUt2Ryrhs7zWG6WFCfLpKIVvivQdcPectRu3384m+9vjx9Xlvcu2XxmQ9/9nmB9zTSGqMk4RrccOIUdsm55tKTVewRuCJ07MVn1hdGpeKoq6uaArS8zn/mkkUsfO9SW+1H1krYp8RMPx4b9eamJQ8nDw44XwixImN3iy/Pex5nM2faPjL0tOu8+QN2RaIdNaELyOD6RJpJNUlNbQzaLfSJnInm6x7Nk2WsB8uWGdRQiLBNGqWD/Zsum89l7ht0g8B081RGGSzzrBL06B/8zIv2AY9Ow4gdIfYeqoOpGoo/qA45gmSQgBcoCRTrh4wYOSgY0NjUgkfhZzKAEllQEJ5RI6TBqj9oSxmbZnNhzGMeR0TrhYerpx4Gh7/CFPWjIBM+NmK0EkbSGtzl32r3OiceIPncoG3PPxOnAUfl4es3BKgb0py2OO9H1I4kFCkQXCVObwaJCC2N4Yl7TXgUMRYEW5mG8uH1FlzqcPuz5+Ki1fo+WMy70CKF54EXiIoaGfNC48odz/q04IFVAkPh0B8tBWNQ4LPGmEX001zBlHt2hIHUjUptePvkeztAjH44MwirGbxzcMGRUim5vnbEWKDFSIlgmZm5SgG4Crrye6aMoqJrwHYdJukTeec1KWVCJ9hyCOCMKA7RNr05TzCK4wBlbtOVSzHcVesxRrUNvBaZlFdOcOiY3YLAqxc+nHdXyEonm3rKNHI5bNBrpSmZrY9z1CHmp0FNFa8neqypHTCPDD+SLotCkSK/ShLxvyZZf8dSYBbuwJwAAIABJREFUtcu7Z+QgiZMVyqqUF/mJ5uTR9BUdpgbeOQly0uyn+jtQVa52BN7I6+WCiyvzLM7GjEoq6Dq68qPJUswuLpDOgPqVsUddU7BKrwi88/1we/vHdL2tickFYvaSq1caaVlfhimmObroaSTxrWhA0NKVHY0/EYzmWdFi4P1hT6ld2r0F7mQD1+sYtz2hE8tWFTro/UCYwbgza+yOE0O3JQhCHCuOi86Q8/nZfB8PD4yOOfCkQtGqCVdPTJaFqx1HusHFXU7gmO9PXsDgKCq1Yr83xm3mKJ7aHilTPOvd1OTiDy5DOTAkZh8vAp/l7JLTwz3dg7lnXuQzCsVY9ci5ma/nwch5aacbOqam4fRg3tu9bTiVA4PjsIrM9e/LCek1JMkC5Zo963pLFreS+PpL1N09APNIUdUV9akCa4+85ZKbxEN7GmVru6dOQXjBaXCobY16f6x4sYjI65yhs8pB2Tm72G+PH3WC3RjQW4SWm8xoCk1ZH1A2IlHxROw4bNvGgGEAz5uRqIGLzzc0FqF0lx/xkpIsa1nZU2ake+ZxiupKlEW8jUpQSLhMPLD1hWq7p6wK3KZi65iLuRlnLFfnpKhSai4vfaStO26bR6IhRLeSua2vyPGGRbaj3F/jXxrH1OWK3dN7erHgtY1eV9kVfq143jc4qTHQh8eKD6cjy+WGjV25q6pChxG7ek83WAVpMSGbZ2IVIoR54Ovq/my+njeihxJtEaRh7BKGLnXbo+zvu65gwEU0DR/Zq+QsxZtn9MOItZ34szlBHNA1NZU9QfdaEzoDjSoZckuE3jR0fUd1KphbdeswiBhDCKcQL7I0b/45WZA31gxqQg+CwTW/V0Q99Eua7on6YHUCGXBOBzrPQZfGKITbiS7ZEbgumVVb8H3J4XRCjR3Sqjdsx5z2sebN4/G7epUjXPLumX7y+fmVfeCHGkdDOg04/xInWDUjwqlQhcvKGgC9uSTRgqEdSRODtFu4KwInxHETisEYu5kDkZyjYgfX1mejcUnfSiJaXEvnNIieQEucZEZgWcXHviF2fLxJMVrSJYeJxB2ZREnTnj922pIse8s1KvQRSjJZ1KcafE7OgNNBJiz4KsuYopj9Nzt8y3EnpxFVtHRoho9z1hnTMDBUw3eGsW4abjZznGlksAfGZBHQtAllXxML8wx0gzF6H8mtv7e2ygLhnJ70xRWP7cDzN+bAo6YtXloShg6nk5nHFGlqLydLBS9Cc7++frulPjwhUwnCSGTdLBeEgSC5dVim5vqvVxla+ewOklVk9kleHlBthx7BsYjeeBzpJoc0Po+sNrMF2l5rLK/wNinCzalP3wKw3Cwo5ciH7ZavbszvZXJk8AQ/+2L1nY5h3ZVQSE7PBb36WLevGOYByeUSSlOfbvuJJnIQQ8BPfmGAf36UcmoUfeeSW7yEv1oSLs7nW3QVobbPUzHia4/UCygPliz72OAGKcvFNcoqybQeiD7G91w2N6aeGgmXw32JUi2blyaI2FysiCKPQIMXGpt6NVvQPG6ZJTlDbMGBw8RpyKnLZxr5kaQ84Vhsz9fXS0idlNMHM79j0SPFJeHKZT991AotORU9YXpCWzvrSsH1iz/m3W/u2bdmn3324iXVvOehv6dszP9umg7XGfCSmIeT3Weqp/U9DnfP9PZzq8WMN/mJTAhc63yj8LxG/Nvjx51gP/F0MBvnqa+ouoIgcPAtN+dQuBymnvjlEse2TZCc8OYxfVrjdMbbz/0afzqhRlgvrADoqKn6A/tDwWQd1DgNpNmSQgqc1pxG3dDnuRlYxSkGWwuNDND+uajuoTqySVyia2PcxLCifwo4VL8msdp5QiuOd/fU20dkbOZXnCrizmG+nGiPH3UMFW7YIQ8V4do8tH5e8VkcMKsdbu1BwHUGrp2eVZhyZ5fTcQVB7KKmhrUtPL91z1MIXt8gho7YapUpqVATaOkhJvP5bDbjeCxpPJfkwjj+IMkYvQDljHyk2q/xGLWLG62wakO4TU+jWuq2w3ct4svzSddLFrMQZdscPE8wOUCjqKyhGMdzJ1iqI914x4yByUqrOOWInxY4VUW9M06goUfhId0ZD8rcx9ng0PYDy2hDZkVlT8Wep0fFh+e3rCxKzQ0yEtdhlrqcBntKb4/MnBluPNHZE6TalThezFezFdvrH1aRiBY+3tgwuBDZtIpqNGW9JRUJN55V1ugq5m1M2Suckzm0eGGCCF28MeIj7evCW7JXDrWGxKbwq3rCnzSOLqn2xjgchgOhuyCioiwsj+tyTXZxhe47xvp4NtfAglEmJFOrOLoDcfhRkNal2h8pTg3xysrchCFqD5PK6ayznC8XDMeOh9+8I7Bo4CyIWNBz//5AZx2jG3o0ecnyOkHZeLvBIZx7eHL6Lj2vA4XblRzUOTr0I1rwsH1gaDt6FfFYGAeghcuLmwUKQfa5ee58d6TvW5KgpDiYzzk+XF06uLORcmv2id+PCG9G2e64+xipBx6hDlnPXjB49l5XgkKd6PcD3syaMf8FgxgQ3vnevfxsRmrLKW41R1fvaboGGdlnah2wntaU+y1NYxU4Vgs2ccpPX79kuzP/+8/fPNJLzfL1BmUPX4Hy2DYVYeCjbBoy7w64oyRLZwSZsVVRHCEiRSQvefNgIzp3jlbnQJNofsmoLG+mO3GVzZn5ER/uTQZqV9SsRgdVHGgd41CGdMn+uWOgQs7M3n54Kike9iRXl3j2APHV518SzBMCWjz7jLnDQJRE/y9779VkSZJkZ37OufvlwZIWm0b3zAALWZHdl/35u4IVGWDQs9OkqquSRQa7/Dqn5vtglonuuYl6weOkPUZmeJibm5mqHj16lL13QWgrp6rqMMoO04nQ1J44dS1aes5unkQxWl8xn8lznLYz8BK2ZUOpvuM+HImihuK2JFIooVEteJt95O32Hk8x7rf6jGP6SD4mDMr45rsKcdyzsnYECv6tsp6h3zCUAsdUjppxAZ1Nj0asyqI+NRj+n42vxJiv4+v4Or6Or+Pf7fj1nGAS46vOkcf3O5zQJpmGaK7qoBBeENYWzjwiXEnvaZfe0nkmbTewSyUseXM58PR+Ty8qFtfSu/H9Z2x3JXlQo6m6JL1z0CMH8XT4XLB5s4wIPAN9NJiE0jPu/Yi/qM7Jf/MyRo8wdIpOQVC9i2X2WKbJdifn0g0nurog/7jDuFIFm9uRIOmwvAumCm7Swwmx5zKkG978i2zi2MYul+YV0yhCU4kSpzARbkp0E/D9THrfuzxjdjmh2Bxod5K0EQznkNLQttiWhqO6AGSnjME0aLHQdNWb0PaJrx3MKqBW0QduQjfUVL2GpmphBs2iLDoMTTB20qOyAg3L6BHpA1Ul38sUJtOJhdZUVKqvm0+NbZlUZYOpKQKNfp5z7Y4N4nnHUOnEsWqW2uocmwzbcTmo6LCxNbTS5ObZc1qV7vjl9omugdKd06qOAYf7HBGEhFx8rs2Kri+Y1R1ae8RRcJMdR4xYiMGkq5RyvzZwYbW4yUCw/nKdoFlVNIPFJLSxP5Fxmgqt1xkHQavQhvng0Ok6pi7QStXgeRyITzrHomKeqFqqw0Cd5qR991l8QM8znFFgJtAfS/WtIwgFtalhGdL7rgfQsTGsDjs5h78GlU4QQU9eptSaiaZqqRwnxPUmIAws1YFiPOSUZUVa9TR7GYEnYkCrc1ytkvWMAF6G4aywhwG/UVGUE2Fdzln9cPU5d2haBtPVDaf8CeeTUIOQpQhd/2/7iEMwl+/1dNC4//iIP08wVT49a9Yci0u8pUOsoDX/MuP9j/d0xZZKkYWSqGH1Q8z9+o5M9Q99eRmAZlGfWu5yCXt13UiSLHCDkfokv8/Ci7iOprypHigU9V/XUzrb5XZzjrr4tU2tqPqe1SLalHr3SKnigHYP875ljCx01Td983GPuJ6wPsx4t5PR62NxYttUaIHO0HyCyXssw+Kn3Y52Lf9fZMKz0KQRBa3qLrNKPNyix8JmNpcQ3WFcYLjn/SVd38ZRneUvHYcu71hnKV4iz7uzrznuTwSuRzPIa3wIPJryQF3UeKmcm0h1Jl7C0l8RGDLXKToNthVDfcBV9+zCs9jVFk1RMR4VEqBnNEKg2SGWoch2Ys+zby/g//7b+dZVA7pGrNIp372IqPSA3YcN2qdcuTZy6gr0icujQi9EmfOnh0es1Q2riSQu/bfbA9l2w9JLaFUtZqULdA2OomWoVH5yMsE/2RzyN2ijQrWCDL3RiByDhWry/Gid1zz/9fhVI+jHDrGq/7u4GCn7AT/xaHUV3tYFIxaOKHFmSnmg6TDslEKA0GTofjxaPNV/IRADd3eK8LHK8CYLpmNBY8vQ3W4mdG1G/NrjeSRZRpvHgakO9myGW8vN3rYpfXm+0fvjE+WjSaiYkKcC6kKg6zEsPymN6AROgx/FPFNFwLWfMnOnxKOBE8iPuDBnJM9fw5t/4mCpYnYjJBYGUVFQ/EXm+NqrnMNRY6bXBDeSLHDMG3j/yHa7ZrhTeULr3AiOOhj8D8WPcWzJCkGrD4yq6LbLU/zEwwgjylK1M9Esyrymchw01UBXmAOj6ZAXNU0mP7rbe6x8k6EycHWFi5s6WTPSFfXnNiqu52KNBr6tY7kqYT2cE3mWM7BHWP3mirkjHZLuz/DxfYYTlWSqbdDQhujTiJPX8qjIGGmRkfcV3kywVEZAm3kYxoCZXBBNVd3doSdf7nDaFZH6PuPTiffZHXN9gR7Jv/HaXhCFOhdzl+P6y4oQzTFDc6acdgcq1X3canRmbkK+P5LuJKSne0s0syS0QgYlNh92gnEoiQuBp4qxy2LL2LdMxgqzVQn7U4UdmVi9hqacryLPmUQx8fNLjqk0KG3doPU6ehDT5uXZXDvV1klrSnBiLJzPRIZniyv665GxGtFV02NhHXCHnnabclA5oVO5QT9l+E6HbSijL6CpeyIrwLqUl0wT+IQ3lyxWz8kLyVwMYxcR6Pj2kpMyFm05MPgulXPe6qcT8ry7fkjgPbA/NsRTWTs4DoKn00cGc8KVgqn07YGHh3/iMhmJ5/K8Z5sn0q1gu3//GZY9VjNunoOwpGITwBAJGrPk8VizWsm/cR19g16PtNWc9Sj/392PtzT2wDw837s1FkLljQ7HFOOQ0VR7bOVsho5L7xkkZYNrKoi4OtKLiF2X0inCSx54tMWWqmwZevVuQuNk2HiGTefIu8KzXVLPoRsqWgVX7h4zfCMk7UscZZAuViGad3U2383ugclMfv/0UKFtH2l0gxvFwO1sm8PTnubhDka5ni9+uMYtLTZ3G4yFKsZ35iTJJfNoxuVEwoLTrGXpOnRdj6OwQE9z8QYDbVtx0CWrUtgDVVPQNEduVlKo5DKJqJtz0lxdHzGMFZeqUXVW6rwfG/QgZ6UEPdZPJcIBQw/ZqZrn0XIotBIj7T8HA7HWcEwdlhdLppdyv++3PxMHLqQHOuX4x31ApwnqvKId5brHa5/nqwXTZCTy5Dzn9vl5++vxq0aw0AYatUiRE2I7A7Z34rSRRvC0T9mXOVf2nMBUqhWaoBM1wqqxVM+52toytw2GfUmuS6myyyhicATW1KNO5Wa6K9d06chlEnHK3wKw++ORi9WSm2BJpXIOTVZiDvHZfF+tLmjSilp1i66OBeuHlJuLgOeqJ+CpSimsCtftOKhDtnANlrFPNWxxlFGptxWTOKU85Z+jHtMxaY85tbanvZLGbdYO2H1LcxwYFItwW5Zs6pSqyDBjeZE7D+cH0zVtBhqEIh/pdc3QdvTunFaRE9KnE/3TgBZOGGzpUWpWzuO2pDYSapVr7PoOV4NxdMkUCWahmwxCg9LFVzlG3xJ0liA0E0xPGa0etKFDNwWjorQPX9joN98sWPrPiVyDg5I9ClcznlsOXb3nRaZk4/SKu33OGNh4SnmmdwSL1TN++5vv8JTTQ3hLd9jRtCOxyvXplyZWGeHFglHJTe2dlngzcv092CqvczE3CA0Xz7aJo/NLGqDUB7yhRxgGBtIJChydwTIJkgSv/kTmgtUkYrvvmakj4bQWzcOeIjvx8Cj/XyoMFjczNNtFtPLQHdsMUcVcTqaEvvx/k+bAYj5Hj65wVG51IGfQPUxRfza0fz0+ZbHyesCzNPxAR1PEiG1WE4YmlhUiFPPR1xMqZ4fQGyzFIu3bCl3vefr5PRMlEeb7IY3eo3sDnfmJhRwQRz6O2+Go/GxrDOTdgB7NKZTUW9pAKGrcL/CODkelNlT1+GaINg9YKCNrpSb3mxNptuViKd+h2N5zEdjcPNfQXSWW4GS03YHf/KcYlCdv2yZTY8RcJoQzeWbC0qJIRx5OGZ0h91O6/Qm7svDCS/xAnrEi/kDxeECPz/kC603FVCnQeFqP4Wk0+57Wls/T2x6aPa5V46rn2YXO+3f/yoOlkUXScfv55z+S1js63SJSxKrNOBB4AaVREanegJ1pcBIdWt9jKcnGruzI6cjXLRtTOm6X2pzJzXkJSn5I0W1F+69sqrqhzwpI5N+8upizedxQND3PFtLwHG5P1McOr0/Qc3k+RVnTdid0w+WH/yTvj+cvF8Su4O5DSX2Sc/ODBGc24c9Dx2mvys8WE3qzJy0rLpRSkT1qFN15AHI1t1lGIboqwzA1iwjBt/MXWLZcz6p+pG8F+cYgWsj1dINLdGNJbV6gD/K79W1P3+cUWwtTqXXFxguudI2H/JY+l3n2ozUw3j9xOfOZW0o1aGx5EQpC3aVVRDVX/HpHwF81glUKw6CgtbBjECmdKOmV+sZQlxh1wWg6bA+KMWQfEWODZWtcLuWH8N0EYU/JPmYYttoQY4ameSRTj81Jeekm+DdX5JsTtw/SWGq4zFqosxRdRRq66aNp50ZlMZnTOfAmlfBl2ZU4C41o4hEMilTTbml0jYtVgqVLK61tR/woJnAs6lKeeD3qqNqSxeWUOwUtEL3E6FIsQydQSkBps2NhTmm7gT+8kZGvuFyQF490my2nXqlU1OchueMY0GuI5pOup0NkuThWSKk81MZ2qWqdUodeNefsB5Pc86j0GYOqzzQwWB8PaKP72XHROp2yb5l6c1xFI9X9lrYr6ISFNapaJdOmFxl1WWN6ig38haa6nhliehrDaU+mJNdEJXCPJsJqeLaQi+LUg6xf+lgyKGbts2iKlegcntLPZSgz/wUH4bKoc8xGXryeGxEmAcYIripXEMEl/jMDswtplYpMNTpMW51eGLT+l1Pbq+UU3fQx6h5NNRUO3Dm+6RHUFbWCqZr7lGKXMylhuZQeb3NoELWB2Tis9590Z9eYQ010dcFJlaH4hkM8dWiKjFHBiNH1FYdiwEg7TMVSavKUbVtipDXBFxosZ4V8r0Y38adXDJpHpyKNvNbYpzVGdcBVdZeR51BoHZ0T4FgS6g/GiFDTeWo7elU72Iscu1xS2xaGchbsYMSLPXZlReQpdRjbx9QHRqOHQUHnuklVNxTluSddNPJZH59sEveaJHnG0pdzW818ujEnT3vySjqupzIlCGvG2CC+kc9fJpfkjaBsYYHc257V0zRbBnOOqaT0nNrGqVy0YsHdB1Xz1WQ4zZzv7QWGJS9PTZvRFe0XUaJdvmeiapS12MNue2axRYbcF7ats280tseK8k464HfagBtE1IctHxVxR4w9gRtRFAeuVCPXQbPxHZverBlUnaDvTzCrPf0+5+GtfN/VKFglL7G9kbqRf7dLU/TJOdx8cbHAmijlq6EgjEzixQUzFUHavs7F6ws2H44IlSIIhIvpz3i9cKhT6aSJtMcQOvbUIVBX0CpY0FZHtCph9/iT/I5vHsiyA3f3W55yeZcnsU8yDzimT2zU/RUM4nOd+N/uhw66jkw5jNshxdANlm3HTgU5389ekXY9f7pNMXwpieiZU651j/tRcNzKPbVIpgSOi/Wos1I0fNHU+IHGa9unUbrSE3OgSwJ+N28II3n2juXIchZjawVZL2uZA85txV+Pr8SYr+Pr+Dq+jq/j3+341UhweXXF5klGZE07EJoC29exAuVB94KfPzzgCJ3oSuG+jeCp3LF0GppWeigz1+KY1axuIrK1glLLCt8JaEabV0qb0HACymIEKyToJX6dGjalNpDVgkRTcKAiu/zb8fOPPyJ0m0Hls6r2QLbLGfcbbNVZYncY0fQpV5fPUMID+Jc6humw3q95/Uxqgj6NgkNTYvkOYyC9lkLfo3kBP+6esP4oPb4iFFwN3xAbLrmCK9N9QVdvGYYKUSo1//3j2XwDy8GyRzoFl2S1AD3E0UyEKoAttRY3Cehsn7ySPkute+Rjz2glaCok1fyInjVNVfJJwjITNVlT49ohltK/XLgORddQH3KWgyomHQSePjKUBZaCknTrfH3d0mRvnOgnDkeVhjO9GUN8h50WiFLCKMvJa3Z2SeWCh4KWJhPmpsX9m5R75FqEgc3yesHMdni/V8oyQ098uUTrSnRVQD93NozmjDZv0D/V2Bk6WXhCq0as/st1gmV+ZLIKEZjYqv6v13Q0zcFbhvQ7mQ+rbTh8fMLSYnRDQuTdtmB9/0ikuYyqRuyU6pinFstv+YSwuJ6H6XiIusNWuY/4YsFRNyiGFjdSRCvdID/uCH0ounM4NFW0/ImfoGsmdC6VSuNOQ4fxaFM1La6qVvB8F7oF03mBM74CoL39me39R8x6h2b7ag90xFaAM5+zVOLwhe0wCgPNnHNSZCbPFaSiIzE9llMJVW3bhvxY02bn+eyr5bcA3P7rgZPT4Gc5x0DVdIURN9cOH+vDZw3a6bXH/qng9rHAfi7PSaAJogvB+FjT2vJ3PcuipMU1LhkVOcv3HJqJTpKZlJWcW3ZvMAw+tw9rriJ5PiPT42nUsPRzePyUd+gr+bw40BjLDhqBiYy23h4fyYqWdVVxX8qop7INbEOn3n/kqLgRumMw2CZWW5Cr2t9etDjJNYdjxvFJ/ux3ryvGdM/2fUbWSO3hZ6OO+33Fs5f/kb1Ctay+oDqmZ/Mt6pxnSih67HXGKCDSHVxVbmF3A5oxcjxs8Qq5Kb65fsbCi7AGqBQcZETPscNLbqZXzBeyHMTtAqo8x9E8bMUVuHt44u27/85je0BTGqtdU1B0LlXT0qmzrd/E2MN58Xk8aIjdkUMtz+yb9T03iwgaS9bCAKYDsdCx1iO+Qnle/cMNRVZRfDzQHBXBbW4zbVyeTSwC8Ul/2sUvDa4nEYXSQZ44BuvqL3SdS5+qUor9jtwO0Zw9kSq7imf/CwLakRVyMlSOqKsJEoN9XvKwlh+6ESVt90DVlcwiiWvvmpQyz7CTkUWtZI/GHk2A0AbqShqoyFhR1xVjYXH14hUA2b6hSHU8KyS6ei4/mF7jDBpCOOSjDLX9YMnCjvi3I9/+SK0FBJ/YkYNBFC9ptfKz+kZvjRS+wGpzpqaEM6LplM7rGbqOTLUWqCuBaxtYgcVVIN9t25ScHrboiwu8T9JCXoF3E5P8w28ZCnmR7W//xNVNwpi6/Jdf/h8A/vT//tfzxbc1jNGi/iR7pUdYwuDjJidTqgit6dInFlVrcFTEi9I0ODQgMD5DQYeswcSkFzrBp3ZI44BlXpANLYZiH2ZoeL2LHUyIVFuiQO+ILFnzaHxix4rzi/qh2DPWBlXsfIaqEmsKhs17JohUXqivVzHZtOHw9kjpS1jGPuh0bszENSkV/Ou2R8qnEj+5JlYkmPKYo/sHnMj8rAq0P65JpiHXy5LuRhr9oYAgqIixuK2/rAhRdT1e1+E3kCl5OacWLJKRxnTpVKeSrjXRvQNm3dNX8kLqy5p+7Hm3W5PnSjxYN2lxyIvi88Gyw5GiyMirI2Gs1n1YIDyLLD9w3CjIOfFwPUHZVLTW+XzLrfy70/glp/LIqdWZdDJfl0U1y1lInCw+H1jfDaHr0S8uPoue//LmxHp/jx1o0CuhZd3hYXfixfKGbpAOmWU5aJogWszohDwreVOQ5jWjyMlUDWBXtpSHnPoLl/REGbfQMWkrjawcMB8l9PmhzBi8lnK0mATyspvMQqzwhtviXxjFJ7GEgaLSSF6GrPfKCNJyufyeh1vIGgnDhpc6xt3A6aGgqeWa6J2FoZsYcUxeyLk8CI0+vCLxvj2br+/8DxUmJzQY3IF9VfCoHOasb9GeX5IVDrqtvq1jYXs1+9MOoXKsnjdj6NdE4YmslDB0kxWQ71ksZ6S5dPD2bzZ8o8csljH3f1QGxE2Y6CaGZqBSXeimy9CcnzUnMgnUfvISl+YJLGNkciXhdbMUTKOamxcFyVEaslAzucbA9cBRd6qwE8pG8G1kcTGqGu1jjp2naMWe04NMQzw+vud++8ARQbKU992pXlO+qbAjB1/VsWplRtucF8vfLHv0uqRGwvpXZoB5DKk31efcyiTW8LyYbVFQf5B35bR/wEVjNrisVZ5999MdHSfKXyBKFAHNMOkDA6+bcaGE/4veRds74Ix0it9gaRFPmU7cWohMwqH59ny+fz1+1QgeN48IJdVllxV11XNIC071J88wJbmIMZ2BDx/+CMDT2BHOTQxDwwjlC6TlAVGbNE1Ppza74xucDiazmxWWymtlx4+UTy5aGBApOSN3YnPKO0R5IrDlR/SF9rl/4V+P+nTP2LkISyVd/QFNdKz3DbYvX7XsdaKVQb2bw0peqA/HDMdz8RcOe8XS6y5CmiihftrTKZbeq+//HnP+I7qYUCmmWcqWjdBwNxveP8k5v31XsRATrqKEK8WCcs3zvMqoj5Rthxil4c2qit6yMeyIWnnfeStItZbScbGn0mi3o402tRjNCZtO5Q41HVu4OO6IoyjB/igQVcdYlZ+1WEVvMuoapgW20k20tYbBAUe7wFIyX+NwXnYQxwHOfAGdTqPyXzMv4uFUYxQaieqn6FhXvAwSCDeEyuA1bUWXv+cieUUUvgRgnT7JDiEFOJ/SroGN1mb42hWnrlE/C7CbHD18hVBuVum7AAAgAElEQVTarpY2wagTeu0A9XkOCMA0PNq2xTR8epXM12wTzdSpq5yHVB5Yq/WI4hmRr9E9SgfPGATlYHLKOxoh17PTbYyx5fG0xVJkBNMMSOuR3Bkw1aVlOw2nomLUByzVT1HTNCzXwRpaxvZ875oqZ+tbI9SCxeuAT/yZ5njA/2aG6EeqQhqk07HG7lt8PSNVa2KaHZHvEPk1x53qz9hoDKbO5nTk0vsBgMXVS3Q3RowwKkKBED2OE5FXGaKX+2Jzu+Z0Gsmb8/W9fZSXfVqkeH5Afaq4LeTPxiHE6DKuXix5da1UmcKMpyIg8V7RO/Iif+o/crAFVunjqf35cevx7JsY7J4OJbtYr+jJOW33bB/k+1+v/pErpmS7gftWzU+4hK7GWH3BaPshhVKHOXCE7IDhmTi1kggze4xu4I/7j4SKy7AZUsqhJ3qm8+xCzu9g7inSkqskYf8g5do6u+XCy7ANnVi1MZsCru0Q2zrXv5WR6ryf8uq7a0rdYjHKn7XhlM75gszbyynhJ1mqvOXBO5HmPTPFjHSSEGYG4d7BUd/wYhkTVSPP5jGGo3Rcax+9HQnG42cd6DrtaLo73vzrH7h9L/kT+3RHiwZhR6lJo6F1DaPhEgYaTiif5/otVXte3P/id9+wfnOk3EpD1h5sktklVttxpbRRv3n5LUYcoZ8mlApJSt8PGGLP1J/TSJ+CeXnkUWQ8u1wQq6XJ9i0vrpdcO+AqBZrN+ghORJXlmOqwuJFDNF9hBi3t7b/Kn2nnOcy/Hr9qBOv0QFdL7z53LPZDzWBFzJQiiZsYDOYz3jz9kbuTPIgvXk6JpiZed2DslPBwEjFM59QPGb7SPvT0BZdLl+9f/I5q/NSJUWPMt3TNnFylK1fX13SmoCgEC0Xf373b0kTnU29uN8RXz+CoagJbC9uOca2BVglCH08NMzfBmQga5Wn6scNiEbD52GF96s83OgQTHfPymlpdWsIAN55yf1/xQf3u6mpOXQrevb9jP6qeYwQ8PjTYY88Pf/cPAGwfHnj3z7//m/k6zkhTj5xUSUOadriLCfE8pDE/RQsmR01DsyJMpQJSZx1WMGG+vMFXjKpO1zG6Ld6QM1Pdd8emRcu3CEfDVTRtdJ2qeGLoeoQiEKwpiL0B1x2JVZJdNOdEnu2h4R+e2Tztj1SfWimlW959ODHTTcSnkoY8IxYai6mLq0Sl325z0nTAdEZ0RSq5vdvx7es55tJHKMWhLms5jDpBoREqNZyr+JJK1FwnHo33GwCGccBpdbQanOb+bK4ASWgxWA2dPnwuaaj0mg9Zx3B02BXyXV84Pq3mcvtmTavmG1gOpdlSmy2ofaePLSfrROAaVIrR25QVvWtBEqEvVfnCxKTrSrYfDuSqHGJhB9RVT+wD2jlcNyrH0h875rGGqblUSibQNAbavoFexxLyAjK1lD4/MGY5uippEDTYXoPluJ8l19paiqFrTc/HvYwEQyNGty126yOOcqw0HCaJoK0E9fjJ6AkwbI5fEOTplNShPrg8bjLqPGP+Uj6r8zwSzyRZ+NSK4VgYa6wwQPdvKIxPeyykCaHKB+73qh1SCcNPB8LrF/z9i38E4PjUUQ8NnuaAus/qp4KtnfJmnTPs5V2wurzi7cOPuMU5c9zpBB/fyJrd6Ysa75QxWhtWSsf1dDpRWRVh3KJ78qy89EN+KR8IkwkvXypR8Z/+xHcLh+9+SDipMpE8M7FoMesD38Tyfb+7fE2shwzbDlcxS+fBkkGMOKPgqCJGixDcc3boPBppS+mQ7auCxugwYxs9kNF2lqcIo0W3AyLVNqvOt3S6ht5oDErbdxHZWIGFHkBxfAOAEXjk6YZ0/8h+Lw3jJt/TTFpOXo/VSENmGD3oOY4+B0c+b3I5pwvOjbbwBcvFnLe30qh22QK9s9GOBjMFr+vVyOMmxT5oTBQxJn28ZbddU1s1q7kkpT1f/A77p38iNErGk7ID9Fh/2vOmqYkT1XZrW5GS01s91nOZPjNnc9reIvBW6M+ks321/LKi1KfxlRjzdXwdX8fX8XX8ux2/Hgl2Nq3KCY6OidMaGPOYTmXnh7phv17jayFXCjNvi5piiJhMEi6UMKwYB755/QO7eE83V01roxk7oaMVBQox4ypckN33iDxHzFRRaDkw9jVe6DCdKo287UDfnENKIvuIez1nXEpPYV44PLUVh86gUIXmg+eTmSOm6RIG0qu+ur7g0oShMcly6aWuTztiO+JquqQ8yCh38/TAT8Uj62aOrpQRzIvvic2S7JhhW/J5yzAi9ipIR45CUrrHL3S9OG4e2exLWvV7VjKnFSOOrjFR7zAMOjPNI+90GgVNt2WD63o43YleSNfYHgRRZBNqU6aeigLSPY3uYdsOqKjnmKVo+UhoGggVHfpCUA8aWlFQKGUbuz+HELSwIS9TDKvh2VTmbJ/uTsRtQLj0EKow+n5z5KU9ZZHYrFWLpKk3pTNMEiPmpDprvLyakpg9jjWQjUrnb9JzOTcwrQHHktHBTbCA7oCuBWiqcPu+8KjNHvdCMBwWZ3MFSCKfY1fQlzlCtX/RaihqQUuKqcTce90mbxoqvUJTTXWzdcp690TlDJ87gLRahl44GJ7NXmkfhrZGRsfQFKxUhNfoFqYXMJtU6KrLeRjadGLHIGy8+At1goESCwhjukHQ1xm+itIcN8CNApxmoBxlfkmUgtbU6fqRXqEcp7LHWb5EdzrcUa77THN43D1gOgn5KM/tTw+PJLqBFSa0yqlfRGBqUOkWj4p8FE886jpDiC8QCwwF8wcuoe1SmiMooYm5pXEsSv78bs/iUu6jSs/QVwJD1xiUEMQQzGg+Zji2R6vIKE1aEkx/IIxvOGUyIqlNk6vlFeaTzoMSqXja7/gx39GcBlxT7eP9iFs1pO25eMJffv+v6LX83Qfd5kovMeytFO8GhG1zavYIrSDdy787NhFi/4QR98QK/l9MwfQF4+0tlsL0/uG715iGoNtr9ErfOGhHmn3Nx+LATFOqLIsXnKwQC5tINf4+1QUc9mfztUKN9KRIiVlNGAbUpk0h5D3WdANjMODORiwFJR//9BfG0WJi6YhMCUHoFSszZGjtz51h3u56sv2GstkyKE3hloze0dHNmmCuEI2yobNNvGikFRLReExbxu4cJRKajhh1nFBGZNH4HzisNdKNYKXu92Hp4p5KZq3OrpJrZ+0Kvo1viNyElS/P1PXMIGpfsLNqMkVKuwgaqt2fsdZ3jHMZ2S3DiHabszcF9UruKeuks6lh0xq8VJFgEv8vdJHQdI1B1VjEUUBfgGVoJK78tXUeYWhHFpOQ58qgPBw/sEkrhDshmUum5dTuuHA84uklXig3UydCqvsP3N5usFUxpSt84ovnjFmAY0uIIIgm5E8NhiMwPTWXpcPxXDWNIl3T1zXBXEn8WBHW7SP7xyNPKjdjDibB6UA1bCgdCZssHI/S0Wj2PzNxFeRoQnGbcdd3nD5IuE2MA7gh8WQg8uXHHtuO9jTiOvCDet5TsGfmjFwMFSeV6yn9cwisH3LavsJLJL5cjZA10GYd2acO0kGCF5gYQYBmyrnFVxaGaaN3HV0pN3EhWurRBdHhKYjUsXSwPSw0RtXDLU9HgjDBNEJsZUAtfYChQet6bNXmyLTPc4JZWrHTj8yCCCXuQJzM+Pg7HdKeD3cSburalD/qH5k9j2kf5OHppz7PoojVxYyDat/iBlOK25bixyMXMt3LzSKiNXWsxiRR3eb9MKAbHFw9ZL2TRuDp6QPz8ZJq2tHm561dAPLjAR2BJgQ4KrcdBqS7jlHvSOZKyLsv6doKfaWjnZQwOi35oUGggZDP720b4dUMevu5Ji5YTWmrEjG1aVWrnn5bkXsCYWvMVauiYbTI84q2KPjh8sXZXN3oWq3nBWnvkGBzESk5LSsgjqa4ic6gmpF8fPcOQys5ntY83sl1ckwHd+Yg0pa8kTBXuJgRjBajDaWQkHO7XWO6Hr4+4Kh628dDQTwxcHwX25JGuhtN+l7Hdc9JaJpCHI8PHWHi4OUOo+qMYC1djHLg6fAew5Ww16t/vOGxeeB00HFUXadLgxO8wBkbDGW0R3dKPCYMect2I+c265ZsTzqPIuCkJMacyuLaD9m0d+i1vBRjd499M2P8Qo3rZGowW3wHwDeXHkELu7sdrkqrzD0b3/N5dvkb7ET+3Y/7DevyAn/cc+HLc5F8f8GfPz6yX+9ZXci5/O43LznuR97nj7S9PKOW0Om9CdfBa1YvJVGnaaYcZ0toXTQhF7AtStriCw69WeEoecoo6NCnI67bS/ELoKDG9QamLxM0pfyUznLEoWGXWdypfp/R+s+8evUKzfBxL+Sdmm4fpUB+MuAqE+BdemTpAboa21Hi3qZOEAc4UwtTpQTS/YZ5eH6X3Ty75qf7NX4l3/+Ut2jlikU0o0P+3f19h4/GbnciaxXU72i8Xlwwixb0yrhunu4pB0Gd6+gq9+5OLJ5dOvTBnKZVwurzJfpszpgKTAWRPuwK3q7X9MmRQP3s6ptzRZ6/Hr9qBB/2Oa0lN2fsJDSdoN20WCqvN3YVnjtlqFOOufKe7Jh5EDGdLdEVTXdqThieBnQ9YuIrdfOiwe4SIsdm/SRffr09oDsznHhCpVzU46FHCIOla+Ao2n6pCaLZ+YdYrS6YRQGiVKSaYWRpr5hNDYZUGpXRspjNr1m6I7/8/mcAfvnDexy3xzqkeN/Li/HFi2uMYIoTjkwV3uz4JsdTxW2R8nEvL3zjycPVdf7Dyws65eGuognafst1kKEb8oJ6aM8v6onlMi5ChIoq217HMix2bc0x/9RGpyeyXZxwApYirXQjmihJyxJNUf91MXA6HKhtjWYrD5VjCiwNFn5ApIDvVusZmoxD0ZEr7+5l7KKbkOUFo5BGxhLn3mk7Hrn7OaVNLtAU48t3ntF9WEMccHEjL/L1PkE/rmlOLUylgdeOFcIW3G5/T62UO/63F6+YzOfc1/dMNNW0Mz0RWxF+W9GrBqJNc2ByfY3rlry9V1H52x39lU1gdRz/J+zQRehRDw3pyGfiRTyd0gx7jMKmUFJLrjeFlcFouDihKn0xdMJhQVamiFblOk2b2unp+oq98lCNxkefjgRTE10JQQzaCFUPYqRR+p96adLWA65r4IrzkgNUrg9nxmTiYQ3u564PkWdyynpa2wfF3t3sD9jjiVb0+J86iTQjRbZlZpo4tip/Wd8REVLaFoVSAon1Cb6hM3UC4qkqm2g6js1Ina9BSZjZZkUce8wW5zm2Tml4VtkHDG+FhQaDEprIWkRdE5kW+Umeu81HByN0cM2G/U45X2PFpBtocfh28b/LNdY1+sFksx7wMvn9N9me//5fCzquyJX+6aDHWJHFC+8VYy0v/Dg0KZsDsXHeNeD66hmzC7l2qXhH5y+pr/6RXt2PthhIRI6IIflGlhIENyue6Tm3f/mXz90hXvzdbxFaxF3/xHQqL/fOmHOy4Y9PH5jX8tJeXl8zFAFr3aBLlTE3IrqTRnloPjf5bg4tRnees2rEkVblTvVJSOxbiMDCUXl3UQh6u6Ewc8qjvGN6f0RvRn5O33F/lFGkXnTsrB3T2SXJTD6varYMVQs3AbrSwE10nd6CwXGxbRUwWDqGOyJaE9P81CAd3C/kBB1PozoObJ7kPXc66Wgl7HcuxUKelf88XSD6ljQVDOoun4gpb9cFm/cH7k7S1hy3H3BNg/l8TqIi68PdBtMV5EWDpboY9U0H3YBoYf/2HQD3j7e8qwSTb336g7pDzfOc61+PXzWCf/zpHasLaaAGG9B6dHoaBXFl2yMFAq2rPrczcceRquuZDg5GLr3lsm3Y3WWsXJf9RJJWdg85mn2NVRYcPkqvtToKwqsezRnJVRNUyz9iuCbacCQ/ygOrGwvc7vzi++GHGX2x5c29VEG4LRLGbkJxW7NRAtrR5SVbUZNXDU0qD2MRGmSjTzgNaZRRGTSbuhjY7m4JVSNPKxh593RkupqyUF2qs8Ii9k2Sb35gv5UbL3E9jMmUU3XPJxlDx96cL/AoCIOYTpfPOnQF6aHgOPQUKHksMyLPM5quQ1dlIc3YYwY+Yw+pakvTjB5B6COaglopfAxDy8QThC6f9VQ13yTvB6ri8FlAurZDqdZjmcSW9G7F6dxom+WIMD3uH0rSQjLIrKTBHXxJ+1YMusVszkU84TB2tErqzp1e0AqT20PKlSPfY7L8hrV+JPv/OhKl8zfTV4i8QA8SPFXDlq9zyuxHhl7wyxuZeM8/VoRRRD6G7A5fVoSIYhcr72nK8jOE39kjnhPRWy6mah47OiaCgdKE5evv5Z4Y3oIRsXB9ik/1lN2AlrY49owikHsiiDWCRUK4cPiEIHdOj1F1RGNLW0qDXw8djpcQx0fa4nA210Muf/n27pblxRWzmY6vkAVLHzg83tKaLqZqfeMD9WmAVlBkCjXYHwhsAz0Au1F1gvsjja/jxBqakokTZYNvWoSOSeR9UlsJedj8GYOGSDELO9ehtUsc7ws6vYN8Vp9pjNGeRRQilDA6aUV1PNEHIYmiuPfNkVoT9FXD7Eq1NNJHPLMnv9+jKWMceRqPRcvLi+85qG7h//xf3nL/seXFqzm+I61WYPsErk3UHeEgz0q6zegKg/m35w7yP/9lyzxXkVXY4OoDeaVBJBni19dT3LBke7jj4RcJM+lRRDNa5HWCrdCAzY8HqtyiLW2elPi4Y/cId8Wr1f+JPlVwpb9g9c2K4mONoXpqFmVDpdfs9z25iprv7h+4mXx3Nl/HEJRKmaXrG55aC6v18NSrja6BOeikWUqhPs+pz+kjl81Pt6CaFM8Dwf2osWkbFkpY3LJMGtGwvFgQJdK4ebaPe4C609mpgMHzHaaTS9A0UEzyWbjANc7h0LYZYDojuZJBxF2+52m3xSqmHPe/V+/Uc+0kVFpNpmyDFsp9npZr9kowfX5xSXKRECYeRSP3+0P6hHMz4/rFS54rktK+Kbl9zMk/vuGDYoDmAp7yDW5zwU5B7Hl13sT6r8dXYszX8XV8HV/H1/HvdvxqJOgZA53SaWubkpqKwOpxle10up777RNjbfLdb6WHNk0S6Guu9IiolN5DdVdiFnDoUoq3Mor8+X7Hcawpc4PNTnot19dXBE4AvU4+Si/LdWJ0Cpq8pVFU8N6oCFSy+a9HV5YcHrfc30m4aZ2WIAr0oua7qey07Kz+jsVrD/H2PX0gMeOpbVGJBnse8molk6nM4A+HgqefB94pqLfOHaoKpraDqVqQ1GVD0bVod7cMWwlr1AJMOyNoTyRK/w9xvtS21SDGhkLV5OkCghh0K2aq8n/CS9gXDeaoEatEXC5MOr0lO7XotVxPs89Ijz2DEISOIjYEHoHm0owdg4oOI7sHU6c0e66UcO/N5YSxSHH7EVdBYYNz7h81fcT9U0fbVRgH6XnNkpa+uyWMdZ51UuHf0Tq6weDd4cDTW+ndvX72jPn19+jBlER1jH/7cMd6/UB+d8dbRRQ4rJ9I9JLctJlP5P55//CG8jQQXcCHWxlRO9aE/eYddWFyfHw6m6tckwKdFqH32IOMyJr7nCzrmCxsPJUzaHWDU1/Suj3ahSq67Sb4wcDkymGpvO9haEhzcMwJoVI46fUefeiphYmmalG1Rid2DUQ5MihCVNOCawj8OGH8gt63rgSkm3og9AYmcYzvym/Qt1uMxsSwJ/SKvh5YPYY30PYdoyL9oFmMVUtl24yquNm5npAWNWNfM1MKPIwnYtuQouUqN+N6HWZVoRkNvRJlD+IB89jQlefwbV58ilJatKynFA0Xqpn10ptR10c2RY7xJNfEn0Y4us+xbzG38l3HVsNOQm7Cl5RIr906Zvh5zy5/5O5JzsNwF9zc2NiGxVTl65yiIQpc9I1BrStEI28QrYb7ha4XQ1USqjzcYrai613GwGdULYJy02N/ynm82xMoOPTVy9ccsx1JXuPpCqo7ppSHI8Xtid6RZ/TJ97h+do0rWrZqL5o3AV4/58oceGzl785ffI/prNDqj0RK0H0cfGz9HG72RgtzlBHuxzIn8H1EOSJMue7z+JJaz9HcmJ2qd21SwakRHJIOpQ3B7EWI+WxC4Nn0uuqqsHiB51nMn19wp8owxtkV8c5h936LZ8hobmUGREFM3bUkSrj96sUK6wvEGMMKqNqaWtWGR8vn/OFxQ/mwIfPlN/Me35EPHk5b8LhR3zu54v/4+++xrhfoKtr0AxPPhdPhgVST69QNFlVhkAUjP20U8ckyeCobtvUaV9V8t3QsupZmeKSqFBJZ/3qs9+uKMUlApxQA9o8fcBwHvAGlIIRn9nw3u6ZvK5JWQYYnHQ2biX6BUFCQlhsERcT2+J5TJXHayL1m92Cw2Wdcv5ZEgWkS4jkGRXHCa+XlWQtBU49c6IAi37SP3afo/G/Gu9u3PG41jEzmoV4FAcchpNxJ5QyAthy5HiO66QWeyi+cuoan0eS3z68oX8sDsDvtKe0e9/UV5VbKulWHPZg1ZjjHVsSI8nigrh32pwNjJp+XbQ+IIWd51aBpqovAF7oxV2VKqZm0StjY9H2MBmJXp1QFUZo90I8Glm+hK1jKM2B9OKH1J1wFmYyDoCl7FrOQhdqIw1CCrtE1BqOq/+ttndV8ho0gVDh/U2U01YmBjpPKL4TD+UYf3AX9+JHAnjFU8jJ+f/eIYQ08G2e8zaU8VHWf8dp3KGYD5b3csPeF4CKIsacTnFh+x/Qhp10fyU8VzUmu3eu/f8XHt++YWdAbct370sN3R5qtQCi1iE3ds+wC+spBV3nHfzuELmRfxmLAVEXMTS8L0jVtpMukY1CEBrXW46wgtdV6LjWeX8bMb2J8JdNU9CN5bjIWDYNSUcnygSyrCXBxFKGkyE+0nU3YDNB96oKdo1k62tTF8L7gECkhazsysEd5aWdKTi+ZeYwzlyatSNWFN2gbXO0EY0Ws+liWbcZ46jB1i2QqfxbaU2Jh4jg6h1qeqW+/vWIRO4i6ph5UvaNeUYkRre2xFCPc13oSh8+X51+Pz0LrRso2b3ixiJmqmrumK2mqmheziEi1MDOw2axPWEOMOZfr6QBaEvN8taA4qK4cesrNLODdx4Yuk3v2Zj6Fo47v+4wqT4poMPyelBJUxxN75lA/jIzrLwhTUNO2yiERMY4WkLY1yh5z+NAQRCHCvWBULMqf//gTq+WS//if/y/ufpKQ3vjwBs9egBgpkMbiebig2vbkxw7dkI6lZy+oWhPN9NGU+tO+1KGo2OxbfCXAUVU91XguoG3mHbWSJzP7jtBy8JMptiIlWrZDMxZEkUd0UOQWfYE51phahKb2zuVvFziLgaERXKyU03v1HMs0OZYNmaqBDiwNzfGp24pW5dKurmfYo0ffjKjWnuimR9ae5wS95JJt+xO/1BJKdqaXXD6fotkOWirn1+sev3/7honoWLxQxEJK1ndvuH79Gy5W8gzs9hlBeSTf7eh8eQ897beEo+DDg6DopOEeTIdwpdGbDqWp8piuycr0cJcJtgoGLpLz4v6/Wetf+8fQaRhs+YDDFky3JU4cHFuuyKubF6QPBbZxxc0raTzqpmd3PFFULuWjPHSPb468DCJENUH48mILnIToquGHy4FelVd0dz9Tdh1a0HL9WlLwdxZsNgdyzadTLYL6QqNqz3HeqTOnMhuCC+kVZNaSw7qgdW0MtRBP2w31f9txE8Ev72XXB0ebk7wOeMh7tu9lfjIdLPzJJY5z4vTmFwA+vH8knpl87xlSuxFwkgvmtoYdLEHJYd1Xf0BrW8JxghPKOT97/hL4l7+dcFXjRPVn8kRRt/jJgiC0GZXyet2kWPhU6SNDKo2g6bvYnU5imJiKyDEcG5xIx9NqhLrcLdfAtmHsC9pOMQP/f/beJNS2Zd3z+kXEqKtZr2pXp7r3Pp8vKyQRya6CIIJ9ERXERoLYsqGkHbuC2BJETCFBkBTb2hBsKSQomWTqK+69p9xn71XNetRFjLAxYu13z137nQRt6dvROYe51xwzRpRffPEvRkWrEpRncG0/Hu5+IBYGEXtIfxpM8iP6lqNTUuUV2c2CNJna/932NzStQRxrrq+nXH0QK7j2MftpEgJc9An335+4MgHjcRrEUku8tmIdxPT2flKMgnlwgwxbfry3tiydx+G0pXNafvONHQNKY+IbssgndZ6b1AI4WtMgWSchubV+Es5I5m7oRo2TWDuguz1tMbJ+84JA2tNHaFi9nnP5ekO0nhY7NY5s94bDb9+Sl/bE6DfEZmCz9hit2k5ZQff+TO8HXFpnjdBb0p6/hhF09xxt6VqdyEAkCKkohxpnsMbF4wwxGvqhR/fTuFAtRHFCN1SslaV6tNf04xYpR0J7FLh6/StK3bPLeyIbOcooxYkDHo9bOgsqctOQLHRALj+0QahDHN1xE38kyLDI4tXmhuJ8S4LH3G54x2PN3/j8NXf5mZfWXmmxyfj6txX/+PuG/midFn614Pg+YnVyOFnfNe1fUOwbUg+yl9aGqZe0xQNL47E7T2Pn5cWKIY7oYwnt9P6ykugxR1n7sp+UMGZn79nbfU9qauLNii9eT+jVY12ze7jj+0PN9n+f1K9ef+bBG0P9oDgep++u/Nds9wXhfIkxUxt/9909l6uIcJTcbac1z3EGnPkCZ0g5Wh9Up1WsFhuyVy613eDHtCGTz9eyIHbpLW0I3XI6DeD6OFbq8Nw0qHDatGqrw7l6kaD2BvVqTWaxIKtXAcG1zw9vb8m9KXCrvePkTHJ/YH8/nVyHvuLUF8i2Q1mhheJQoSqFUprHd1Zdye3xeE6fymYJMhzo7GY5NCd21R1FWRLZg4+cX2JSw94cUaElxl9e0h1b7nY79mL6jXCsibwYRoGwymFD13GoO6r2zNneiztxz9X6DZdLyYPVNi0cWLzcEL9ak6bWheTz5zJ6v1t+nidYnQiD6Zkrnn8AACAASURBVKi+DBMWKw83cDGxhVCfT5Rlxatfrfn8r06psPuvH+n7nsemJ8IqqLQVb49H9sczyWaaUJ7ZcXZg9WaOZhrsZz9ibHOCYY5r041uXxJJgSo10sLcu6LC8efP6vvq1VeIcc/t22mSdbqjNi7h5Zr1q6khhrc7GEoWsc8f/mJKkT4cYDGf8+3jlrC3R/JwBX3HN4cTtUWCyiuftpNs3x25shtt4HoINRLJkZOV17r85QtWXYYn7/GsfUtz95Ho32nRyqBsSipxQrL1kt4P6fMpotoW98h4QSfVh5PG2JxxZMCrzYpimJ6rTENjNKrvSa0I9iIO8REU+YEmnwaYE8UYNdLXLaWN6BzfxROaTBmETUvG4+JZfefzz0nnJX3fc+qmzej7Y0Pc9txcxlPODzjnJUnY4kVLRosk/uPiLdvvTrws33BpOXFO5FGfTqSzF9xbfb/bP7vlLCqu6wVfWy1KUWzZnt9jSCktmi3voHi8JTus8S+Oz+oKE8dSIvGDFUVhtVjrml5WDJ5gbYEnKE07trR1S2dTUJ5raNqBrqxIlravo4iwbnmULvMrq6X4Y4vwAnrdU1rC68KPKBfgtA6uRb3OFoKjMyed9wTOc3+zY2EFgNuGlpDQGzGWn3f7uGWTXSI6SWqnbBwtGNoTF96CyPbZwyHnrALq8kBp5f+c7EjnuTQSLr78Z6Z+vHjBuR0w0scCAYmchFlk6GtNX059u697+j5g/5Esho8FmUQZrqi5/OoFgUVLMrzlqDtcKZHWNktEM8JoRTA7UVqN2bbakMqAh2Jke5gyBroYOfZ3VOPAOpuuWJST4ZcD3z++ozxMGYO0dxGzlvz4SCJte3Y+WuxIs7/yrL4Px3vW3hSoX331iotIsFktqCx1Km9GHk6SRqe48wkcNWjDd78pcZ2Gf/ZXE3il6xVl945GGBZzq3db5bhygRkHOquXfPvNnuUXN3C1oDlaVK4bslxfs7r+gvpx2nwif4bRAfwvP61vonyEO/VhslqRPxiODwWH05PsZMwyW9PohsSiZeIs43R+i0zkB+TzqR/o+xhnvkFYlZZKGeJoiT8bcG32qhACMQCj+UCbkKIljVKiwCG3fNehPJFZCbXfLdl8zjqJEXKax7u+IAx67tx3CBt8FVKxdbbMHZ+x/W56j0HzjVEEQ0dsebZR7zNbh7y8/hxpr2WGOYhco/UZ3T9xGzXfdT4qGImtxFw5CDrdEHYVjU11j3+BwP5T+QSM+VQ+lU/lU/lU/tKWnz0J5o8FhyeLl7nP8Vgz6p6xmCJ+Z2xotaAaHB7vLIT43Yg7e0M6ujxupzQiyxA1uBSPB+r76USyXAVs1gu6VqEDCwxxU3B68s6n+maKZOpMURcu6eiirbntIEb8+HkKwalaglPxQZH/nR55lBl+5nB6P0UoTdUhmhxWHp/98q9Pn/3wPdJf8MvlNa1VdM9cF2cI+Wqx5PRH0985t1uKssIZGg56iviGh4FhHdCeahorbvzy9Quah7eI8A7TT3U+3n/zrL5hknAoKrDpYBm45Pt77hvzAZCUBAFB5FILQ9PZezp/RDHS1yXKTFHw1TJBRRGecFhYvmJ1foThyExpLufTqUepgcfjLRjNynJwXEcSmApJR2I1SzPx/LSSdwN+HCGJP7h5//VffYasR14EFYun9KrIKB+3iCRDyul51X5PsFmjnBm743TSCIeRfFTohy0/7qb7xK8PLnE85zjfcbezeq/lI/mhxASCc27TtVnIyvM4ioY36XNe2PSyI1030pkBbRWDhpNDO4yIC5+DFftNVnNmWsPYke/sqXIo8MPPebwbGKwGbrbRbHdnRmVoztO8EAwkSURZOHS2/+u8IDYZnRGc7d2p70jy04mbzQz9ETZ32UzjMwhfIkZF2Dq4Vhm/7RuawwmpXLzgyUYmoToaTnVLfrQi3fVAlT9AX6OtD9PD+x/g5powuyGxNJFh0Nz+eMtgRnw7fgySc94wGoO2fXbuBMWgqfRzENqletImbZmnc+pWcFdMc+Kb24qh2LH5fEl3tL/pDLjEfLX+A85XT4pGJbkAfyZ5/93E9evbBiNrXOlSh1MmIK4UjjeixUivp/f/9t2JufFQ5Uhj+Ymu6klch/YjLger+JoontLmaljyD//kN8ThLY+WquBkIWLoOBQjgZ0XtVEYHbMWPd/8sT19KEk/f4GoHdqTdaUILvDGDbJ5i3OexmwSrcgWr5CLa7LSOl/gcn+/JfJmBFbvM5lDXz+noAShx/Y4zXe/i8CBwWgKq/zUiIDHux3JxTULC+YyDHSqo8m3rO3VRHmo8EKFO58h/akepZbo8UyjG15/PmXDtOvy/a9/Td9XhFaBKJArUCO9HshP0zh+s1iziJ4DMm6P4K9SZDKdcEUNL75M8dNXhNYgPNj3qHqkHxoeLbimfFuhTIJMlmysaMrMjYmTBR4GZR1Nfnj8gVq5nOsj/jCB47T2KB8HkisfFU2/8XAsWaxnbCKHWk4n6UP9EfWE3yk/uwmqLGAxs0ruQUOW9IhAo6rpockq5doNSbyQ23fTkT/vYDHAffHA2Uyb5TxNqHZ3eNdLIns3dfHlC64vVvz6rmBufQKzS8ldOZKjEZYYrnUPWnFqewJr4ua4EfFHEHZDteVUHfAsEtOXLr6fsgh9/tSqz+e6o324Z/PZa1ZiSmldvPgDLr/4BclaUD9Mnb00DgSweAj4MZoGWeGOXM19xi4ktHnpwekR9QBmxvrqMwBukoFiZRjPFdv9dIeRl88RdoF0kGJAWBDK0Bh2hz1n44K1SEqzFR4VQrcIK3NmtMGIhiY/EoRTejmdZ5wOBWVf0VgFjb46cjFPiFTILLYgmH4gpMb1JXE01WkszqihYhkrZpaM65rn9Y3mM6pVhtTuByEENmucdqBoFY4lpM+WijF8TSE9Qm/afNPkBkcHdK6LEXZQXmdQ1ZTnHGVTvWcqjGMYeh/fMvz1ERaOy4PRuHY8ytBHRXPizZLNy8+eDwaga0byvGWsNdKiiQPpIB3NPn+gd6yyUCQIVIPb1EgrjzWWA1R3HE4RsrXI1eLM2Ay8//YWc5zujn0vpENSnxtGO52EGGiGDrcVHG3qLw4NiZvjckHiPr9vTawTgKcCHOmQLAMCKxbQi5bWBeUIXGtFVgwlTd2ju4CxsyR9MpJ4Q7Hdo2w/+m6CUj6i79hZ5aPm9keOZYGc+6xX08ZQ70Z64WC8aFLJAUx3QmPw0+eTzZFT3ywzQyMr9ocTvUXjxQtNlH1B4mgsXoHjO02hR+IgpTpMbVKPHYdzhz61T3EgxgnRLVzON3SWd7hMFzi4XK4dfkim72p9Qo09TZpQWoVvR9UkmwD9EceWeTbHCad3vXvM+ZM/+5FuOJJs7BqQXPPl5iWX/o7cyq519zviCN43DbqdxsXrzy65jt+wzbd899vvprHSFfwQHWmq/IM7glIBXSloH0e+s+Lg2/sfCfU9b169YGX9UJ1A4AzPr3YCL/6AGvWNRA6Gy/UVd9af9Pv9PWUNaaLwk6mvQyEwM8UPPzT49pnalYy6pdv2VKndeLTBrxrMSTNaSzCVJlRdR1OPzJ5UeXDR2zNJInhpLxmXKkB8RLIyiN8Qy0fm62ldPOlvidIXfH4xp7dyj72/Ix0iZB8w2LXicNB4oU9XN9zb4H2MBXlzS3mqKWorHccZ3004zs4IPe0D7rDnZRjz4sWMkxUj8VeGJi85y5KX9uot2/y/IMvPZg7R3EaKqmUYR9xRUVt9SXd0mSUBAwNxMF1sD/MSFXaog0LqacFy5IzOHPFTQWMvXSsaTmNJmAjO1oLlYrVg/XlA2CuEhZY/HAu23T3n4wk3mV7m4jIgCZ+fBOfxks21oLcEYBVveC1fUbgJrZ6iyndViMx+yaghP9mNzFe0Q457OyO1Ni9xYGAoMZdrvrReiXMlaVtN02jq4ckcuOP79w/MnDu+cCaU64kIOXSUp5qhnWZFUz6P9tquw3EFnnqKZMFxBaEaCOyikKYDLSVy1MR2Y2zGyaS114LBovuq84DUmsR3qKzFQ5T4qHHADTWjJXyboSLyBtLIJzbTdw0DvmcIjMEM04CtiucqFlfXr5FOzOHwlvLBAjQ6ReU5eO7k0QeQly3GNUTJguBmGhde0dKWAycGBm0Rg3VB/7DHkx0P9kTSDiXGuDxu91QWCBW5M8K5j8wNM4uibBcB8+yCTNzgvvr8WV0B2kLQn0bcVhHak0uSeRROSN/26GF6hyx08M4ju/xMavU1VSwRXYjWDtrCobNGsW8057ImqKd6GBPS354Zkxkre9c5iBBZlXSDg//kuxcFdNVAdz6jl88h8YmNrqV0ESqmO7Qk/tRnabZkkD7OECB8Ox+7DjqHu4ccx57er9cvuJot2Ib3/PD1d1MbGI9Y+5hzy8kihEu3hkCT6ITM3r3HXsa+Nei+xzxppY4egdJsnOdzrbebEaKkrEsC3aKs9qPpPZR3QrqKvVXbuZpf0pwl6dL5AJ4wtUeC4nb3iGsXcqoe4zZ0ToOywhWRlHhJTMXAjTUGLoTLtmhom3s6K3qwmiWELgSLq2f1FWNH6k79fVIRbrqgKyvSaOrHXy6uuNxcEb1Y8/WfTlmbolBUpyOh57G8svJdZczp7ZliP+Bazd9T66FkRj+/wV/bOi8WJK/f0FYjjr3DolQcqxM3yw2OVbwKS4E/Prd+CrTPC6u9fFfk6DDj5eKC+dwGEMOBfd/SdwVuP42xZlAMdYvnOURWnrLIFdQenulJrERcUY84nc8YGKrSGnWfCjJ/w4uLBq//89NxdWpZMzK3QLjM9Sia58hxZ/C5+fIN1+W03t3vvuM8Hol874OXa/TVZ5z797iDJLNenuag6e5rvv/xjrv8TwGI4znB9Q3UR0J/OjTJIMDhQBxoaguC6RYe4sJBR4rR3rMXb/eIOKEYCkYbqP28h8Q/ZRMcIkPF1Oie37NWDvVoqCzKKm8KzH1NlTe8vJ4u3aUYGauBi5sJuQdw+qGhGV2OxQ7HLnZ93lL7FUq55FZqQz88IJTCk4LSSksV1ZnZYsE8mHG0dAA/iXDG59Hpm5vXNOkVGdOCMqo3vN9r7k8lVzYaUNpl5oGIlsxTu9Ee9vzm/8gJZcf13NIhrhIyX2LCkHd3VuVmu2ftSI6nnpMVLx02c8Tg0TzkbHeTDFt/WHGV9LyeX7N7kjTaZMBP0zSelMRC0tpj+9gPeLjIwGe2shqeaAJX0vc9xrpgO8ZFtIbVPMJ/EoFuWgYjiENJaSwYoS4IhCIVPenCtkkTkrsDiSPwLQqw60faPKcZPaRrpYa6j2zazhoV1AgTo6ykUztbsXBD+lP3pJpF7zScDzmF6yCq6Xnf5Y+YJmIMXMZo2tzEY8lBtDjnhq3lJyZZwqKW+EbhW0SvGxqkdnHSR1rL9drMXvP6i68YveWH0+bvl9G4hG5MVbYMo1W8cFxUHLOKPdonFKQ3o/Y1qezRlkrXn88U7oAbSJT1K1RDQpMfUKVCWwAVwsXIgEwlNFYZxBsrWhOgR3Cs32NfSQITMZwCavn8JJhaWksYAtpw2BX4F9N7zfqWLPBpA4Norc5uqPA3muOjobJ2TXdtiWo0p0NJZ0E14+GefKgIwvSDJdg8iOlcmC1neDboO2lBdT6DC7PllDZrOkFjGtzsObBgsAv30J354k3EEM042tNSOWpQI8fzPfr7CVSWXvd04cBt0XL9emq7m/g15aPGdAPbzuqfujNSL8EvBY5VSPpHv37Li1eXNCdBZ4EXg+vD0LNavuDKIrC11/P5as1q/hwtvEhcrtfTeFpHC755n9C3EZHt8PIMd+OOJSNdaeXfZEBeeGxmK6Q17u1UxNt3d5Ra4qmpf/LBYMqEYmhIFtMJbHPxK+o6RDQVM2vKHbyM6cszy2zxpIDI6PWo9nmQIasBXU+LeHXWIBp84xNYkfIXsyOuHnEHHyzoq9UjSTjHzKDaTuvj3aliexi5yDKc3tLdGsXoJLhKUNhrArcHoyENZoxWL7rennD6kgYXx4L3+mbE6Ofj94e3D+h6JEmticDqhj/79msi6bAOpqBkCHrSL1K8MWLspvqtQsGvqejzgXBjaWyjpI9r0qTHt8FhEkVcujEvbhaYZlp7LjYReIqagdpmJ81NSBSHrL94QWRlHJPgOZDnJ239s//6qXwqn8qn8ql8Kv8/Lj97Esw8GCxPQ0iPIRWknktvybPROOApw3FX8UNvT0FDQDhLmO26D2m5Zm94vH+gbu9Zz6eId382uEmMlykce6npO4Ju6Flnc4rDdNKKEh/P9QhnPq51uHbjOZTPj+RyviYocrrSuqgHDk5XsHu/571NrQTujNp3WMWC1ZVVi1Ahqhnp711Gq5bxbndH7sb4G0VjFTMev3nku7ZicH18m1pyyh8pqzOjFujjFBnGm57FYoPjDCg9RdVxt+L3T4Jtq9CuQtiL6LEqUDj4vsNc2FOf43I4niHvCOxpzlEutS4ZqwHXcmEcBmqTM5Q18VNs0zeEniQA/GH6zBGSrjM4sid0pjZxPYNS/iTQbTlLynl+J6gZGeY3OOeO8elEIna4iWDMQjzrBN/2Lp0/Mg6C3+6nVPfjQ4HvnThsO7Dp9LI3lI+PhE7EaJXh48TlvXBJFjOEvZs4Nicy10PuL2gupjbYey3CiXGziO1foB2quoDQExTS+zCOm/GC8SQxvktgU1ImN8QiwwklVW5J9fVIjYcrXcww9evOiCkN3BjUOEWXvozIZiFNB5XVXExHSRisOJtHhsaORTcgdyu8URPLj0C2bdpc9wd0CQtHYkqrL1nlJCYnWcwIOns6aAf6IqfvGkp7H1Idz3RdQ9gG+NnUdonn0pcDp3zPYMUR0jcvcReSVbKktyf+wHMJbzZ0emS5sGlN3TIwuVD8fvnsi2lcP9yfydYz6gAiy2srOjBtw+ms2Fnz4W8e7tBDzasXa/Rh+rvjvkONHrkbY+ydeeovONUPeML5oPJD6PN4rjkfcuYvpnc473oC13B14TAPpuxNftyRLGcInpPPh274wEUdFNwkGdfxXyW0abS2F6xlSltUNJaQn+eC1kTc3594Z69nXl7MUEOGrzyyaDrhSbUj33VoI9FWaHv73T3tyiOSEc449cXy4pLdu7ccH0dUMj0vdVrKjwjAn4vzBxzBqWzxm4F32T2tzSx0ysOXHX7o41qXj9u3b+m0RDQ+ZpzmZ1NHrMWc/Q8HdtupXZSfEs1ihBBIa6Bs+p6qAAcJw/Tdu3yPXw2kjstpP7WJbAbi9fOT6//6f/6az2+uUeX03bkK+cXLlwg9srmYON9iUGx3DwyOi9bTnNWDwBwL8GrmNu3eODn+MqFqtyjLnw1nHv4ioYt7AutU71zMuDs/QtMjrbXX5TKhT2KMI+nsb/yDf/Jb/vm/9ReA5/inbIJVe2BUFgmajThuivIUg1Va6aTGdTL8heRoL2xVJ1kn8O7+O05WeQADg2NQxqHv7KY6SrQTQrDhTTrlh8/nE0V74P3+HiuCTywkceiwXC/ZPUy5YE80DB+5/FZ6iduOjPYOp9yfOG5zgnEg1VMD93WJLnqawdDYeyLzrsd4Gv8qRjqWi3gw/Ka547qqeTpMq8EgDo9s1p+hZfXhsyCAzRBy86TSITv66oAnj7hWxNUbng+crhtxvAzXDsTUi1F9SzgaIitzZoyH7FsSqZHWI6za3hKlEWgY7+2CqmtkURIFgtSmEFpTTE7co6C1E006Mb4ET8gPaFanGdB9y7mqiTOrvCA+At5IvyBwBf1Ok4qpjd//sOccviKODH1lxbLTHtNB2TfkwTR+3nnQVJJzI1A/TP24uUm5PQ4I7wdCa+EUOjEiSpDBgjcvpoH74+ORIm6YLxOybFrw0uUaGS6R2fpDyvX3i+lblJOxVJrOmRaiVI/cNw3oirPl9Y3SEAUZQghqex8SSJe5H+M4MwJ7t7B/PCFHF1xFdZjeK4ld4ijDlDXKpl3CNMJtW9pbTWmJeEHZEEQuQQR6fE42vkot2GxoYTzhJtesrP2W8H10daQfGvrcgsO6Hj1UpJEDFtFsXMN6foUjDO3dtODleU6hNaNySZMp9RlKD9EI2lNHYlOdvVLEWUY/KoSwXLzYxfFcmvh5+95bgfXKcRgHQy8Mc3+a26EW7MYW0y8+5JqUK1FjQOBJ7m4ngM7joeRcKG4+X6OjKY1W6ZZeKoS7ws+m+bROB47nPYf8Du922kCvXq2JPYcvlguu3kwb8j/50yOH/R3GeR4Udd1IaxVjkkjwZrbETROUtZI6VQotAopjR1dOC+/juWFoB+ZBQrmdrkTe1j8yX624nq1xHIvAPLeM3plVlqDt5vPjw45VNWf1KgZp7zFPPVXl0TU7Hn+YAHivNinDx1wkmg5lQVoXaUpeG0yjafonJ4gOHYy0UQP2N6WR3H73gC8kM+vS8Hl6Q69Lvtsf+Dye5tMQekhd4zohygZkvR5IpWTsW3rrSl8fS8qhIT1J4mD6uxdBzDJ+LvZw//7MOnmBbwOtVTJHzjzW82s29s6+2O0ZUGy3d/Td9P7SdVmu53R/1CItp1Z0kstfbHj77sxo8SK9GmhwqIaWF/a+84RLwUC2CllZsJksZiyyGVeLS7DXZ3e/eQd/61mVP5SfR4cmCsEUBWdK4Ecz2lzjOhOJtaHCkwFeNmM1mzqnayReMsOtDX03TcRhVMSxpPQ0bWs3GSeDQbL97kd2VsncHTW6FOhE4j3dkegWP03RpmBu78mSIMV8BLZ9+/V7yocTWzMt+GrwEW3PQka41tdtPwb0ssOJXB73U10ibyCJJWEa0tsFaqYrTqcTeduh5TThV2HLq7/2krfvt9g1lYCacltzpsA7WjV/UxI1HvsuJ7Ek9WZ47hzQdSWqdQmtP5cRDr7jIKVDmdtFZhjwRYjRkt7qS3pjQ9q7jCZAW9qE0po0iOjbHNdeOHh+jG4KPBwSnigXLmEgcQZN0U+/YcoGp9UEjotjNyPTPQ8yyiLAXWj6ICJuLPgoW5AFAX3f4LpPFI45bljQy4DwPLe/KzFeS3zy2K+nTb+ab0j+0KduVvT7qd1PXYacgQo9cus7t3yz5FxpknmCs/7V9LsiQ80C1sGMxv24LNI4GBynAl/jWaWVXiikLlG9A9ZAWUsPXzaczxXybN/BGdBhx5oBdze1U1BXCGo8JFUwtU8mBHrrsZgn9Pb9XX1GGcX1TUC/m34jDSLimSAKXAr9fFNZ2XujReDjj4IZLo6y88JoWpUSpwtGqzPbPB5ItQehz8PtNN5DPKTQtHXD3hrSDkVNEKUEi4zQs+CbamS2uEATUtu79VGPuFpZs9xpWTCDhLFn7J6fVISVU5QYFldLXN+wt0HauZe0Y4yeNUgzvVdykUGVU7aKtpp+Mz/Cvu2I8xbf3tf1Y8dDVZFGI8ZSnXbNPRsn4s1qSbia1qP57IJgLFGB/GCie7O+QI8NTvccEq+8AWPv3tEzAqdHGoPUT6ASweHQE89W+BaVdpNeoquSdWJwrXKWo0f80tAFA005bYx397cslgnjruDycgKCGTFDRhFzP/sQgJZNQ+IY2sEFi44s6oaxfh4U+ePIaGXTRNMQOx59VSGFzcA4Hoe+wC0MgfOkWdvTv3/Peehg/pSp8fBij7WrWXg2E+B56K5hFjkUdg6MgQK/pjmcia2foPPaQ+9rvrpx+cXL6fSVXcXojyDHO91R1+0Hqy+5nDFz19z80ZekVrPW6xuaizn4DY5V2znphvSFS3DK0DZIaejJVivWQ4MYp/ZczkN8P8aMAvxp7VfOnOVFzCAFajb97puXAbL3GAdBYbM6x91zyszvlp/dBEcTkFtvPmkiemkoTgLhTgOxbwz3h4HYEwim6KA/N9RFixRXqMhKCHWG3e5MMI8pvanzm/2Z8/k3GCnILqYI9dV8yRh6lOcG32ouGjdkIWcoCYvMLuTKo6qf+90N+gQzj0trGXPXlLy+SGg9xdGCB7rjkQpNc9qi9NRwwvPpTg1lvkcJC/ioDN7QoEvBEFu0nHumuxvJb39N69voux5QumfuKva2sxvfkJkRR/fANKBq9ZxbowdoyhqlrChwGOG6CQaJY9GcQ6fp9BlPhbjOk8JLSCx6evjgXC4DhSd9jBwJjLDtMZC3Gk+4eK5NP9QVemxom47Goi9dMxI5Do5wqKyY+fiR00rd7DntQSGoLRJyFV4TuT11I+kebCp1FTELEvqh5GgBNFeLGW63IxAjRk39XfR7UqlZv/gC78LaFeUDcoRhPudsT89vri/wGOlNAGI6bblRRtvOOY8BoXwemQL4NLR1gRzBDyxXy+SsBUhvxH8C8mhomxq/b3AsMEiEI6kakEOHMlNk7JWCKAzoEklorwQ8FOfzW4pGMhv/nO8plWIVS07dE12nJZIupjUk/vNF+phb6avUI4wU9dAjChvdUjB0CoQgqafPtvdbfFHRlR1N+UHYkccfvud0X3A+Thu3I2HjByyVIbSLZdt3jKNmsXYYrMVW5Wgc6aKDkd6qkqhomNCi8vmmvbmZDLPvfrjFLXu69AJjARVa+2yPFedO49gI3Udzf1+RVjXmA9XHY5XG7Lc7lnZ8BqFLOwyIt99ysoDRpZsRfb5AVCvi6yc6gKI8GfB8ZPkE+PGRnUP1EY5rd27BIt3P7RkpIuLEI7fIRTH0OE5E4IVEVnx8PYN1uGR0H4gtx9CR0JcGf+kg7O/mZU/gBrSyp7NrykV8wSIL6AtBXU7jx81bcDSjGjGO5U+eSxbB8yBulBWmmRZxoSqSYI5ot5Q2VZldzOnrnna35/w4yT/2reaza4/tjzuk9SMlkLiniJk0uM1E11KqgEEhghbP0s50W9N1NaY8k1td3HQ+R/o5rhdRW0kzVRzxo+dZrW+/vsN1lmD7cRSSy01Gt2s42auVoeuIVxELNUPblOZatKhgxg/q2f62PQAAIABJREFUHbeWi1hVkmpfI6X/gXY2iyNG0TML1yhrpNALhQgFqm/obIak1zVlU6OrhrudlYo8/byz/CdgzKfyqXwqn8qn8pe2/OxJsM4lgzXnLEyECRwORUNr9SpPp5zVcsY5TlFPu20/0A4jVVcirGbbmEX49DSdBnty6XpJYRwkLptkSq9WXszYnGjQcLJE4ViwL1o2SUxsT5t6hDp/LpIbzSX73ZbWKqhnmcPVKmUIFdf1dL8wf7vjQYYMRqAsRN73Iwbt0wGddYGWlx5mnNTYs2yKFWKRUBZQfulzsq4Hh/yBOI74cnONsFFQ03RIkeN0I05kiZ1VDfz2J/Xt+5F27PGrqU0ioejrAeV5xNYxIxgdyqbFDVxqK+Xu0LIIInqjcWx0j6MYhh43cOgskKet9sy9gND1eLria7qcvmgYxwFtQRGe7xH5PhgHbe+D2o9QJN6f9vRFS9e3hNYexZUOwh3Q9YGDJf2Pj/cE3pwhrlgMUzojm2Vc15fc3x24jN5NDwyvaM7gOD2NPTGYIWAzixndkNDyDotuxA0yICSwnLjAC0BKStUzqI/HcvFSousG2YT4sdW/HEPSpaDWAxc2K1GZgbbXLMOUQ2lBFV2NJw2DqKZ7QMDNBNDiVC2ZesoiQFONCOMzn02nTc+BlgIhOpLwzwUOhqAncDRh8lyQerTpoaIzCGPoxh21Jbx3p4G6M1zlmnurmPPw/ZamzsEMvLcUHiU83v14y/bxwO3DdD87iwMGL6EUhn0wRfizZcUYG8KZj7JAsLITyPiMyQW1NTOORk2nW7zxeSTt2HncpEuO9UjajIhmmp9V21GNMWJ0iLMpa1SdRpxyoE3mjHbM3qiA2WZBpQf6eho7QRLw+RhzThqUBcK9unxFICJqr8TPpzXl8jJlDBPcruXFxXTXFYcBzbGit/Sl3y37x5IksMIFKxc1F1R5izE2sxAm+GNIf8opLCClro8c4kfUCJ3VYk1nKX09UO0M3mL67vLiF7RVgdfqD+ooKpghpSIvdrT3lnwvNF6QMrguMp+UVXSg6Hh+/76a9RzsOua0A07a4nkZqc1eBP7A2nXZFSGNPWmGQUaZ16yTC/TwRGmo6ZuBIM2ILH+67yqSICGLBK0VfW9Mz9y4FDKisHZNntcRRiHH8h5lTc714DKLZ8/q+w/+t3/I+/cFNy8nOkS0DDgejxzeffOBduVi6IQhrysCps9q35AsRhbLlMGCqFypceIA9wTOMI1ZXQ6c+4I2Lxl7qzhUtpyHCqlHzPCEPwkYDJzPDeXOAvW650Cp3y3CmI+DCgCE+Ehe4VP5VD6VT+VT+VT+P1SMMc8jDVs+pUM/lU/lU/lUPpW/tOXTJvipfCqfyqfyqfylLZ82wU/lU/lUPpVP5S9t+VlgzL//3/8jENPl7NV8gY7ArcAPpvRq3hw4bTsG0yCtlX3/4y3+ckPmw9ESanf5PYkICWJDb12JvVEyyxTH29MHOkDbtAxqZDmLUaElvLoe+7wgCi9wIgtGMB7Fvuc/+9v/xk/q++v//D+hLwXKQo5dU1P1Cl2dSOXEV4tSj2/3DekqIrEajnXucugLcDJ6K3icV3tEcYKqwtEWgi4MfuDim5LK2nPM0jnZwiUUPUurcNLQUtc13vVLdvfTpfW7h9/yL/1Xf+8n9f1v/n5GEL+ia62wcRcw1g2uUXgWbl93AUmSQeTTWoDCcX/HuSiZJwmumupxrhs6FeM6EZEFY3RtSz+0iLEl8CbQRihHCtdgOlhamocQAt2W+K5DyQSjxsC/92/+FGDwL//r/xpdW3G1nuNYpY2u6/jql2/oBsP+YBUp6PAij7F3iKz4uJIC3ZQ4JgJhlYRGTRgqoqDFOqtw9/49wlFEkU8YP4FPPEJHgAq4303tKXRNpiSFViytsPh//Hf+i5/U99/+a1+iv3rBelTc9hP8OvN95qpiKB0ayxu7O/9IMpvhzF7gnixYxvueoVBcrFMIJzNScT7T+Jr8+EBrVTpmakZMDAvDRT/RRg79ger9ew7JyKVnCaWxz1Xgs6vv2L+f5sV//T89fqjrv/ivTP/9m//CXyG9fo2nDdJyOCoNXtXw7TantjDy1I8JUg/H9Wjr6Xmb9SXxaoM0CU5knRXckHL3yNgN1Fbkwkkg93y68x7/rGxfwGk0ZKJGLqaxkoiSOi/4/rbhv/1Pfwrq+nf/1Qkc8atfvGY8JzSDy+Of/GMA+nhJGgkuN694vZnmXWEq3DagCzSdVVGKYof24R29zjhZEY2LRYWcv4CzobUmq51T0DVnmnaO40yAkrLVNASkTsV+O/VjrgxKNTT3W/7e//zTsft3/8O/TfzCzgGVUA5ndHeLtiolx7sOt01olzmxmvox8haUhea7uz8jsSAtMsV6OWPMXazDFsZTqO2WQ6voLa1hHrv4g4+bdPz61xMwJh9qrl9ExEIy2DGr6p6uPfF3/sv/8Sf1/Xf+o7/P9sl+TYbI1hDOQkb7/EP5Hql7VvOMbTuBoFTegjSIXtBanm8wD7hIVwxSfxBLd6OU++OO8/vHJ549XevSliOaBBlM6/HoRGTSpWyPaKv16V/dMPdW/A9/99/6SX3/g//uTylqWKZWx7cf0H0BjuLYWE5p26KWS0IZMXjTGnCZrJF9w7m+I3gCwpmRUULWnwjUNPeME6M9UFIyjk8i/5puHAiSkEZMdc4PFelsTmgkg1Xqma2fu3T8bvnZTbDtH3l1OfE5Ak+AEoxq+KAoPgsy4jGHQtGN0+C8dc9cKp/+PDAU0yTPqor13GDaM2UxcQf9ICVVkrZ4x876oUlHMWqPXDXEFhk2ej5+NMPzXZQFqbmpQx0/P8Qqd8H3t1+j1LQoSOHRuZJxMHSX9lX9JbvijkOdEyornise2H/fImWLv54GytjVOGPGGPh05bRZBC7Ug6DpXBzrszi7DIizCK83jHZR7TuXkg5zaOnte6Q8l54y8gbRR9R66nztOgTOBY52Od49bTI10o9JdURgnxG6MfNXgsybsbOiuL5puZ6/YYx8TDV99m57S+Q7xLHL0joXBJ5gkB7LLGa0vnH5QwGyIAwMVW2VO+o98NOFxHQNkRI4vaGurDt43ZI/bFEyYGNtjowSaGNQfkhmEZNDW2Fkx/VqRt9Y26Smpe5yEBGLbGqDsqmo8p6x97COUKRuTNdD+XigtrxVMwwUDHSdxpt93CpFey7q+EiVxnTn6WF5DdUmoq8rEn9axZz4hsez5vN5x5W1jHl3uEJ7Nb23obXIs5era0zd8G48EFvCN65Hm1S43yq+2UyTM3PneO6JG5ER6mnTyu801YuBTC24k6dndb2+sqLPMmTRK+pjx9GO8biVNA2UoyScTeg7U+VoEm7mS8TMylJ5CSr0cMqImT8hrrM5nMzI+/ePuFZU++HsYIyi7WKS9fS87lwQDGe8ISO2QtsinmFkxyx4rmjy2c0fTq+vXfp1xnwvUH/jn5ue1ZfM5ZzX6TVjYzm23kvCq0uq/sgqmObi6/kXbLMjRbnnsp02VZnG+F/0PPzmwMad+uJQ/0jEI8f6wLa1tmvS49INGLwH0ovps20VEwfvOD0Ifn/sBi/mCMuZbsI9ZTOjL7/k1E3ow8d2j1oIxkcHZZWk5nGHVxswG3qL1N3EM+rSEK43uNbbUB2P3Mk57gufmUWcO/mWsrgjf0wQFpVp7u7Z7RK00+JZ7831vOHxI2t0We4R7vRegjPeRQZa0wfTGhNXPjkntIRlaC2I+pJWKdxEE1m7o66+p1U1WeZibL+OfsBMC9o4x7EBaa495i9uME3NE9C/cUq8yCH0F+RnK1SyWU42Y79XmnxPksY4Npod5Y6uG4kjl4WdKp1zJs5W6LbCtfOxoUUfctp+j59O+4o/Njy+O1KpljCZ+nG+uKbvGsY6xLcbrZ8o2qqjPhXkZlqPQrEAA6c2R1rUbZ8PwHNR9afys5vgejlj8+bl9P+xw9gW3D8cca0skW40/gBjsONkSdbO4Z6+7FldpVzG0yLTnTwiBo7v3zNYE8t409KWkuL9A105fVeOHr3oSMwVWGuVx/KeIZ3xiy8kQzSNln7ocLPnE7MyETq8prUQWiMEju/gbBa4ybS4N8ojuKooDlBVNoL0AraqJM0bhPUYPPeavK1II5eZjVCyOOCHUwNGoKxyR9s5bNuAUAsSY1X0nY6OjGW4JnGnzbJ6zi9FLl7Ttj2hdYIIdUgURshmoLY6h2mwJhQuyvVIrV3V8eHAGYFMIqR1zFBzQSMu8UdFUUzfFV3I4nJFughJYku0DzwIQjqpOFhFDifxWciUmScxhYX0JwHwpz+p7+vrG4TvkPo+5Xka2YPKGXZn5KzAjkOQIQQup2ZHaI1cVVUTRi6xdIgttDzMA/pG0MUOrm27xfqavL7DGV2MVZDwdYzQFWhFX1lHh0DipSkY8OTHh/HRS5n5Ad3dEWUX2TbQqHNOKlwebHBf7TqkF7E7ZcTz6Vnp4iX37/cImRJaV476lYeXuPyhE9H1VgTBD5DNSHkj0GoKBD23wv38CoYA1540gnxglaasQkP1pErD7kNdXy6nTWs9Szn2A55URJYY3WuFFD1rnYLNXrh+wuW4YZFe0Vk93nQoCII1xpUUdsEzRnBz/QtW/hUHm61J6kfOh5r2UbNOpsVh6Roe99/TuhDNp994laRsh4C9MwO+/Unbvng52Ybl5Ya5aLl/A4uthfSvFJvVjCaH2c30Dl61QYQurtrg9dMce+h9yF4QeTkFNnvTVQRHSa8r9sP0dyuRsXd2uPOQxOqOhklCtFgixFd0NrB+FYS0XUT9WQ/8Xz+p7/4RdlZGa3g0FMMjF5sNqp/eP1r7VE1DWZeIaBpjkScYEock+wN6d1pvSt8jdJbo8IJYTcFmnYbMesUqGDkfp522VDNqPXCSNdqbxt71l38Tt9WU3YFU2Y37bUn88jmEP6+PjFakQeLRF/ds71ukDYw2YUA4BjgOKBt8q4XPwjcooQnciTZyPr/Db3N8BowztZ0uBuhahvM99ZPaTLABceDt4Z7earYKL0GSEaiRxkxrhd+6NPr52pupW8xwgWPtv5ymRIgT3X3zxIqjLVpkUZJ3NVghiCz1CcXAeukwVpNEmj8ojudvqOsWFU0b3llsoZaUOLj7KbAuqiN+5DGeSw6WwhK5IfHL15y7DldO7+sXK/4fb4LzC422x+oRB1O3zAGsM3i5O9OKikxrVjZV57oBjgtZtiCw9IuHu2/Z337P4d1bkovJ3kJuS/K84/juDi+YNjcviglDyTC0f25fI3q8YY8TrvGcqUGGUBMGz+1zvvu6oPEc3HTaLLq2pO8McSVJPPHheY7rMsskd1ZeyVvMuVYLmndbjtZjL68Fu33BthtY2oH3uEspmkeEVB/EvLNg4DQ8IluNsIM2fDljk73iOGoa16qoRM/r6/cpu+pIb1N8cbZgdEMuswDXyqG19Ym8bBGtYZZZxoonMKMgi9bEN3ZBqQx5DUW1R2wmfc2LOCJLQ0SsGW2ENjgxpwOczy1P+sQKydAJpO8SO9PJIIwXz+qbrUL8wMfkFfWTIIWQdHlN/lAg7eKRRjNmL9cMKuR0miZ4LGMyGeDig5l2n3US0kYrOl1RFdMOOpaKWF7AeKa2m/mj/gFvMPhIfKthmGUh/izECAddf9wx7MurBWOk2I4xqZX+2oo9Ondo/JbKcqmS4Yo79uzf3eM104sdy4B161MFkoOe6vbm8UuaeIsXvGQe283N37J7B7PlFsed2izoQw7FiaQ7s7qeNrdNLBl8yTBrePHLP7Q1/OMPdV199dn0/t1IsT+ja/WBY1eXLcZIHJwPclNzX+LOQ8pmQdxPKaOLmeL1esGDGfHf2pP60HPxZs2Y5mzs+3Z3M4h3lLJhVNN439easxjokcydafz0jiRYXbPOnyuaFN20qPRDSyvmzJyI82x6Vv+4JzIjpWPwHq33aCrZ0eP8eOadVUh6dbEikS7b9S95HCc90e43iu8fvyFpR/5v9t6jSZLkytb8jHNzHh4kaVWhgALQPTPSMv9/liNPekRetzRQjaKZkUGdGydqZBaqmYOB56tNLzt16RLhpq52VfWSc89JNCnD9JQ/8nB8YGbHmHN5sG32LTdjg9k52J68ZOydxcaI0M1zikLzwsa6k/v413yPZg+QCGYX8n+7RlBbCfqo0QXyPPL0JYPRoAUjTaqoz4jRTZ9FeyLPpN25SwvLCUm7ho0qCaTbI6Nf4zgu+VbacfoywPF9HEzGRq6LHtu43vkBbYsS25e/VbOhLVpssyCK5eUZTS1GM8bsRrKDfKY3DkTBwNR0SHSZgQjtjqRsaYuEWEnHuVMfXJ/Y8hmVHFS0XJAkPRf5AhSFX6uV9HWF3loMqodPNB6H3dPZfIvyPe6Q06bySulsDasRWGNB9qxsoC4o9I66GqgL6SzUjzGrxZxo9DjsZIakyB8Ys5xeN3hKFF90cqAxXHrrLWEg7aJJM3RfUBxzWsUudawS4m2K8RYIvgZgSBrgfzub88fxBRjzZXwZX8aX8WX8tx2/GQl6TU/V/wBAVhl4jcGEGqFSLc3QEVsahjESKRLo19YF5miiF9on7yHWp8TaM6KxGB6lh2pdTenKEw8/3mMocuuLK5syq7HcA4tIerf6xKDvWwx0DCGf25UlUXw+ddu3Ef2EQamPYwdkeU3T6VwGkqVjErmMux5T1zh50lvanx6IOmjsgYUSaNXIyUuDtj4wTKVnuE0PVA7cxBeYQnpfuZHiNA6t7dIq0I/W2WShSb4pOHxkcwjPuUPzysI253RKImmxfElnWTSZwHdUWrIdEWNKiYOrWFXcIODl1YxVuOagZHTWjs3YZ9SjwVSloaPLa9xB57D/lVwood0WkrFHZAOG4g0UY8PDcY8xc1kr4t2+OZf76clpe4HtGijcBb3r4GAzZCNCpborfSQ4dUzjCa2S07Jc0HoLrQsZEukZ2rMYa4B9BYni+Ts+nNiVwDgQKt7VZt8w6A3BYsrUUsX9QSfEobNcDO0z0kTAcWoy6XSuvtUwhMwOdL/ajNYDhWnTfGSC8Y5YjkeYVmz3SkXDazgGLtptQj9KmzjqT6S5xmpp8KBSsMG4Zki+x7Cv+fOl9NKNlcn2+Mjh1/fc3cnfdbH2qIMSt4gxOc+N5x9rZ4Mgn06ZBAGjpiIcr0HsGpKxxlZb1gY6UeOLmtCTtj2dXiM6mBkto6rPtiQ45muq8ZG7dzLa2h0Fla4RRQtaJUba3J8YmpwMwW6ruC6/XbKaBKxW51mBUZdrVzQ+s3XIdIwwepnlObmPPC80/MLkVtzK33d/RyNm7AqTS0d68nN3SnPZ8SH7mTvF7uFubhHVgVjr2an0ZSs08h70UTBXEmalZfFc5KyHgexRZiBO4wan1ujicxHVqndpPbl/zElGU4ckroenK5YnTeNUTLBM0BVjzPflHXnREnc2bqhKLIuOwtXYVjWaqqm7vw5o5oE+0tkdlfL745Zx4TC1XTTFrqRvRqylzqnQsRToy9RGRs7nmxw3LHp57nS+xql7TxzEGKqempQZ9iwA32TI5XeV1YGV5bJ4u2RQkVYeeYRBRzVO6JUAQd2a1LSEq0uEwjukjeColVSXAaEl5+PqNtkJfG1EM+Rnh7bA+AzBSrVNKOyS4CNgbpMxnVvEfUyo6vi1XWMlFYIRQ9m7G7U4VcHmoQSVZh33JSLLedZbUJmPMhEc0wTH2dGo+vkoeppiJPYtXMV8tNsWaNYPrIvXtL2MItfx5wn2P47fvARtu+MjY5IpRsgzxtAkUuH7mHU0Y85Mt0GXG9ZySsZTyWn7DkNtzms7IHfX+O09d3tZBwl8i6yyccw5odKwG4oa0gNG5FIWsiAqSpvZi5Bml2ArpvBhGDidzsEFrufjaJNPUkqjP0OzE0pRkysdtue8xkdnDDXiVj63uNugmQ59lrFRum6NrtP2FYMHnlJlaP2By9UMP3SwFDHyYrnE03pMvad3ZBrBiXR6y4bpFEYJDvoob/T342lfMdjep5RMjsvpKcUee3y1L7xoCtGEUOh4CuFp9y3L6ZTmKNBsaWCGrzHTDazAZ1TUb56nodk2GnP6Wl74eTtiuCba3MJUF8PTw484roYIPXqFcJ1Pzy+WOIroLRu/geVKXka26Eiec6zYoKvlmrjCRctcbN0lVuhQ33K5nF0xj5acaqUiXplkdY3Z6rSV0kkTOkMrcOsOTREyj2lLvPSxKw2UQkhnm4yiw9QrGj5PkBt2DaF5SWMYXM7lggq34eHugpsJlB+UZEztMcsB3WUn5MYJtJi3/gueg5JSXVr65PdcoGNeBJiW0nrbfM8hM/HWAgVS5Pe2xermBZvpCx53P8r3U2jYjovpGhzPWdP4oCjx5u4SRIlhNxDKZ+TbE0ZoYe509FoRL89t7DGmKnNsV6ltXK4JW437+z3GKP9u4cVomGj2msZQqbrkiOVbiK5gUJfA1dcxtXhB8f4XMl2uy42Y4uk+YXBuu7NROqnBuiWyL7CnGqlCdLfbiiHNeC8MbKX1aE9NNDPDDQziqbT32kmpt3dYY0gwyv1uRh7tTLDJCg4bpUyTNEynr/GmIcNM2tO8bbBHgalZWIPcs9rPA4+i4o11fmkPrQmqdhbNL1laMbUQCCWnZdYpswC0YeSxlXtAGCUYPfaFx1LVdm17jh1omLqLUI5AWNiIWHDQeyJLftb4OmPuIKIWb/6RvN0nGtd08x0//SpR2GvNZlycO0VG1BIFH8n3bcYiZvBHFgr5/pzl6P3ItizoNZUONUa65Yy7quCo6MZCy2S1uKR04ClRDkTyhNv5iGdBpzT3ylJH6AFFWXAYlZJOLFhGM/oBnFYBY7oB4Z4DY5IsxQg7qg8qpXk8MuUN3UTDcaVtO8LHWVxwOSSMobTZSu8pk4rBcfHVep4K2G4qanHCVmWk0u9xMoFrtMSqVNZZgtB30DqNtJZr4GoGpi4wmorQkHu5Ukr0/6vxm5dgK3SW6ha1G0EvNPwhIsulwZ5KnUXvss92GArh+PrFlLJreLN6haZO8vsf7xiPHQt3xqmQL/bxXUqWbeGkUVUKRbpYIsqahWeBI0+KNLnHizWaLsdT6hVmVbH/zA+7CH2yzmdzlDnrqhechOBQFyxUDcfqKvoxw9FNDKV/Fi91RgFN90iuuP9Odcd6GZOmPX99LwEilm0zMQai+RyU/tmz2RA2giLPia6l5+Z2NpPWwjYsHBVZWu45OjQpa8p84LlRm+nRpu9qrhcTjKnciIFv8WLi03U2WSIvj15o3D9vsWyL65mSlHJM7PrEqNv0gTS6/WGHHoQY04j0I39h6GFrFk0iCJSwpx4u8HSTnoidilzdxfpsvtHLlwxli5m0TNS+1fYtu+SBaRchlNfWbBM8zSOObFC6e/GLGQvDQksEl5qCyLsBVpvzKDqCUtqKfTgQNxDoJslTqt5FDr1GWQ/khQSfLN9esFjPEdQ0n3GIABbLP6HHEc5Qsdmrjau/ZvX6kofsxKGW32X0e/TJBUafU3+Qh7tvDeThgv4keNxIlv5X8z8Tf7NAHDtyTUUuWx/35Zr5TUBayHn85WSx+oPBuhV88ORvTdL3mIOHo3ssys9cKgq0UFsBxzzDMkNWrdwDF9cX7H9+T2VUzJUaRv3Y4F3quNOXeKP87PJiztOvt/y0vedrJWQ6fQVCszgJAUocOJguqOqBd6dHzI+gkuULtPgCw+zxIiWV4y6wwym2fc445SmQzWAE2KPM4CRbFS2VFg+eztPTPW78MarIGYXDzL7CV9mGg7jjXXJPfPWGSLUM1NmR/gj7v93jfiN/19OTw2FbcPnnrxmVxNhoNDiOiT5aRJ5UtNg3Dq/alPnqPFLphEunatFtN+DoDsJsiWz5HjeaoBtd7EmEprwZU7cwDQ8DgaUun5mX4fsTmAQcdnIuhveAocXc6Es+lk8zjmj6hMEeaCpVx3V1Mu2E/nTCtZXqjpcSJOcOp52mdGqNr68vyLqavh6xlHrJ6sLjQ/5MUTVMFKjIny7JTB8RDnTjG/l+HAN3HtKe0k/RYWfEDGaPXsOonC994mE3HVpdsfDl3MxRwws1uqyntWVdc+V5NME5GrsXJb0w8ZRTHs4cIqunSQ9oo9JZNWtC3YYh5KSrNodNCbaGVbYUH5V+ihRb1wk6B0cB68IanCDAFS1eJ/fZaEa89ScI0+HpKP83nVmEkwAsg95XUkrJuSLO34/fvAT3bcFa9UgNXYnWzThqHrcPPwNQP6TYs0vEoUBTBfbqEFG0OtZoo6dy8zSZx8xb47zwSNTFePdvv3LcVGwfShxlYPEiIHTm7LOKeCYN2dau2B1aFvmEj62DVdZjfQYR2Ncmabtjp1Tpuy7nIc+wHY3xG5XmGwWb3QPrYMbCVAej75GKmunrNaUqMht2jfVygr3ZU2zkZ32pcRoNatsidFXROrLpigP64DNV0GrbDnk9mzGOBW2netGePqPJZnvY/cjzUToBQwBusCBzJ2hK3do0XdrBAb3nbx9kOmvRC7pSsLye0Kj+x8NuQ3Z3x3wZsriQh0Ktl2h6y7EDoYrijlER2xHEOrqjCI/FibEc6aqMRCloj/v0bL5tmUFtYFQdealEevsOxzZo9ympQghbHbTliDE6DOr7gjgkSlfoo8bNTEaghmZwqDOqx4ziQW7Q/r5Er0rsUGc4SSPOaoHljIy+BUrmRtcjPO+CY7nBm59fKgBWNlLFJb7ukPNR+ihj9DzqXzzsTtpdEHkMLlTHCaatehObCq29ozJGjIU8jMtux/PdFj+8Ilf9pO7N13h6TNUUhDOFNFwk6LXDr61Gaymv1ZsSe1P2+5Q6ONfC1Ccyldh3HV1ns+1aghdy7V4vY07JjMXRIFRq5m4kiFbXBK5Pq/T0jndbxspntbwGlW5rHgcOTktejqSVvPD6rCRve4QNpwfVTxbLR8kpAAAgAElEQVQ+YTox89/NWF7KQ3vd+7RDwRCdEybfpwc1X5ciyBjNCZUCspwsHU9r0KcxgdIFRbfIhju6oWIayXc4bo5Y45G79yOpcgJmjsmk3+J+veJZOTw7o0On4/bHBUYgHUbX7nj79R/wRoH1KAnZs8jiUJocdueXoHZsKBShfzFq9HGO/pRxVBJW1txgaHv6zgBlKwEt8/mCK2eCU8oz5fL1Dc5cp+tSjEI6pdOJid3bbIsduoryg6cphtUysU3eKeBWVvYEoUvZC+ZTufe63qWenkeCQoPRlefO0IRcLSJaIagU2rzrHcTg4q4cBpUdMG7W6LHFU9WQKCm0V4MOTwMbIWiVDt8w1jiuy3wNZfv/OTPlMDDdnhgNOZ9q12J2BuVQoyvJKWdpILbnaNbGMgjH7pOknqf1JLZHWyaInSypTeMlWiUYvYAiU73Ch5qLeKAUDvt7eeaIQw+GASLm9E5msCYx4ATous9ylO/HMm3EONKbA64nf9upGTBsG9FVZDt5pjj251uoPo4vwJgv48v4Mr6ML+O/7fjNSLA+3bJR96TVauSioNzusVTzp+FD0fcsVheM8sLm+HCkbzqcBSxfSO82Si1mvkuZJCiRdtK4xyhD8L8H1SNWvdsxnWkILcQepbcY30y5y/Y8dy3jk/y7vtdwo/P0ojVZ0h0fWVzL3sZ2dBgTi2jW8WYiv69pWlojpKg2DEquqAB0LaRau6SdarT3YrTeZPQF//JPbwHIGXh4yijre1xXRrRj5SPqHMuwPgFX2rah9TRczeS0l2t1FZwLvy7mMcXYUPYfGz07Xi5WWOGEopaf7fZ7yn2FGfZUmawjNHpDNJ8SUvGoxFM/3D5hDzn+cInZS+++NgRav8G0pmgT+R77emQR28zjK44K6qy5JuZkRXVKKXbSy7OM8xRNWR6xM5/jpsZRkWrgmqxnV/z68AvlQXleo0PdCHTNJVJw82jhErQOXhswC2Rabn/Yoz9sqX55hKP0At19juHp2JnAUPWKoWoJ3JgXv/uGvpZRjzs30MKYlQWadV6jAMg8h7kd07lH5qqYv30cmU1s3q413mUyctGEQxStcF5HHFIZVZzGmOoeHLPiuyuZGrZKm2fDZdmbLC+ly9+6Eb5vYq91vlJdMEO0oHvcsEkecVSLTB/1RLOAxcrhfnOeFbiKpC1uRov0tAcNaiG3px7oTCYudWZTPco0kndhEoQup80JX9XAdzcZeuvjGC5dLqOPX55rku6A59W0GxlZp9T0fU5UG7QX8rnDqDNoPpO4x4lk5DvOQpZVjDM/jwQnjlKH3xdUuot3MWDIRAXzoKEb1yydnHqUdqdZe5ymZLW+YFQ1rNztGewJ4gDLiXz/vq8hTJt6KBnvVO/X9J7Y+4rTov8E0vlueUGbFQxJQ/NRSssK8byEqDkHQsz/8EeOt5L1pisSLrUbMmOgNKU9mVnD6kVAmuhcIKMKMRgsXZ8q7nETVTsbD7w03rAtj7xayed6XcxzXmD7LUUn97l7qdEPA20wY5rKvbJNEvSqYHb9FlO1ddR9RRgPZ/M10gfcSvb6XX63pLRGbrdHxE61cOkFXjSgO1N2nXyvbb3F6Fz65kjdyn33PHPJ7Ya+1DjupZ1YekwUGNxmBRNPfnYxn+L0GvumZbuVEa45MwgsF6vzYFStTo3gUJ8LmmfFr4gm/kTIYGc1geVAYFE/yP35/Jihz3WWZszUUQDEsERvOtaMlIr5qKpKHCfEqDvcRq6xO+h0bs3kMsbXZCapLAe2Pz8Tv5mBp2T20oKmbmj7BsNTNX/rvwCMWQVTGlXnaCqPIhvYJiduYhl+O2aL55g4fY2pLoVqm7HwYxaTGarnFiu0GLKUoh7Z1fIlLmYTjNjg/eMdYyqfYbjgTgKaviVSoXvrTNA1i2SXMFNqzM4ixnI+l0LQMcYIfyEffGpdZoFBFFegGtL7YCTf3PF0n6FZMt3y7jEj9iKOg4WmenOiaQiaDq3J4htpsIFmYi9brEEwfmyy0wv2osIbnhFK602L1+ihQ5pVuJa8fGdXF2fzLesRLJeFSqMFXsjlpUfVCQ7qwHrc7jDcliAtsZTBOjObydRnOp9xyCT6bj6vGDqfwXIplnLTlR8EdSekFqGQB0pyarDiDpFmZB/rdZOQ5dzl52NOMcicfuB8JmVnhTSRB4mJoS4eR7epW43p8hJD9TtWmSB2YvJ3T8TX0i6y/cDOyIl0Ay2Xm+jp9MyYCtwaOpUu3j/nRLGGGzvM1EHRmAaXyzUvln/gsZEXV6llmPYU0zIolE394xiCnNx2cNuXMEgKqubCotokZIONprTkjtmAOxfYesiTkGun5Q3heoJWBewUY9hNdOL64lvacYal0rIPpckbs2Q2f82DqlU0P77HfnnBVHtFMsoU5OHujnaTM3MD9OP5fH1ln1aTsLyOibSBWq3Tj98nkGqkiU6nGu0nN99w+6Giqjtc1XeX/ZyDf+DwXHFIlfp2XsGFz0/PBRuV4n6fnzBEwnKVc6fqrk+Jjt9bBNrIjdILncWAPcNQdaO/H7VqjP9wSLnULbyoQ7PlAbjdnQhnCYNn0E/lZTlrPbIw4vvbH3A7ecjGUczmuCOKLOyFtLf8VFIOG9KDoJtKB3Ly8jXX4Yq2MrFvpE0UQ0s27FjbMWMjHRKzfAbH4OifO8hlmX5qFp/Ggtw0ma1iGOT76foIK/KZeiG9UmBvh4DKFWjNgK9+x+X1JfGLEPGfLndH+X60Zkfd2GTtCuNarkutpeyGBVdGxN6SEULnaeTbAduPP50zsefQaJ9pPp/4LCaKGMAdOJUFWt8zWch5mG1BOtQUh5pGXRSWsOlCD9uGMFJ1TcsmND1ydwB14TuaRV50RIaBpvQzH3rBWLfkpwRDofonlocROry1fFqhWG8sm7g8TzdPexd/EpGpvtD9Q82QPvPmakGsKUeraiHtCfyOtpPPjQ0XrzM41hko9L9TaPijibfQ0JB9toY9YvYFbydXeNfyvDQsh+B0D96CdKrq0XuXzCyYLabs93Jd8ua8b/Tvx29egmGo0Q3yxh4CF1cfsbQRFKJs1Ft60ZCnHTMVOCwDF9MwyJ8rHt7JSMPtTeqi4ZifPhViS7fjlI1oixkyFoPS0TiWJdEqoI/k3yVZTaaPmK3OcyZ/zNwMEJ+ROtyVKTs9xa9US0O9J7BqHpKGUTW8a6eSv33YYFodmYpeDy0UfYm7itGVF+wuXGzXRO99yl4e0Nc3U0Jnyfv0B6xBrkG1rbmIXL558c84a+m5PTwVxE6AYU3xFCrR+8ylkiSC0J+zUM39gSfFfr1JyHCUv7UUCZMgxrAtLFddsp5HN3TYnuC7r2X97z8/dDhpiNBN7lSD+rv0RGAFBGaDO1e1w6bm/XZLouk0e7mJ16mHZq2pdANNwYF7BRP/+/Fi/Zp+cCn0hP4gN4ohbIToMGZrJjfqAPj+jvJ4gNQheCGfOxYd5b7CsTTeK1TmTw+3jEbNKe94updzyasc27Q4UOFO5Nq9XV8y+g6DN7BcyU3xuBsRXU8rBrzPEBEAWLZGrR2xdUGmqP5W/35iF5nYoUNqy835YFb0o4mrdzCXWYTimOD87PHHy2v2SGfJnbwiMGJCd0Wp6t1/jDv+o9gTPEypXAW0yQaMQ05r6tiquf86npG6JcfHgmTY84/DV0w1sywgGFuOaUkfyPe4uU0Zjg5COIyqlpS5AaOAuoLkUR6MOyvheraiF2CpSD0zWoa84enhiFB23D0fwC95d9eRq8+iKKbXbWy95tTId3vKPJxpQX2uX01hq9pUozMGPvYs4mYiL97Tfc++3JE+3DKqFox/FXvqNmdfPLJyZGZlMf0WLzxR+Q3TRF5ksRNhVR6pURFetGrdPS5eT2k3a56FfMa//vTAvNuxsP+Fl4rrdJs06HuBOZ4DIVrT4CBUFqGuaKM9G07kvapDvU8RxhR9VqBAityIHWk14k1eEMxVHVvUFKe/4S1bokQujGsZ3Bs54fSR7TvpHA3OC1699qnygULhJb4eFnxYbsnrhImq2c6ikL46z2TczCOmS7kmZWdSjz2tZ+LncnLL8IQtLFYTH7FXRBNuR6sL9LohP8n9tOlCcifGWE0Y1Bng1DlD/kxiRpiespPdFswap68ZNIWG7qHZ7NmJHE0hMv15zOCcXxvBKiYIfbRMOmltPBLPYmxh0Y7yfytHEPc6Y+cyUYw5Sb1H9BnuCVYKLDT95gbHNLEmJkku7cx2bUzDZnGzQkPaQDK2LFeXpJ5Oc5B2PJ/ZPGc1u+0TO9UCVh//C5fg3V9/4OKr7wC4jF+SewX5ULF7ll9q1TW67tProPfSYMeqw/ANKlOjVgjOatRoBtikOamqqR5Fy/5QEftTDnt5eJTFln3R8ja6IVabPTCm3NgCY7Sx1HQt08Bozw1daCP7XCAUwarQBPrC5pfv/8bPj/LBy+s3dIaHFetorly4wITOCIi/fclKHahaUDImCZZnUSgmmOl8xXpxw+GHX7EU2nR0BkzhweWc8EJuFL0BKzCZ9Q5C9Q11fXg2329u3tA0GoFqS5jpGt2hoh8C3q4lc4t9Smh9Hcs3eTy8AyBrUqauyXN/4CtHHgBDMGeIY8R+4Gmr1JgNj3014LsO8Y0CSgQOw8NAeSqwVR/aYFp01oTpBbQq2vaH8xTNdvuEP7+mZaRU6cWmGzE9g8ie0qr+v+24Qc8bglEnzxU125PHcZ+jhUv2qjXlcVfR2TVV2TEoUJGDhRW6tKLAUGxF1ze/w/j6JZ3vslCoWS00qPwevdDRrM+Xtje3T0xfTtA1H0uBHY4XOoarY9Vzel/axNvBYly+wDMjtKUC8txXWKPGU/ZEFci1+KOrE44BY2DTKh8sWF9xMXrooc8rQ/7vLurJ9iWWcWT1lbTjem4R5C1m0HK8PZ9vrVoznHjOrnhGizT2eznn+7TD0XwmziUqeGU/6KwX12TJHR82H+S7OOx5vMoIawtMlQIyWu7ffaDqSnpdTnp9EXEKp9jZLwQKBDF9fY0x0bBdhyCS9t7QEwYO9ecO6Zf/p5yvtuPq5SU4FvFcfv8wXfI/3x94zAsMhfz2YkH31mb824zsSpExD+/JiwdIBO1S7sVV/YEx7rBMQedLarbbH3fMr94wBAXdf0ibsOsjtnfBYDegQF/RNKYfBEae8Y/jVeBwWCjUSlNh9QbDoOGvpL3vtJzeLrE0i0iXIJjZ7IIRl4UPPdKOP9we+Pn+mevLCZHipnRdh2Uww9AHHlUrxWVjYkQ+s9DBVz2w+tTim3pOfSxZruWFVOwyFtY5eeih64gUM5fvtaRZz1DpmEKuZ50k7EXGze+umAj5fuphwBwMsrYHxQ5k5ntOVoFRHbFM6UDu/ZTidI82QGbKNXGFgWWE5McERfdLW0mqNUevcBy5B6ywxzTPr40PP/wni6tvUV1NuK5LPmhkXUOjLq3uVHByPZb7R6JLaQM3lyt2O8HRzbmcfQOAcEwcI2Aysdgr0FdRdQxlSdFoZB8dl0LDurJxMBg8+ZneugR9QTu2xArVPFjnIL+/H1+AMV/Gl/FlfBlfxn/b8ZuRYHb7I4YpPdn5795ihhMW1x6jYh7oP5zQ+5Bsu6feSa9V9CGx42HpEMYqtTg63BclcSzoG5lvrzWd4MLGLhsG1Yy8P86wtBJzYrGay0ho5rkc8gMvXr3EUvyPH073PP9yezbf2/cPHNIDhQLu7NoNCWtwPA6p9AaGNOfhtGdIBKEM3HjqStZXIdHSxgxlJLhY33B89+/0vU5zlCmtx1onz/6T01BiqDn7s5h0e+Lff/oe907VNpuCdnPi8uKGblQ1xui8rrKaz6nbluZjBFWcSE8Jj/k7/vAvss/LdnWyrkWLAnRbAo3ypGHwTLTHD3Sm9BZf/+5PHIqe4y5h+yjzvB4zzGiCPw1JjnLtnN5i8vY1TaXRHqSH5nkN7WBguCOmKuQG5nkxuexNRJ4wDBr18LG5XTCbh6RJy1GolhgnxLN1oskCWxF8d6p4f3c8ss1kFL/NKlq9p8y3zBcyKvVinbzvMSYOvepjrOyRfugRpz17Ib38i5WFbY3koqbLP98n+NwLrqopD3MIVG3Wcpfc/npHnz8yWcpIg+CZvrfoq4JvrDcAPJDz0+bEahj4aqoa7cMDBytnHK9Zv5ZgGdvqCMOIsmqZePLvwnhN4v0H77/fYJjqXfghC9NmnLYsr87Tt7tC+qOLSEPoLoc6oxUKqh7ZmL1LafUIpV5hpgNFccDYmcyV2sC75wOn48C1XZMZEhaeVj2b7Tss18G5Ua0kZowz7AgvlzihXPe91VJnFbZ+wPvISlNZlLUJzXnz+Z9uZFTxt8ai7wYMU+Nf/yLTvI1ZcMLCuZrSqYzJzSuPLRruRcVJJXHa/EA/M3nhrvFCxSV5cGhbm05b06i+0/DSJ3vKaL05wyuVgalc9PmK2XTJoGQP7hqf0K+ZTM+BPO96B7tU3MP+NSZHvFmHXspDoEje0WMQWB12ID8TkYOb7hBGw2Mp7ddId7wMXZ5/vuOobKrWA/L9iO2Y1I2M1A6dw2Rmcz1YCNVecPxwQLc12k5QPkk7/qcX37KendcwRV5QfjSTLCHAI3BzClXD6ayOLk/pkwtMlUXpNgeENdKNRyYK9GcHC/KsIu4gd+Ua29oAmJSnDMVnQrxc0IqO7OEdl6rP2J9ZRFZAHERYClPgGDM0/Tyy6k7PnAyflSL0MBnwvAhdh4nqk6xsnXHbkLUNgWJrimOXSI8w+hFNkabohsUkDJhObaxOZiXEQWfvFQwjaKq1CT1hcHrcWcCykGuQmSkvgzX7UuOHX6S01/Pt/5/8/R/Hb0spdTlDJ9M0TfvE8uaf2N5mDDtF7mxC8nwPaYsYFW3aZE1ep9xYOrqqJfRDx8VlzMESpCd5eWmBy2LqkW1r5kIu3EGU9JaBZvn8/IvsRRRRTEvP2o8+hbdaoUN3XrMqRElfZRxVP1T89RrT1TgmOaWvSIH7gJNxYmKN5ApQsLi8ZLqKiddTLq5VI/ciYBJ8x3w/JVHIxaE3cWyPK32JtZSHTJOUJGmDPsYUqJ6raktHS7WbYCg9tY/sEn8/Tnd3tLgMuZzHqdry+LChWC748KzQsX5PM/TsH+5wLlWKdLmkaFJYThhUv01yX0Ois9uVaI1yUtBZzi/YnjoKRUTr+hHbY4JmrghDeZE1g47Wp5T5QK3m2QwV/zh0RtqywjFiNFdRrnUFdSFo25a7RNYhLN/Gu5wyn68Rbaee6yFEQ9fqGKoOcUy3pKOBaQperhQzxDGl1kbcWYT3lTT28bVLZiT0hkffywO/0A2mmk18uZIKE58ZkbFCTKbMv/M+IYur454QhzHQESpNc49P+f/8zKs//4mZWs/G8kjDlKA6UKlm2/LnDTqvSRKN3pbPDByIV+APF4xK2SQfWh5/HvC8nkT1gI2jTZV1TCczNOc8XefbijCeEc0baAuDTJMHatcc8f0Y7IrTJlW/w+XNxWvEeKJs5PfNfIOgHBAPsNnJFOmx7em6kvZlzfEXhfoLW3gZsZw6OCr9WyR7kmZHsLTplWpKUvS4VcPkPDNOdSvnNikFj0uTutri29J2brngtOvx1wuelJzah6pjo2XMVitiTZF7rwKcsuExT3g1yHf95NqMQ0tj7LFThVJ1NX55fsLWHZaO3Mdj7zLtHb765p/x7t+rdX+ifTQ+lUP+fhQn0HtpA67dYBsOXT9HtPJ/H4RPOBuZZIJOpSF/cv7KC2dJbwhspVLg6D1Du6fMW24TeZaFyxm3HxoS3eSoEM3x5Q3WhyO3ZcNJl/vCni2JtZgffrqnV9JzD29eo4lzJ6NCo7XlHgv7Drs7omkOQkkyuHVHhkN+yqkKJelUJjRtwmBrdLmc72zqUBeCp2IHSifxMDZM7BrfGqmUAzn0As0PcS+mlMiL1u08diLDNl1UeyZdnlCezu03tkY8d8BUCkNBNKE2KkLLYOykg+doDs50pKBlvlJqE45GPC6xZzq5UvXxDA3CniIpuGsVe9GVzbyPGLKed8p53+cp8UHg9RVHVcfcpE+4X33NtfaSnS0Rbf5vE8b89iVoHDIC1WRuuC2hObDTLQKVCz82cPhwQht6zEr+3X3zK/MR1vGMTSY37Hwc8VwDpgbGpRKLTVu0POe5SnmfSmN6LnKmL5ccmoT6vTyMpjc2s0XE3fOG1JeL+cc/fM3s7vyXGbpJm4+YS8XuEFg8lgced0caRZmUZ+/QQpvFIqYd5Qvz1x7mdMFtKbj98W8AvKh/T2y7mOOMg5I1iil5fNqz9GucXh1uYk8YT/GtCZ76LJw7NKVOmhR8cylBANbsnIHldMrxHAPLkxfA1H5NfPmKD3XNqOpLnTlDr3O6ZstMtS0I26DsZhh6QG7J37DPdcShoy97LGV0VhQzCVcIcyCTe46qBZE1CPELc1UPCb0Ov+0wnYbkRxmpfxR0/fsR2gZNWyH6HbaCpfduw8PxgDhodIpt5+rrb/Erm6enJ9xeIVrdnn1Z4hiCTnmu48ylM3Q8TWejSAUORo05syljB+eNitSuFqAPnJ4LAhX1rDyHnai4ehnS9/+LZvm1TzQ1WdgxtZLmSo8HLlY6u1InPyhh5LxltCd4bcVRIRcH/Z5F5EHnMLlUa+EYpGOLVdWUd9KpuDcG1uvvaKOeh1rVyvMeLQ4YTI1QsfRPuzn75f9g8/wViX5eH+7UntqOG0SdMhoNJfKg8MKUWTSQHSwsFaFnuy1Pg8aydQkspcW3FTyVGXE8o0zV++mfMYWJe4S9qo0Uo0f5IWNcPFN00i7L7MDgPOMPb7iwpLNlvfJw5m/QOc8K/PIkL4+2AcdcwFzDDyWo6GbeYnkJqT4FxbE71jXh5Qrf8T8hQX85FNwVO8bDjkOvEH+GgXFh0AnBVJEKeGKkCdb0iUOtHNK54fGn318yLRo2R3lQRmnN3dMDVX4+X8sYSZXY9E0U4MUtP/zlDqE4ci9cmA8aQ1ChKTagobAQkYaeFgwK3LFlzy45chUt0dQ+2wgNe/DJCYiu5LMd30ZgobsN816u5+Jbn6D06c0pO0VDJpI9O3F9Nt9jlvA7Rdww6hpePzCMFb5CxXumCV7JY7LhtJG/v9c8AjEidhWtyoadRoui6jl8eCKMVb0ynuBYJUVVY6nLXetdJprGK1ujVQxWS8eGNsdIUxzFf5rkOv32HNgVlQX9KDBMBbSpE9z5nCieUesfqdQGnFVI8b7m+1/fAfDHVYl/MaFMT+wUatpxLDy/oGpMRCsdiNutRzyJeNok/JrK57euTnoS6H1Op5zI7VMO5i3rqclMqbC8jv8LorqX8wUvbuSh8+r6CsIQxIEukmmfYWtixAP5Q8pE5RZNr8ZyJhihxjFVEhquSyFOpF7Ai7fyUvjbX99zqlv0YEmr+DU7I+Jm8QYrrrAV0KYTLfb8golWguojqUVDZJ2jQ9NqxGJkRF5au8yhnwZovUWZKy/Y6ImFyaA1oIiXp/M1029uqDKDD0fZJ9Y+7LnwR8Sgs1el02bQCdyAJjVxbPliw+kMWyvZ/3wPSm1cH23un2oc26NSuoPszlMIQ2XQ2CbdRwVtd8SNNERbkxzl/z3c5sxXNlHj0al2lapasn8oCOKIQqGx/Cjm4X7DMpzw9VfyMLKMgV83W4ZOw1MACDFoFH1Nmg4UrVyTq8lAPLOxj/f02cdC9HnkOvFctn2O2Q+0g6IkahpavSdtW2YKCWpoI42dUqYdjhL8PJkNu+KA7Yb0qp+ycmsMzWRwDUbVYjPpVzy3GYMGluon7F2Pvu8ZzIZGsUWUhkZdHhg3Wy6VMOw/jrFtacqU8lnHUe96seh53jaM7hp3UO0BFcQLn6d/25OclARNE9BbCc5siqWcoNHQuDZ8Nvkt3Uq+60etRuxbPOOOQ6MEf/OcyKsIJjaTqep/s1zu331DsNjC4RxuadlyK9b1A522x76MmSki46Kc0K90rHrghQIBueE15bZA6OD5SjLG33NhegSzCaGK8NjF5MmOX+sf0DTV/jHo2BwJBpuZ6mNsFxHm2OBdzImvZZaj10yswKH4DNvRf/wkI03N0Qk1mzotcecqOp7F0NsErsnr1/KAT4wNhDCJLjkGcp2+W0wY/CNDMEevFaVXXrO69umeDZ730haTA3zlxbiewYVinPrmxbdomcedtmenWj+MMqU47BD6OaNJGy9wFCqv63KqzmC6iEiVs72cVrTWDDSbQvWXebZP4C/4t7/8X/TKKbXda9rKYFNb+EptvbNqvOsV83EChmJgqTUasaOeX7FWjr8vAuwrD6u54ErtL8eOCOfnx3CV76mUOPY3y6/QriaIY01RqTWe+Ew6k7a/ZVQtLc7okRVbvGCK5SnHTeu5aF2+/fO3WEoD07ML8n2Pbed8tVRUlL5D7NTcLNxPZPaxq1GMMZZpggpyHKfHcs9Bibav4XkCR2lbjrU8I7ZWjaVQ3kFnUZYJ1sxCKATvQST4XUjp6RzU+25SQWjMsE2PRgF8+jznsSpJdYtAgSbD6YyiHomjkVFJKXmv37KIO6xS+0S+PVufI/P/fnwBxnwZX8aX8WV8Gf9tx2+L6i5cVnOZptB8H73RSI2eDwd5d6a6SecHoO9JSsV/KXSWa5PdviNT8Nbl1MafrskqE3Oqah+TjsvFFYEoSVvpGa7EwPrmgqRLuBTSG3OWIcsuJwj0T6oC07JA089Jfd0esonHUXGHTmyLwzanrgv8Ss65rHOCpYV+Cj6pNCMGysTEcBwuV3+Sv3fMOGU1mtZw+fJbOZehprEeScodzw8yEprPR8yiR681tI8piKbC9KcUhsdffpBN2kvn6my+aWMx7LNPnmDZFIzdBK9s2SqYd1801OEF37x6TVJL7+l501CKGscPaTPpUdqahdHqTBcveLOW8/3p9mf2+y1GH1ON8l1Yrkel9aBLWf53togAACAASURBVCWA06gxr/dYomBUaWPtMzDoQ7Vju9lSNQJTOZqtobE7SYaGVSwjiNLq6QuNodEZVN210w2aaKTRUixF+u01NtDSNXuihQQCDd6MNmtp/Ql5JaMy83EgHQt2x4pAJfg3jw1lduCg5fjfft6X07oRP/Ix3YFL1YuZPE24uNwjxpaJIp5+VyW8u9sTugPTpZxbWqT4vYs/pJxiuSbVqeJPv/8dy5cRdwoy3psOebXBvTdZLuR8226DNuaIXY0e/l6undjTlym7w8BP28ezuQ6qrtcOOtBx40xpXbmnEmqSU8fFixAvl+/FKyZkbkj6UFO20pt3o5iwaGXbw4Oci7O2MR2XxV1MqepVfi/wFxd4TY5RqhaW/IgVueTHjveR7O+djA6bn3Ns8zx9O5py7Sa+Q3x1hWY2dI5cp0IX/PF3VxxPI9oLGaW/9w885D9xd0opHmS2Zfp/fM0L32XbCgZkxFg7OcOm4y9/2VKpNdHFiien50/fOlhKRmf29SXPP+V0SU2kTHUyMbiKAlLvXJoor00CQ0YV95sjl7pNEDrMv1Pk0/53FKNGuknRoo//3/L+9o4f9i0TlW3w2oxY6xHJiUfFWrWyb3i/2eDWW6a+UnRfGuhjicGU7YM8F/QXKTftDFsfyVQ0M9Gn7NJzYNfj7ZHTC0nBo71Z8YfpV4gbg+NBnp+6NfLD+xYSCFTG7XLhc7BC9MFEU1JFDj16LHj1Yo12khHe9lRwufZwbA9TATfc0cQZerx0YDaRa3x5/YLkVNPkFoYvF7nqTvwtPI+sLLvjcuagz+TftYVFYkC6B13VNg1fY0gFul6xVWxIUWNxaff0yTt8VSYxzQGzHxFjQbqRdZwXb6/xXl2z2xQYMwVwygRj80z9WDG/kqWT5dxj5mhoRoquQI5N+ZvX3G9fgtHs6hNDeTM2VM93rNyARLEnVE8/87xLub5Y4KuaRvK4Y3P7K+HVKyzVX+QaNuFlTPZYclI1gsvrKyb9jB+ffuTFRH7foR6o85oJGoNKNznTKU3X4XQNr335jNAoSMT5QfLL/RFjXqPkDvn59kfqdiSYhjiGNJTBgPaU4+gBhpL+scsBsxqZDT4npfisGS7dviKMPP75a6lKvL995pf2ASwXs5CpJaOPMLoKJnN0Req9eb/DnLo0hUbRKhXkzzD3mGNBPQygmCzsIWA9jbm+WbH7v/8HAMcRNvcfqKsT1lxCucZuwiT0WU6WLFxVO0xtohcX3Ex0agW/01uLFROyemB7yNQ7rZmFcxKnZgjkfFexQxym1JpNp8nDc6zPgUfd2DCMNnXXYCi9Q1s4OEFN3zscNvK3Om++wl+F9HR0CgWG2eG0SypHx1CppVDXKHcpwrG4zRTQwjZxriPWFxMclTXsNAEiJ7KbT0zzj9sUk5qibzgdPo8OrawAx7UorBl3g0wRd8Ff2exmWGVDmijauCzDL3RCb8p6JtfOzqaIoYDO542S9Enjno3IeDn/iokieDhaBS/NC27+dw9LIYGLtc39h3eUpuDXRtaY69SlqRqqdM/h+RxYkKvGa3u1ojdGNqfiU6+mOXPY1k94hwAnkpdFmglsc8bvL68JXPmZ32js3mUkT0+Mvdxnk71OHE1ZvX7DvpWfPT1+zzR3WLy0CdTB89xqjJ7G87DFV/qJkeej5yWacX7o1ZVc850zYzE8k3czTrr8u9dvYqrcY/a7kHcf/qdcp2FPZzfsjANpLw9374eCV6uAuKzJ1QXdFh6j6/P1An5Uta78Dha/d8gH/1NNeOhdZpcmyXhHlMlL6zE70rodRXYOlOpbQa76kXVDMM1GttmJVDlVb5wJ/Tbjr399x+hI+1xNa060HMTAk3IWojQhbDsascVay1psLyyq4cCp0Ok8eQnOHJdoOsVezzF1Ob/L2ZSZ77C5yHDV0aubMyjOHWQtz9DUPh6PI8O052I+oTdVjVV3eBu9YH5d8WDLvWO5Pe7+hGPrdPpHMguTMDL5xm/RlC7qy1PEi4sJ73dPjApxX9oe5dgyddxPNJGXF9c8Fwnf/7vAQ77vX29LivJ0Nt9VoON2HqUq+6S6xXr+kmU4QXHtY2d7Zn96A1XH43v5LpK+IU0OtJqOH33UytTQNZ2dONDa8pxd+h4mPcJpyf5f9t5j15IsS9P7zLZpefRVrkJlRAp0g2QDfCCCM74Gp3wKgq/AEYck0OhuNCqLWZUZwkW4X3X0Ma2Ng71vVCSPV05q1Mi7hhfudrZt22KJf/1/qog1DgNlleGYDv1B1SnnIfW24ioo5LkBhMa/oVn+aqph2nLST/dHTrVOn+u0HxQM+Pt3JI9b4pVPrclHHU4FL64W1EX2C/+kP/GZRSEfNjs293LRXc+W3CUV3x/XOKG6BGKfNK2xIo0Xr+TCyI9H+nRPWenkM8X4rp/o03P+urvdFrMXKJIOzKLhculz9fUL3r+T4JuLPmYSuixjn1HJUpR3W8LcRHzr45xUBFYUsD7Sr1bUSgj4/u1HipNFNNo0ocqbmzrCDLG8GZ1Ch5quietbuJbN/SdZT9Kr84Pv1GqEsc5UIQh9w0Ef9thFjanqVV0OlmWSfLrDULe7ZsHEiWg3J14ouq3bJKVN9lD67Gz5m7bm8rgvePfPt7SDUlHQp3T2AcMymEbqMlq0eJpLcZdhx/KitcdzYIzR6thGQ13mVK1i8x81jMHG1aEOlA6Zb2MFLq6wmU3l87bfr8njDH86ZarAA/vDjnEo6LuY7AlZOzN4+fsrgsCmeLqIkxKzHnBNjURBtft8YDRbnKEkz84L9QC7omNf2+jU6LWUw9ocAoYxZydGNOWQHSqYiJHRjskVr2VTHKh2B7SmZKfeYe76hPR0tklaSu/+wp/x4ptrvn3lkSi+zmNlUXePPGoN7z7KqEdrDOZaRBoN6NNzIM/PBwWCcTMOu5ymavFV1sQqNNqy5FNyz2gr+Lr5Ek9MCZcvmSjm/rFvmFsu5QuX+pNqYTmuaYoD5dLiW6Xe0PlzJlGHG7iITu5HRxP0nYdzYRCnCoUdGvjLFdk/f6YdSYHZ3oia9nAFX4+wV/I4n2Bc6HTtSHeQl6yZ3dLrNr72iG3L7xqOHWF4S5Y7TBQz1XSw6Kcm+pf/HcFEPu8/3v+Z779f8x+Ma+5UtmW27RiSB7qi4NSrtpHOYq0NvPpMpNLqMZ3i770IRwq/RovmcJSO0KEwuW9PZM3wi5bngx7THx8ZnZJeobX7oaCsa1Z/mHKhyYhJn7rU4t8xDCWHRO7z02PGZTTHqxfoCj+w9H0OTo3nxRiFvEAb0WBfnY83nOmEoUJ5ZwH5ocUwa4xe/ttOKwidBu8y4qWjRJ+TDbnXMLFcuki+63pfMXEmrPxLBvVip/wWU4OF61Jp0vkKnYiurbmeBviDcubWe3bbnrGp2ebyPKo6g+Lu/CxzXPDdEx/fKVai0YXKpnFHbNVOlQ4l1AOGZtMb8v3tuc273T2GJjBUAHIMOu62e+6OGTOFAfjHn94yPSxpLgOsmYootCNOMmNmDOSjyqTcgqkNpG2J6am/Nf+GS5Cq5Fb14x3bR4ompE1Mqney76LcD0wXMf7VnFT1fl1+54Br8vYvW5YLuTgPWks4G4iqGVMlm7TdHrlvD9jzOaVCY+0anVO9J/+5pVK4F6098SqIMEILx1e8o1FFuf4MMOaQcxV4uMpbKsaG2WzFUB84qPTi4mLJ9fKSmWVwKOUm61KToq04inuaWh5kSd4xcaZMWo/DP8qNcmn4XCwvubAisr38W1NssfwYT0CnVNSt6wtaEXIcGk6KkHt7PMeZ95Qsrl8zDRQZd12SJg9UQ0ekUsRJ2VAcBda1x9JXorqWwyLwKHJB+ygX58UY0I8jQZ6yea/0Hrucw6HCHG2uX8poYRHXOGGMJjRcITdn5HfUm5akyqlTlZJwz7lZi8OO9tQy5iO2Lg/oU7HFGATGbM5sJVMS9tylKkeilU+vGpG2/oG0EwRfLAiuVT9QpkNo0HQdoeIiNYyewR4oGNEVPd+2PuBYNsk2oVSpn9rzcIOBycrBcD6PDp2bEcZocnwISFUqrOMT+7wnMhaslb6e4Wxopz6rsMfvFS1buqc/HRCVDupbTO0JXfiGrGv53b97I5/n+lRdxzbpaNRBkVUW48Mb3MkD3lSOV1+faA8wCpP7h/NLe64cwWg5p+gqKA3ulXdblgWRJphYHZZqDfJcl3gVEccexp0Sfc5zuvJEk5c4Cm27zUaaoUAPBga1Pvu6IF/6TFyNeivXgOv6lOkJce/QvpTzYuUDdZ5wezz3/C1P9eJ5AYtXG7rmDeIr+f8u3vh8/6HmA584tf9Cr+cvPMZhRnqU338mWuLDimJdERgb9eBL8g8FRd7DUaE53QjLWzLXQl6N6qItDzhGSOXmvFCtLqXb8fpmRZCfk9UbzsBK9U4i1rQttKRoCuD1090PfLr7I4eqY6gkYtZu3iKqDX7qUiin+75aEw8hrzYX5Ept/qVvsWkPtLXJS9UmYuUF4SzCie/JVJ/gw7qiKAZWg0czV604Rx/fPAce2dqU41G1P7068vFjT1kWtE+ZFa3m5YWPLwLiS3mMv9VaUq3gIgiIV/KC3u1yjoNONwy0Kg0typr+UBDaOmkq11i2OxEtp3z6sGZ/kt/bzF1ui4bODQkU21DRJKTFOfAoiBzqY46rxJyFZlHlJaJ8oPPlWpm4S4LlhEN6IvpOcimPTc922xJGgomKBO1AQ9M/4RgDW+VYdaNP1T/i4ZIrkN84nVIUO3bZAauWZ8VmmxGFISIEX2VSzO58PfzanoExz/Zsz/Zsz/Z3a38zEjycUopG3uyGmFLnNuuftny6k7Uf039J4bgkugmKCT0KbNJ9QeILnInqaVq4fCgGytAgVL0qhaPBQ4vp1Oi29FrStESrNvRjzd0HGW2GVkhed4i6/EUUszRsjPH8/u7zkna0cFRqVms6NpsT2hhxcyXz3PH8gumrCZfxiurje/m8e4taMzFqG9OQnlbfFnx5uaAzHPbvZA3j4uVrfnO14NIS/HknvaW3u5RgYWELj4lKJb55veL2vsetanaKkeH+M2o/kWOS7bZYvfTGpuGcIACjbfAs6QW+ns8gFBwLjU6JWfoROLZLuTvRqNTVIrTQLB/fNAhWioEnn9LygRvnikARNC/nPkwNtqefyZC/MbzvWek9Yykob2WtNZl8RrS47RFiYGwqbJ7SoSOabjGZTX4BGumBjhgHKhc2jfQ+K7Ng9ZsQ7/VI85TmW+rMZivqY4lVqybwomC3PeEu/gW4s35cIzoNr7cYVcG/6wuyskNfTajH83YOAH2c8zi4NNOBRSujlGw758VNT1p4uF9LD3GqnbgIZ1y5EyrlFy4OIR/fCm5OcHEj57OajbhmyeJqxn/4rQRQHfqE9yKlu6tZq14yMzJYB594OGVYynN3ppfMFhr8kP8C8f61WSryFoOBZ3h01p5Llfrqr0dszaXae9iqxzCeTPjm9dfEg0WnyOT3dY2RaoRNy4fsnZpjh+nF15xOD/xwkN92MR+59Kd4+pajas3QszvKXseMp2iqGdmOB0bNpRHnILS6kxHeIHrWb4+0v73D1SR4pM1Cmt0WL7bolCpJ1i5I/vgWVhZfGRKkVN2+4+G+xTg2aCsZfelCQ0863MWMN4rH9rsvvmQoHZyh4t0nmeWIvABrVVDdP3BQvJGrq2vKn3WK5LxUMu9eoL+Qc+fk0KU/csg1ulaRLJcNAxameOSk4PvL9UinmwjRUm5kRixJcuxFzw/bHO8oo9f7x1teXE/RhUdYye+dmz1FbXHcjWiVHN+d0aK1IcY3Vzh3qt3J+kRzuDkbb0vLPpH7Mz+0aNYW4S4oVJQ2aDW+FXGqGkzFbXsVONQbg8AceaWyRr2I0HcnutRCKCUITRtxPZ/F1SvyXK4Tbb8nNBa0A0TIzNRj0POw/kifb6mVOHaalMS+A/x1y1d/SigPI4Um/+/N6orI9qgbi8KSh2DSVYQtBPGc+USO791f7innJpprYPpyfOu84Mex5KR1eHP5vNoZCL0ZtS6oKsUDPa7QjIy+DzFVK4VeZ6T5kcxw6WuV/SnOs1q/tr95CbZ5i9HKk2h+6eCaEY/eibxRJMZDT17mZGlObMqP/2GXUuYpi5trnEuJ+LsvepwiZRJPKHWlKKxBH88ZHA1LyP97LXT0zRLdFmiKur7vdRKj5JXr43oy7WNPA5acN0D2kUPVCxrFFt+lJalWMY4DePJ55iRlGK+xTME3L7+RYx4z9q1gagfEiydAjmDuWhzblF6lfgxGdN3nNApGU4bzN9cpgW9j9QWmKuIG0y9x8nvi0WR++dS0fJ4OHYodTGZ0B9Uj5pW8iC7Jj1uuXyiQzdFmtpji5SnrB/let3cHsrzFGgzyj6oO9/IS72ZCPIkpFVDk9dc+89Tg8FiSb2UhOtcCdENjMoFeff5039BZGtMwprVVkb0/T9FovcnQwTSIyQulJIKG54QYmoWnUIT3Pz5wrODV6wsmiqVjcRkxuXaZvzIQjvzeQweW05K3JZVCvhp2jtdpROgkqt/TtQKKJiNPer5cvZa/a3fcZz/QjB0e56lxgFZsWVgzessndaWjYekdq9+9YPhwwNnLw6cJcnKz4jQ1mWZys7/4ZsL2dE34lYHpqDqcFTKdXzP/zbcYiiw90HXqH/aUUU/7KOe4yzWyzZG+hNmNAq0sNSbGlMdhSXj8j2djNRUYo69q0EAPHLT+CaAx4XafsYxmuEKO2fQN8Fu83AJFDtHvrqmPHym6BkeRo0/jhewn7QpE8wRS8hjSlLt8z/S1nLvZ9RXF44kht+lVajY9jOiegM8otvSqoVozdN47Nm92NYsb6Wj49cBsNjA53lNfyHm6b99hX7pUmx7jiVD51HM0O4yspculA/Gb37zAtRxmhkmhHNJ4uOD78SNaP/IyUuMNj4ThFcH8t4hbeUFZZotmJez7c4+ziCp8RZ0Y9DqPuHjiI/npqWez5jp6ycO0QSh5pRv3Syr/SPuf9nxQeoJfBw4X4Yyxu0PrRzUXLlerbzCETqX6m7PjlqbIGaseoRhd/EnPbBXwRfwdjS1LB4cGDoe7s/F2fU+xlWv2mGb0ts46/Z62k+NwdR/P3uAYDrFK6Z50WK2+wOp6/vxnuY/TViMhIdYdRKMCBxFw2oHuN4hIEYt4HnkxMuoOp0qegQ+bHT9/eOCUVugKpRabFWYfA+u/Gq+e6TihzdVBMWSVBolmYNkTfEOelXtO7LbgRoK3B7lXNtsHesuks0buFFAtoaQxwZlMGRUdWpGmbJ2cyJgihOo9bnY00UibGLRKNcUCRGDw8X7PzYUCFpnnDEK/tr95CRrOBFw5SadDRZrvyKuaKJY3dmOFeG2HXVVESiIpDh3yYWChG9yt3wNwYy9xrClG6FHs5eSleo/hW/h6gGequon7BsvUqG4NUiXVs1vvMOYxX1xMuFnJzfnmyub7h+/Pxvvh0x1FPzK5UjRE4477dwesMmd2oyjCxEht/sRmv8BS+ftq0+EHLmMriHP5wV5cRRhlglv2jK68VJKiYvdYEs4u+Oa1RBuWlU59SOjMkU6BNpqyQbg2x31GWsqDzPyMN725e48jBOMLeWDNAxtzFpK2OulONQ9bA9HCJ44WJIc/AXDh+PSVhqPb6CraLvqO6uORzcdHnuhhug8NfjCSNpDn8nmu6zGZLAkch9SQi+P49pZ2tFj4MRtFB+YF8/MFIQTjUIPuIlTkryU1jYiIUghj+Y7JaLHZ77C+vKYrFHuN6NhttpSWy40SW56GU3S95XZ4wFdN4Nrg4NjQlvCklbuYxuwrQSMyLEseoLrlMgtjfM3Edj+f1W8SyIaBwIOhVlHAPGK0XhEIl1ZpB0axoH4/sEl+oLel1+rpS66/NQk3Db1y8D7qNXNf0JkuKfJ5TT3gXs/48S/vcHoFoFlU3JgzFkCwlIddN1QUpcWkvafuzrddnimKLK/HthZU1S2RLb9tq+tcjCGBccnVTK5tU/dI7j/ie6+YzOTls+k/YFsjZe+xVpeKFVs0bU78h4g3Wym7lTQ7tuYnvri4YarIMPp2S7OI0TyBroA2VjMCBVp9jhQeFN9lOjbMBodhNcPYK9HnvkdUBZ8+ZUxmKnI5mkTRguCiw1nLwy6c/Q9s8gMb459I1/JcyGKLsbVYP+7BlXOyvkjxDz22ecPyRr7/i9kcX2TovsML1Zqz/liy7Xe4wTmo67EpidSaHfqMIc8pjxVtJTMVU8tFn7RcHSL+lMq9cqw/EXUhvRfytTpTIismjDWSNENTkboWm/y/f/4Lv59/wfUfZHuS//o19qHih6FiptpprKuIrvE5DRrmVjqZjW1w3J4DN65f3ODl8lw4fnrg09iwK7a/UL998/tv0NIjRl7iXCrFncsVQ7Tg7Yd3fP+TZPQxRcMinJPEDlWpAprQQhc6xwdoG6W0YAgePmTkxZqTLtfdoahY1waHombcyu9Y+8YvDFq/tl53GaqBXNUOnaZha8D1ckZtqsxcsaJqtwyZC0rz8VT2zKcx23TPqZH4icw1EGFMkRY4KmgKvromcqcYRk+jouERjfZQ0e0bVOcI15MIyxogOGH58v8+Mer8a/Y3L8GxrShK+VJNW/LxrmGdaoSBTHs0WUNRn3DtgdiRt/NXL15R5AXa0udKwejjMMTre7zG5nIqPfnT6SP6MaF73FJa8t8JvaQ7JDRlxelBHuRmU+EJjbvbGnOQv7EMp9S7c3DBoSyIq56mFb98mC6quFhc83olD6iFbyLylCgWpEqqxhpNYkMwd3QWSsjTEh1ltcPRW65mcpOF0YKqKdh+/Aemqm/IsSMMz6Tbh6xVSu9T9s/Y3itsd4UQcpzrz6BDk9uMW/GApVBb9VLnlHgk2x1NLxdiWeZ8/JgTGjWRglpb/gVHreHDH99zsZLRtj7YtE1LYJQUT9RfxxzfXaGN3S/Cm47uU58MrFAnUH1OV9EUo0ppqgNzBVzqm/ODL14E5G2DVmu0e0Xh1g9M9YiJH9IoAlzDq5nOInzdohtUK8HmFjG1yaqBRoGUTvMVjogp9gZlLR0NTxtx7Dlt15JunhbvQGz5JE7L4aDU631Bnh+I5gGn4+cXeVWl1F3ByrlAU9JPOnvS+38gaF0Oqq8t6k16K+KPH374xQm48TfUnSAZZ0Qr+a2/023aLsLwpnx4lHP8mO2pix150yBcuem+3zW4YUgzCMJGrrGSgXRc0+kmnnZ+iLy9ldGAVbg4QsfoB7bI8Yk0wzBnmNUnno5L1zeha/C7hEz1mVXHDYfGg6mFUOjV9WlPIGzeXATEsUw5/uXnA31mYH4doGVyTTX9FaItmXgDT3rRQwE0UzicE1JfjzLCezFb8ub6muSY8JMSN758MUerBibjgccHeTp9t7ziLmmJrJrckOM4BHuck8fvvNf841pGc+/+8ROrYMHgCjoFjLraawjhsy1Tjjs5OK+cUls5k2iOofbs1cUFRTGSVOdAnkOSYF0rYmwdvGWL8+c9rdLY8+s7clysFy95ca9kjn78C1owQdS3NLU8ezRvpLN9kvuKUvVBUwtuwhuOUUevCK6nRoS7XLK829Op9ixtY1H5LptPPY0ih39b6Vj2eTrf8kL6Wq6dH/YPDGaHVnfoql0lz3JmHKEY+ItK6f42WlAFgHfJ4rUSaa46xi7Hdm1qVUIqB8H2bk1ndXQKfdnnNev0kd1dzyfVhtQYHcWgcyxLQoVK3qyP8GIJfPqr8Zr9hrJd0LYyFX3cCya2T8oICuXdNBUNA1M9Yak4laP9CsPTWQRfoCupuDAMqawW37TQYxWp6yZFdiIIZk/au9Rdjug72jpjpgIaF4+qWGNVJ+aKKrHvzs/eX9szMObZnu3Znu3Z/m7tb0aCTZWBSoV0o8v81QtEZ+MrkMEPmzuGBnpLEMaKO9T0uHh9xcXvXtIWqii+2WETIMjpVGQ5sXy2xzVaWxA00rs5irUEwZQ5gepr8yYTbMsmb0+s1zLdMpSfKLNzaaJo6mFaNY+KGT1wXa4XMd9czvnilQTGuK7DeDpx4VzSCZmWOdY1oRUys2cI9btl2jBd3SC0A6u5fLdNrvPudKTaJuwVe82Ff8IOQrIxpSykd5cNOkNdshlMdiqH/5ifeyOhYTAPFnQqlbz++ADZiIGF9yRQGgSQVDxuO2rFFhJoA8Wxo0ZQKeb1oU+JLA/bCTGiNwCsHBdLL8myHU4kwUeub1NqPY9VSzRKr9WyTPrCpkh6BlVfa6vzmmDfa3StgLzEUuQIb9wr/NCgKjIU3zGWqRFNDIx2R9rJSEDTwLccDo9vsXW5pspRpxEVu80j3UHWMCbLALvV0DqdSo2lymtcw8bQAtJMpnmGUUN4A3bXoZfnqWYA1xgwMw/npLFQ/ZTf//GedfqRQkyxDekD+lZGqj8y1LfkvYx6HsYII4HQNVkOco5r74ogcMnKLYMCBm3e/8xD8zM2LXUkPU+9KdDFkm1SkhgyYvztb+c0tyabrIFgdj7YVK6TVu+xjAFLD3FUfSk9NKyHI/bl1wyKZ7aqc8pTj+vtcDW5Pk3HpDvpGANcKPmnbZXz4tUK1wn5tJHsRaN9YvBsPj68I1fSN6MfEFk26f0julLqMHyd3j7ifgZ4FKvMyu/ffIv5akny+AOhSh6sLJf5q5p1dYWp2JuyU0U0JnSbgt2gUmv/lOO+nJIkW6aquTcwl4SBSZLFPP5ZRhv/xB2B6Jhe/3vaVM7xw/UB3dT5g7PmcC/rpGV94pDs6T4jCP1w+0DkyxLG6Olo9YTKckgqOb7enWJaLaHpk6k+xuHLFZNEcOd0+HM5J940ZmDgyzcrBlUr7UOHq6sX1IZNei8j+qJreO2tQBt5Kq+nbYC+tAnmN2yOKquTJxw/ozBzsbgmUWCPa/cV2ViSVRuKSs7T48OIWGm4TYOt1r/7Yg9I1AAAIABJREFUsSWvSkYsPCXum4cN+weL42NNpfbszPX4sNPIwu0vrEm7/YHTUTC0Odu9yiT1GuNsSilsXAWU66KAm8sQ+K9/Nd627mm7I6Gr+v9ih9V0hmE6/NTIzEfZ9lR1QjUL0To1lhcrjEDQNS1VJUsMeqVTCo2TbqN02RFdQY3N3LVBCWRPOxcsgX3oWb2RZayFPZDudrSHI00pD6SL6DOlnV/Z37wEPWGTqIPCC0LC6BUvxxAFvmSbFjiZxWwWEUwUlc3YIeqeZpdT9Yr6zB+w8p4yf8BThdgu07ACjboXaIrcuN4MGLaGZug4U/kR+7pG9AZR7GArqp02O1C05ywh3307QctP2CqEdlsNs2no25xyLQ9Z780r4tmMLoj5+vfy8JjmJYOukYmU40mOeb5cErsDJTBVQA67zZjZPcsvLymVxEc1dgR6j+E4CFU79EyP4xAzlgNCU4XszyACcwZqKhamPFA0B3RjoMpKykouEluz0LCJJy67Xl7aOg3BOPJyNedCqdL3WskXr79kMGq2TwCAhY4zWhRFz3IpU0aZBnXf4nQjnqvAGIOOpmsIq0FX36I6fkZ/pBmxu56xGXAMRXg9N5n6DpXQyVVP2NQSjHXL9v4ESuJkpMc3OhaTCdeh7MWzhImh6zjCotbVIWNOqIWGM/jMr+SG6g4HTsca3Ya5olebxhVV32KZLoFzTusFEE11vGVDNfasP6pEYn4ka3us9oAeyudnuU4x9uQiJFFkI5v9mj9YrxATh1GRDDdJge9OOWWCQKWwjrZO2I24r2z8UdUJ8warr8hmLfbP8nerT4JdeU+W7eg25+lbW5UOPNdB15fgromUlFDp7vCMa1xjiavUPQxb0BQ9ud4ingBj4grP0xjbgeNHeYEsL2aYUU9le9jzJ3muKb22p+lcWoXeDO0L7HFgwKJShAHHzsc3rV9UxX9tVSNRhR93DmGQkvU+vif39q6A/L4lEYIrV9Z/H5qC/EPOqVn/AvhZxRfEzcCuuyZW6vBma2L6DhdTD8eR++L0sKZoEooaaleON0i/4sV1iq/bPJoyRZ4fSnw6POucnul+8zO6Lr9Fs4hZhRt0fLRCzoll9mw3A7VTYaiU44X/FZm/w8suWH4n14rnZ+yKhgt3hf2EKThVjJMAbW9QjmpfjCE4NgvfYXgCGrUOw+QFpeVSKCR1Wi8IP5MOvfnqvyew5XvdPewpho5TEzOY8v0fG4Nql1M3FWYmv9famnGzsdANHybymwWzKfu6Jr/7xKAICWbhlg/3W4ZNjavI7D/cvyXdNIjO5JSoc9uC0QsQkYX3BA7sbYR97nTO/BkZLsOT8kUQEocBhjcwNaQT2Y0Npu5xyBPuP0kHwhMG2kEwiAJLIZW7XJLQ261gVOxFE02jzxO0xsZVQYM7XWIeGvJZgqvStcYgiJyApvHxkHtFNz9/PjzZ37wE575PUyuuOizsrqUXJWMm/3Y9FyRjhD5AoWSTVguL427Dz/cf6HW1YN0LfGePF5rEpqwH7B8zgrbBMS5wPdU4WjhUXU87D6jUi2bVD0zbK+bRDEPBsg2txDfOYa+D6HC1ngt1uJ96sHDYrQvGUnp8hjdncBe47oB/oZ5hC9IsoarXnBQgp+tzJpPX2LFLOFF6WG5I0abMnJD9TkZ2RZNgng4YGAyWonQSM3qt48cfH9gmChjwmch1PvGZOoIvv5NRmqEb3D9kNBXYii0i1kaMseN6NmOvFthu94AVDLxeLrGVFzloA5Fn0jQ13ym4fVvU9KbJfZrgK/4+igEr0qF1qRr5t8g00G2P9WHLXP1G/pmDb2EEVEZDmktoPIDWWOhmiO+aONoTEranQqMaNMxQjiUrG3abI27k0KqarZ73ZNUeo9bp1MEzdC7WYGEKg1KBO/raQDQ9YweOIcdsmRGWXqINJob1eZb4utIxC4NH+x2bT/JAeWkKXpnX7NuMVEVzlp7R/zzgWQJdZT7yXvBQPeD0Js699IzbbALjOy6/XVKoBlwx5rDw8UsbR5E+ZMVAndwzQWMdKy3C+x2bbcrj+0fq5rxmdXEl645RqJGdEvL7lNpStaRTTKCPNLOe+l7O3Rd/WLLwTeaTJYe1/Ban44Emy9E7wXKhFBPKgXxfsjTqX1QkhtHk8dhg1QaWunzGIeVhcyA2Q3pXzvv+YcNt/o7OPq9hJorxv70Y8TSX0NLp93KOm25Cs0+Z55CrutaXIuLtRKf58wMXobzcw/krxrTAEwmbXKkUdCHOOmM+C+gU9Zt9c0VZC8bGYKHWez8+MmYRsT/5RZuvPjZMtUtK57xF4n7/yKAuG3esyd7VfPutzcWXf5Bzkv/My5uMw65mpoggth3YY8BXv/v3dIUih0g26PaOY15Doi4a4bEwpvzRLBGjvIB93SDdNwS2SarkikxjSmUaFG3F20/yefldwqfPdPhM/Al7T55Fdb8h0gWtGJ9+kqzLyfQAxpFTrVi9bte8tTOq24L4Wp4p0ZcTxjSnPBaYan1u94I/3X5g4btEiuoxXaecmhEjGLGUJNqxqYn7FH0MWC4Uh/Rg4UzPVVBWV68lV3Ap3z+MZjTeSE7KRAG8MtdkGFt818BRiNZK9IxVT53VuJ7CFOg9pq6hTSx0Rb3ZpgOxd4E7AL6iiizBtCyuL6/p9nINJNrITJiE1xdYijHGMP8N3KFlMXBQsFU91dDjCAaX40Z6VCk6adPjOT5TRb8z8V9SiYohgUwhA6OJhYZJXnZUd8rLXGc8FA/QtVyptoT9Zkdy2HLcpsQLoV5Uo/FLXNsgdGVY63U1R+28RaI89limSaEc7ZdfX6M3GlNHEChtKcaRcGmRiQN3G3n5CmOg0jS8+YyDErj98PNHhGlw+dUrylYeWodsTVUNYM4xLOVdlAlpWjPGFr0qPA+kDGaIbbRcRNIzvPuM8OvshYk76UAVbptWp8oP1O2IqXp6eqfGODpk4hFXKSqHCEqtYEzXDCoi03SHbfo9oWawUbyBjmeQPOype51Y5RU02yC2oO7W1Aq00NNj+AZdtqNW4/Xb80u7bqEbdEqtxijU+BYO6a7GjgW9igQMR8fTIG8FZqtQn5pgLDRsA2yVNiz2BQ+nlDLXfwGudJ3OYh5wfNywy5WmZDcwmX/B/uHxX0AbvcnYN4hWYHBOmAzw6eP3LMIVoq/IFWhjv5zidz1l3pH8rFpOskdcPcVI5qyVF+wNJzIn4PbuHv8J4FVUVMLl8fsClH5ZNxZcTVe4qwxdjcNAR9Nb9o1JrIjba83ErMFeBhx/PpfVGlWEcxI+1b5GH0xUFpZTahGInP6uw72Rqb+qGfBmgjLVyXNFlo1gc1jjuB6W6gFNsi2taWLmI7a6VHtRofU5eAFLFfkXo47hh6R9hafm3fNsir7B/gwB8beh3H9BuOF6dcPvrRX9S4mEzZt7htMb0ofvyf4oz493h4Z0/4jj2kSmIjY+JgSjz3IRYjRy7UTRBK+MKZcGbi8vVZEJJvEVK8PDWcob43438l3scBWlRL3MDty5/4XedOhvz0Fz7ZDiVjJ6raYXvPlijns1x1a0cUbnklYFZQN/6RQR+l1NZ2roeoofy3Tb432JGQtmwuTdQZ1lNy2O/QWWmfME/D3VObZjIGydHx9VNkjbwWGkdkcSOS0ckxZTO49cRRQxtRQ7zlXBYNUc3/V4Ch06ODa2sOj6Dncl5zMy52zWP7GzWjLlQJYPJW1XM9QDmupjvZkGBNGc037Do0q5OvGMiWmQdjn+TFGpiQmdZRFMbcIb6aSJVrD0z7NaB92iLQQ7dQZ++LTFcXtyc47my989FkdGK2CycAgjeX7WbUua9wjXJb6RGaIsOyESk8C2qBUDzZh3zOcB3tjTjnLe+6Jg25dcCRuh2rO6JmFwAnx7x6C0POcX52fZr+0ZGPNsz/Zsz/Zsf7f2t2uClsuVJlNNm6yhqbfUmoX2VCfEYzQ0xrajVgz6dZaQlDVjZxMIJTLKiF703G0fUIhchC4oPjxwyvc0qawb1OWJ4nFLbBiECpK8XM6xBkh2dwgl0Lpc+cT1i7PxupZBL0Y8X4bVZg5YJf78klcX0oPuW4fJNGRIA95v3gPw4maF69v8tNlSqRSMCEz0MGK0HXIF0MgaB62vyI85qMKubboIr0TTAq4jWcNYtwULzeb3r6fcbqQXlI3n3t7th39irK9YK35JPwqYzT38UqfaqHRTWdE3DtbBZWgV2bE1MKsz7u62eKH0UK8XV1RtwjGvMFSKo2KB7sK3kylZI73qNMtwXQc7FJSKeDr3WrRSJz8cSFWPVPeZ3rBTUWNgEozBLxJJ0ThyyFMaNFBAKBHptDT4jkGpaAaH3sOJehzfpk3ls3fbNaNmMdYtqOK5vwrx+oHRsZiaMtqMJjPoDPLE/0VyqGhbpr6JG4cYn8fF0O1rTnd/wvdmfB3KNHyeGSTdlqGG0ZR1M78aGUwT4VfMEtWMHbzGMnpid8l3l9IL3jw8oG8GasvnqGSeLuaXuOGR8mARq9aHui6wBo08K8lVAsDst3jhkt/EMXouv8+PvxqrUH2C1enEyvMx9AmZarlZmgIziLhehXjxE2drTzNaRJaGoSYgujKwuyuy45YkkzVwozqQDSZjYZKMihi7mjBbXDAUHY1QnK3lyAvT5OOxpVM1n4Uz4eViCsZ5fdhbSc97EjvUPz8w+Z3g8ksZkb39055GLziUFqg+tLKDAYu5PWB3qk5611IEMfX0C75UwDpr7OjmEBtTel/OZ+ND3fVs7JRvarmPb1Yh06Ak+eiTzGRY9Z/f38G+YH5xnspfOj2tI8+o1tDZGSX+0NE7qjdtu6dPEi4dHWeQEW26WpN3I1YgSFXE2LgdQ2RR5jHOK/k8UTnodojlZ+RKRb7uCmLtRH6XMagMQR2Y7I5bsqwnUXvgOE7w63MuzuvJG8wvZbRdCJ96TDEnBprq0WtaCy0AywBLkQPEcci2XlDmBzT1DbumIT3uiNyYRvXc0be0+sCp6zkqTt1v5q+Jr6aM6Q5dRXMv5h5GPGHAJpzK/eONIdHiPPMS6CGp2eEMsnZY9z1tD12/pa8UU41pgZFQVxpLFVnvjzuErbMKAiJFfN4kFVllEQU20VQJdQ8ZtiXo24FQZRKsccRKOxaxSaEYbNq0odZzajtg4ihxZP3foCxv9hqWI3PB1naDPlqYpk2m+tUmQgdtRDg2vkoP9nWBLwZKAfqgpDGOGfVg45QgFOLN8QRl0PDt1YpdLgfr2DWDUzO0LRMUw4twybIP7Lc+nS5v0MsxpPDPWSyCi98QWC15pYihTZe+76jLnFMmfzfwIk5ZjlUduZ7JD2F4LlnVMFRHxFx+RF13ybWGeOw4HZ7UjVtczUT4Ia0uF6PWzdkIH1+EaKjm2SEl00xuP+75dFRsDsV5XcXTW0yR4anCuaaN9L2G607QFvL9xh5EHaC7OppCBi7NCZahYY0zylTpd4kKw3ahy+gUyfJsatH0OqYoWQTygHrUjuhGhW6NxOYT8XRPlx6woxE9k++aDefoUFfXsDwTbWljDCp/74zMRwMt7DgpRKmFheMIynYABR7whY0VdIRzD1NdDIVhY7sOmDV7pWa9sAdsvcKJTcZObkbXLGhTjYtYJ1eX1NK1CcIIw/k8ownAKo4YtZC8MQkVGbHpjTzeJXQmVKn8W/vwgC9ixPwV06+ks6KdCiZxRHzZsKn+Qa6J8QXGKmGwTIKTQj43JzJzxkwIzF7+bWJ4bDGZTBseFetHPAvJtYrVUae+PB9r4CnNua5H93RE4XBtyz3V/kHDMnW82YQ4knPy+MOB2BmZmQWd0qOcEOB80fHzYwBreTCOrkNsaBA5GEelaGIOECw4sqM5KhKFyMSYXxAaFpFSRy90Ddt3yIvzQ2/Q5eUxNDViccWtOXD6f6RsVOjD++0Oy3aZvJKHZ3W/5yY0uJjPqCtVD/O26I1N0AW4Cj9w+5hzt7vnmy+W1CeZD04rQVOZRDcBw0zuz6Cb8qf/tEHYGfcPT/JaJe6n42fXQ3y5Yq4rRpvZJc5MJysaDu8U+UKXEtoO78cK5wkxOolozJr+k42piKa1waHfldwtFPgFwC/4548/kicFg6tq5ZlNPZq4M5eDcgSMOqd3Y+oyJx1U+i7PGGeLs/Hu+pZCXZSaYzMMA5OrJe0oL3i9qiirjjyvyBRC/Ni0ZPpI7bkM41OPnEGhOWiGTaWc6CYbEbaDuHmJq8mx5VHMy0mEF6yohFwnyQCBEyFaaEtVP7/wfpHu+rW1xYnqUSN3FbJ2MLCdiq6zsJTcm7B1Ws0FWtb3soZX7lM6u8X0XnBQhB5BX3Po9ox9hKVqW3kzsgxX5HmGbcv16Dgt7SmhPmrUpbwEm90aPWpp5yGjQs2m+3Mn49f2Ny/BOsux1e0cXJrYbUUw89kMctEdthVaUqE5Hq2Q7QvRby6xsOgONdWoFpiw8Bwda3jgVCjgyejg6QWH9ZYyU0CBvqRPExzHYFRgmap2mU8MIrcF5AS3ro3JeTVZ2CYXX7wk+V6yQLSOhR/EHPM1zUn+7ldTm4lhIbw5Ql0CuliAc2Lx1W8ZO/m3WgxkSc3DsaBV9STbs7HCCY7roxVKpHYyJzxV1IZBopCltw8d2/yRn7cJa3WpaPZ5w/HszRvaErYf5IEi4iX90NDqJXon3y+I52Rjgy5atEbWA7btiGMsWYQ6uSsX7PrxQBxDFC24UwwUx8d7nElM3w4MhtycoeGw2a4ZDiVlLt8hnuiIrmelx4yhfIeuP7+0R72irWssvyVQrQ+9Lug1A3MMUNKTmAIsXceORwblVba9hrAMrHLEVnikeSzoRY8bmEyU6G3sWpyyA53eYCrmkrbsgIF55GL0ipou7vA9ByeA/l/hDk1Ex1hmxFOBr2rWiR1i2wbtqaAv5bO+urrhpNuEYcTcl+PYWwWr2UBYGnRKYHirbdm/zwmuWxylXFG7Gmz2iKlDoABJeWdg1ClNMGOlHLJKiwiNnB+zmqb9XPuJ3Nhu7FFnJ0RTs1ftOmMw54uphxPEGAqpHE96LC/GvnrNlQIyuFVHl7esao1CrdnDumA+DZlfBBwV+39pQ9NX2GNOpcAIqZYQ5TETz6MScj+6nU0rWnT3nIFlWyuA0l80tPI95vsVVSfXzCrsefd2YHk9wRPysJ+5OvXwkds0xVZMK5PhgtE38J0OlNM7dnvybMt/fXdCqNap+dcer7tLzPkLGnWRH6s1tm9x6I+Ut+8BcKojrtOx351fKm4QkdTqLDNLOAUkw5rRlN+n3kPiafRpj6sYiIxi4Lh9BGfO5AndPfoYXQ5GjeXIOchHl2OS4zk6YqI4UD0NOpdKG37JcnS9Q+uMCOERzxSacb5AFOdVqXbfkSgEuhH0OK3DRWODo5ygh45D80ij9QyRAo9k0FUDSz/EVH6Li0/lepRjz6gyC46nY/gLdg87Iku1ajg927HjchHimfKsqsoCPTPpQ2hUtNl2HlZwfpZ15NROi/sU+GCh4bKMQsZBvn9at/TlnirvadTV49k2TVIy5OUvzpxh6NibPVgp2E9AI41jW5DerzluVZ29ybBaHeYhtrprmijDcgvKuqVVbTdlfw7k+bX9bdo0t6RS6EZTVJRpw8L1uFGh9oWpsQkFaZ1iKjRj0OXMHFhc5uzWcrOnw5qptsC6Cn4hwb5eXTIzdOpyR6UiiFO3h6zHNgZcRQDrRAbO0HE87tFy6fH42ATz8+Lsx3WB6ZzoVBSzuTvimiWmKZgpbynjkcXEJ9BdRsUTaZSl1NtzBvSnYnxrYpoRGC1hKAE5lt5wyhrarCZQTXGZ5lLQc9ylv7DrVL5NkTp0YYR+kBdcZZ1PdVW4xJbFqC70uurpE4tK6FSqF6Ygxe99brc5Xa34L4uOapCtBbE7Vf+upjwWDG3IoBB0m3WC+bhltlwRqehwX+wwx5HB0IiE4kltIFoGuLiUpRyvVgj+//yAkVZxMCq6vKOzFMLT8LFtDUSFp/gFhVHgLnxib0KeqR67siavax7zmkh9W9c2aAcQDARPIm5aQ5odsMMQP1B0S/1I1Y30eok7U8i1KpUMOa3A+0z7CcD40GO9NjH3PpuZfJcicSi1llNi4kdyHJlvknx4YJPn/OnxPQD+0iBdh3RNTjEokuEiwBkaNvcXeLGcTxOLQ+vTDq/Q5jId3lCyrROuGBgWSml890CbT6iad2ib8/Ri4Kn17nlY9oQsgc6QXn9sGbS+y2SqY6vLp1tdIayYvtXQlDDqJitp0oZqU1IrDz+cRRi+hYlGeCXHV2onpo1PFXZcK82yn3KNQtQ4kwnqDsRcmNiiZcgfz8bbvJeO5l90G+NjyPUXGpjykL1/CHh4uEcvr2gUcGv7z+9JD0c6I2epolmbG2Yri/98N3BQLTnm5YDehnjdNakh16Jd2dSdx/iYkg2KwvBYEgqHn27XRLFcJ5fC4UNzwmh+nWiWVuk9rqLR2r5tOEZbPK0h2cv3OOxPeFaLW3WgOICTQSP/sSBYFMSKVLtvGyq9x7BzDAUq6icTyruOk19z+V6lOQwPLbCpWsH2JPet7umU/RRPMxldheo+HWis80jbmLuYSuprGFoco0NzNTzVd+xcDPhMiVoIJtLRSI0BvTFYTC6JFFdyPjQ0VUeetIytzAZpQ4cjLA6/uyFQLR3uLGLSGFjuDDtSSG19gLYmdB1slZWIF5e8uTxPZbxZzWn7A50qHTUGuLqJPTNJn+gJG5NcQNUNRCr75QiXfhBUTUetjsjIilj87gWu1fJ0bM6cEFOY7IXF2Mv1sy8OON3Im1dXGIqRKz8KkuSIrkOwkL9xaXwePf5kz8CYZ3u2Z3u2Z/u7NW0cP19PAdC0f6XY8mzP9mzP9mzP9t+IjeP4r8DnniPBZ3u2Z3u2Z/s7tudL8Nme7dme7dn+bu35Eny2Z3u2Z3u2v1v7m+jQb6/+Z/ReorFEozFdhgTLBTfXCt1nebRWTZ1XGErp3bUEfmiSbTYUioJKD6cYWsWgB3hKR8tywO5NtncPOApVuM86ptOIse+Y+PJ5puXy48N7DlVCq1SGd/stwqv5v//L//FX4/1f/tf/kd999RXBKNGc1QiOF9Lgc99JePjQZry5+JZ2bPhZ6VzZdcao6xzTEzNDIrLcYORQJgzOnK8UDx+azm73SFZppOWTKvt7etHy1cvXjJpEWrV5RSxqdv2Wg0Ib2rbO//Y//Z9/Nd7/639/S129Z1dK1No4CMpGozI6DIWyEllCVj2SPKTgqUb+sieeLsHz0BXdViR8ktHCKEaqXPo2xbCmbExE+0ilSGR1o6ZJHSq/ITAlqnLha3SVjuNavFj+f+y9x7Jsy5am9fnUMmKGWHKLI2/ee1NVFcUDYNABuhhd3oA3qB71BrSAJ6DNC9ADs8IMCsuszKvO2XqJkFNrdxrua3Nurs3pVI86sxl7xQ6f7sOHDx/jH///KwAuv/2W/+S/+P7Pxvvh72p2eYFqa2zTlVDXOw7dzFA1jLahDetnyqFmbAoqA9XfFxWXq5Q0Tog22n4c3wbbw7c9GtMj1NYDwvUZVcVcmnaaMWBwZmwRE2Qaqr2KLgjiNb+53bK+0euz3fx5TPdf/lf/GWkUEoYhY67nLk58duUR17Oxjf5hokaWVxmu5dKbPtZ0+QIvEsjWJ0sNMbZ9oDq0FLmFiPX6r22F3SjKUmCvNJzbVhbSn8H2sA1SuT+1zHLmMHQIpb/7P/yP/9Pnsf7r/1WjD715wrEUjm8TG8o5b+UxMeGqlt5s2a7uyI9HvDggND2ws5sj+4hWCCJl1F/kgBCCOFlhGx5GO/CwrJFjWWAZEdTEd3CY2Z9npoX+DauWjAiaRvCv/5t//mdz+3/8z38C4OHTPZN4wFMR0tHQ+ZMtGA97dsUdg+mxLboHvKkCZoSlkeS1mIijkBfhisrT6L5RhvTDgD37+AaluS8b2qlB5CO2r/2CTBXBEBGlFoFjyNcvF3z/za/553/zL7n52z8vAf2f/8u/Idro9S56yZQ3yEUCBtJvJwGWNdA0j9w/GJ1Ru0eqlh/fvWeZaJu13R7HWbK6CnFNy9KPb+6o+p5gmeAG+jdWWYLfTpyKO4qzgeqPLRcbh2T2CYzteSvJX337gq/+4//0z8b73X/931M+6YIOAs9fsUkUrUFbO3LEtSeiVURVaVTu3NbMEtKrFaM0ftZdsQw8zn3N2ta/eXHxDYMtCOcRYdas6QfuDgVLGxqD5lSRxzhJpOPRmV7H1c0r+s7jf/vv/uLPxvuf/7f/iroqiRJDneg4DO3Aq+8uqQx36u64Q44DQz0w9vr/ywIfS0i6vsc1CHHPsZmnGSsJSIzYdriJOD+c8MMQ31A7+gy4UUrgJbiGWP6UNwS+Q2wplOk6+Pr1d/zc87OHYNjWHGZtnHEpCMIUsej5dDASPOGInyjC2eZh0BIiQSmJaof9+0fK1jTiOhlJkpJctMSmH8h3YgqnZj/vcZ9686SN34dkNzaNoRqphzP5ec/j6YHONIvnx5m181wew2pjisrHSfVvlEIw1DGtsrgrjKOoJWE804cp46QP+FpdgBiJ1gtGQ57b1hOHuqcpj7Sj6dfxQ/pqIvJsttmT6K2HcGJa95J3P+r3lcUDN7cxTT1wqvSYg/Y5A8vc55yHHmYNe569ka63qcqSzPD87ZqKcKxZ3ESUhn5kHgdKqyH1FaGRvTmIHs5HpsDhlBoi62bCYsRJEmIjL+OJiM6BZSR4rHX/jqNiXLtG9pB3Wqoo2j9PEjzcvefu8IgUFVGo4fb3zcRYFBzp8YxqyGkYUE2N7Cpas6GGUbHvZmpxIrWNw3cj/DhjZmA2zsNyPeZuZhhsRnPSCn+g7AcYGtJaf2YpGGXDHz+cubKfK3MD3Lzakq4vCFDMF0YeyJsJCpv1ImZU+jfTpc3Kchlq67OMjuPOWCpFKYeNUeDoCcl3O6TlIUzSerE2AAAgAElEQVSPoWUJrJVPEodYtmFkkYpkkRBkLkdDyN4PDd7osYkdmql/NtbmoNlrwquM+dRjjxOPtV6z9RySInnszsS+ga+PDcPdHVYQ0aP3ykiPG8ZkQqEMQXFV7FizZjke+bjXLDKeEgQXW2I8bFfPp93vqY8zk+cRjNoxHg4FgxgRRn3gp8/4eU/MTGKJHUfUpl/TkhXJ5YI+7VCBIceYZ+bGIZ9a+kqvVxjGOJchY18xKm2LXdjiLZeEdoSjtGN7tQop5RKHADnqOW76iZkTcbJBmfaFhTPiRDVj/1xh5u3H99Tv9DydKoU1W0zJmt0HTbZtZxZCeOzGnMw3TfWeZKhzPuQNsSGUz8KIkhO3tULE2s/8cHfgXMz0wUhqDu6VHxItBXKYqE1HTH6ekXic7ALXkD5Mn2oGOT0br/IKFkYFoRmPhP5MIFK8pen3FZKuP7O0GjaxXgtpdRTNQDhXuKbPuOkqlkHMi3jCd03LwFVPPLtUw5nWsPc0IsXb9Ixdh22a24e+JwkCrKuUxvRAR8uEwX5uv/efHnDdCNccWnd3j+TVDsEETwQCkyDwU5JFwjQYf6QchinHtRXpStudGkc64SJUT+vouYmdEDsdmaRNYhqNlXTphENddpRvdSDQjg2hF9I1u89sRdX4nEHop8/PHoJZIInQh83ty5ClvyJbZvTmxJaeZLJ9AndEDnpijsOOpqwhqVCGANaLE243FiJ1mV29sKuLBZbwKQZF2OvPhq3L9dLj25tX9Ed90P7px7ckoWKhfFxzkFi3Dk6/fzbeb7/9ngFB1+sFc50MF5hGj9hs0DpUFHdnLCqUoX467t6hhKIOXELTUrIN1tjegr74xN/t9VgC5fKX33yHbU2ftcRc1tjWzGH/wOM//iMA06HE7S6IFzauYYawv9DP/Tj8SL07cOqeDqOR3ZghAofWsOP4PjyKBNeSWOZWYWUeQeQzeEt698kpzLSxTeoL2oP+u9azcMeZ0J9xTe9gG7k8fiyxuiO2kUeJo5AuV1T5kXWo36tpn5MQ35c7PjRHZK2wXL15RsvHTiLczsPEKEztjmZuCOaeybC+LL9asbV8FqlD+NQX1c/0c40fQmnrg6Y45shux74cyVwTuY8DDguUqClNP9kwz3RtwXFvw/RclQHgXI1kN5LA8/CMYnwzN7h+iewnrq6+AiCMEgLbw04kwlCfVeeWx2LPues4DSYrESnKXtINJ0JXf9bKjoW3ZQrANgC0crdDhCvGOiQ0BALNIMhcD2sR8/f/94/Pxro1jb2yHonUhJITTq/783YfKnaEyCHnZIKKsTjRnnK81QVuouc4uPGI7ZpUbmiNjt9Y5ijVctcFuKM+BFVnoWgYxwDLHPCogq6V2K2DNRq2GTuH2aWcngdwD/s3eh3KDuXMzGVAF5m+09SidRr85ZLG1XtxOJXUnQLfw/M1U9Ny6zH1HUPsMhjRvWQOmF0Hx7Wpnsg2sAjtgBiH4lHbnRtYrOYl9nLCMRp7RZPjPdyRWs9B7T+cdsxGJ+v+PGN5IetpQWduZFUt6HyXecjANovmwKA8/GRDL00PZKv4UJfsxIJtoW3lqGL2eYUfefSGkFp6IHNBOVooy9zKwgTpB0yVRdvqd4ushGl4DlyUj/cMhtIs9CIcu+Xu7j3KHDLuIsWzOpaiZW5NUOlUfOtZRJuYINH2qQaXRWwRRjaBUYgJ3J4q6Bkf3jGZz7ZeQtc2dF2P7+n/b4gWuJ5CqBplGH2mOUd8Qa/xZrViFrA0/cODN5O6Aqt8+MzcYk0efrYiXVj0JvhS7Uw0g1hG+ObAs6IIxw9opUdt+v/k2HG1yjidKlrjA3wrwPYnpqbCybUPmKqWPtiDJwmM/yD/92CMcRcxy7XeAN9kW6p+Jlp7XG10pOTHt8hY0dct3734GoAH9SN3n94xTBH9e70Rb262XGyuaamIAn2oXt58S1XsiVOHLPlW/97aJ5YNcSZIDCPHsVkyI3BcjzHUL1qKiOkLoq9qyJjaEzlmwdyU63WG5wdsjPNwi4ahVlhXPitf/8adtOnyEidtsAN9MBS2j+3W+P4FS/TGaxuJJWKmWfLhnXYod6dHFjLGC0ciw596QnJ/V3I9J6wMU4wtnkd7AS3TWuCc9AZ7d5rx+x7Hy1hcGO23xRbOBafzic4sV2JLLFshghLLMKEMQYhX+0xDjzQOX7YxVhziWT5s9Hw5ciaOJX2b4D05rcBlaiu66czQaiMe8+eG7jkDcVvz2Erm3vBkOj42Hnl1xooMpZOaUNaAXLkszY32ypYEsUPsO6AMFVJ1Jp9mHqUivdLve9qP5KcChECYLPQysJjHiW4ekKaj1g5HlFxjew29fM5uAxCKhkR0bJdrDo/aFtvznnM/MUYeK9N47q9cQtelLWuGSW+coxr5oGByAoS54UXTzBysibYuk2HpPzY2q8xhYfm0RnasZyYIJuRcY5sU1DJL6auKoBjpmueHtjDRdWKDtAdkW+CMRobpsANXMHU90nw2ngtkM/DY1WQ3uiE/fvRgrMjVGY7aZpOFT1s3yLEhNew9s1wghEea2QRGO3AoJuamZK4E9teGImuWTFKyMqnAnz5tqecziGzaAj6275Dm7xbpFZOlUA6fRZqrpqHxOgI8pNkL3ewxugGz3eE9kWOMLudecbYqepPmdSKPJIqRYsZaad9zPSo838YPA5Sx7fkwMrYtj2/fPBtv4l1wsHS2Ko0SZBgy9xaeyUBcZCvk5Rope8rCkHyc35NYDitP4K30HO92E17tEI0WTzLZizSFFw7h+orQfLqyBHJqmdOIbH5K/0oCEiZnwNnovXIrBC+3z0WWQ1E+0ROzjT2iBE65ws30/nxxnXARrlBK4UnN1jU2PssXPr+6WnMy5CCd1RI3imRyiK/14Z7YHZGlCF8nlObAX8UR8XLm1Cmsld6LVS84HD8yjhXSkK607R3Hh+e+Ybnw8SOL+qRtO5obhOsSji7d2djY0DDNDnacsDBKFI9VTje3RMNIY0TD10uLZeyTioC3RhGoPTYM4UhbSiZz4RrbB0JhYc9npAmiFqOLF7i4oYNt0u5CfkEb9SfPL8CYX55fnl+eX55fnv9gn5+nTYsilplOXXVWiSs8qqIkTXSIniQWlljgXHq8MDeX7PFAsfNRc0+U6Sjr8nLLxa3L0F/h+TriG5CM54KumCkzfXO56F18W1I/dvgmj3y1eYXwjiT9hrNhxrf7ivILGmfS9wnSECY9vvDqb/DdFKdqUCbqJwhYxAmP5Y5Hw4cXOAnEinqo6T890RLd48qOcRjxntJ3noXPknIYEIEe39JTqHIicDxemLpTmp54//6PTH3K6lZrZDE91xMs8pzEskhNDSKzSoagwQ22dCb1uT89YHcWg9XRmdBQBBbCCrBDF9dE39Zo41qKyYLpwRTdbUm6DkHW1KYwcRHFrJZrKmdi6ehIKXMvcG4D4t5DjfpWWqnn8VH98IGy6zgpQW+K8e1k4S7WdGNFatQ76vlAuX9ksfDpDSVcdX5gGVxwGa20JiMw9zWT7DjnFX/4qN9NyoChL+jrmbgx4sC3azzbYp5CMNpkxewyzh3Z0NCsv8wdqqqOvpQUbk5vUihlI0HBUgRgG45IzyFaXnO2jswY4AExL/obiq7BNbe0tpfY1khpRyQbbRM3X82EgUQ4Np1lgCybjNmNqPoCZW4z1+sbPK+n7HNq+3lkKtC23dQQCoE6PWIZwuNQNTjKYmZmtPT/Z1s9TvOIb/nIVo+lbj7iCxvGnmjW+2Mcz7TWiDwIfl/o30heveY761vGqsUz9FWjNxDImNO4xyp05J4kSxyrY1TPx1uV+v+a7YhcCRo1MNc6hT58cumGHj+OaEt9S39fn2DICbYJ7qTHe5ASNYz4bsS1EV/ei5m2y7Ebj8goF8i6oDjtWN6uyGa9V5QniB2fKEzoc5PCjkuaco8XPqfJkmrAj81NaL1hiJYc9hVeYMSR44hTWXKeKh6PJgV37pipuBQe10blIp9LjpWFu7CZjKL715cp8+Czchb4Zt8sQ4tpCAlcCUYH1D8f8C9jhmGiK7S9P4YzafW8xlYfPmAZnthDcWRMWrIoIrC1b1sxkixigk7SmZS28+YT32Zfs1n5CKnfIVrGBL4gS1a4C50idWaJm0bEVYMzGBFp8RFlzdhxShroa18bNkTSwfcCBnP7Oj3uqJvnepjCL/DDCM8QCNf3B6xx4iLJKEYjBlDVBJWi+/iAm5pa8SQp5o5S2oQGRNflM0vpMMwubqVtr5lqXByqzsIyRPW+mrFljWdBamgsRTAxqIrUTjEVIJbO8/n96fOzh6DlSYbeIA2Fw2s/xd5ssQy58nxouVqnLNI1Q6GL0eKkuJYe/+bDCX+pBzYrjz/9oSDwwTf8gvFQMs8zYXbLdmu4OecBX82Ek8sm1inSo13QtDVjK1lf65QEh4/U3fOa1cfcIgyWXGTaUNJ4gT/6NKogNBMXZRF2YqP8FwymGO/IFJUKDkWA5xoexscW23rPOvZ5Or6+W75gEU1ILG7Xmkm981L8VwNKOtSmkK9++ESW7fFCH/Wk6P4FEuKpPjJuBJ7Jo4eTQ+Bm2GJmGI0RWz5q45C0NsdWO4rwKiC6THB8yI2xW6NDHmxYqpbFCyP4e+yxlEIOI7bQeYVRLZlDm3isP6M0k1c+9Q8hg6doNoYA9wvp2x/e/cCZkdFe4xpxTzcMEZFFucvxjFxUsslwZcDUtAzGkeenM13mEPkRZWPkmmqJnDoWts1onPZx6HCHEelPRKaQP401kVjRtiesJ1LtoGeo7gnmmu7uuS0ALP2IbLaYq44WU5fxHNx5RTVJ5GAOxo/viT6+pVCCg0H4Jq+/5dCdKMaWlwttT3M4MoQtQ6MIzcaa7IDchtP+wDRp2xYJnO5LfM8mWep0+P25ZaEs+t4mcp7bQuRoO2n7CTWMnPqStXEe86jwhUXQjTSmxppaCd5mpOwtxPEdACp5yWrp8dj3VA96TloJ8sZnUhbbjT5UYpYslcNkS1LPIJOdLZIOv7fpjGSZNztMto3gC0rthf7Nq3lBJwW56giVUWCZa6SYGB2b2Diii2DBx24kC17gm2ApLyvEVDEy8/ZoxJeHAVeFXC4WWJYOlsp+ZpQd3nkkSg3IYpRYvsWEoDBiwYc3OyxGCgPQ+rPxvn9DbLhdncTU6WJBYpCwq+uQ8jgxPVYogz0onRHZeqwulkyR9lFjNHJkYOlv+dU32h9drjLSfORh90Dbam+xEIIYSeamOCs9Ca6zoswfGDoLIbTtHeTMyzbgnz5O3+IFRrhZdhwec9KXNoEJKgb/iJU4jM6E3xsJs8glFTN3P/yB2QCjstsbvn1xg5dmHPfaZh/VSPvjA6e6Zxj1eNswxbYXWI7F3Scd4Jx6xSrLENbMlSnrzPGIpZ7X2CYkRVVjmzKBbyvW6w2xmJh6vY6u8Fg5EVgRg9T7OHYViZcQxx6qMaIJ+xIaH292CEzZxZpjBC7pMLMy4ANbtQzDQByHROYkm/oe15mw2h4f/btPF4D/r+dnD0HPv0YatNx46mlWC361XnH/O10PSK4rnL3HqaqJzSi2kcVHa2CzTTif9Sb+v/7tW4K+JV4Lso3Rdjp2BAsbz7OIntoBfJ+x7AmjEFtoYw+FzaRCmj6nNpD5upOI/vnQj9h0RcN9r797O1a8WlnMQ4Rtir2uY2PZAV4wcGFugu1UMLo97spG2KFZxJH9YSCcPK4NEes0tdT7kri3ON691+MLI7AcosSjGQ0j/7EgTq7ZbFMq9UQU+5zJfOAOtQ8QBqDjhS7S8QluLwnMzXEWM/uuRWLhb/QhI+Mr5iylmgYmo0Xmui6jPFAQgiHfHhHI7og7CNiatgSnY5YhLD1EZBB+Y8w0NRRdz8ZAq7GfO+o3pzMiCvC8ijp9QgIW2JWP1xz5tNOHwGW0wXNcHGegN8GH5QR4cmQaDqxM9HmmYBpO1JZPbBtkmJIEL0KUiMEQLc/dxGN1z5DPn993Hht8OsILh7H/MjDm5eYal5ksiXGMgy6CmENZ0I0z0VNtSs48HM8MY4AwTvEffrfjvsu5enXBgwFV2aNEWVcoH+5tPXd5cWKZzyBqWtMOYIkZlCRJl0w83UokynNw8XC+wMJ/Mgz/cbSg3J+RhaQzCt9Dc8A6KkIrQp70gRQmEdgzXjUxhXrNLjxJuT/ilCeiz2Ubj77y2ISCeGluAsNM7FpYyws2of7DbXTJabfjTnWszE1gjlvc1uHt/fMgIz/rmmOV13i2hwo6hoXJVNgJ4cYidHtOpv47zz6Ok5KrkPZgEInNGd+PGGTPtNfvVXVnVl6CimNiA633op6wdmlFRWd8hRgd3j6WLKOWYqfHd2o+ksUpffE88s+bmYPRThT1H6jEJWEWc7nUQU+Ozak+IH0Fsf5M4PJ4fIvoJl4ajIUdTURhxeyMfDA3omxxwTzU3N2XvLjWayujmUPbMDqSC9OuEsUOD4XH7vTmM/T/OoxZxM/xDY/1HdeePigWi4TyeKYvQ+wr7QNUKyneSdxwIOgMuGV1RWUHYLcIIyPRDZJSWSyrDmX2ot22iKFm6do8GjWYK99nygSrrqY16NC3pzMXUUzhj8Sm7j55Afsk4s0/Ga+9jFAj2Ebv86tXtyyV4P3v3/CU+Ni4Ifa5IAkXlJW2u6rNydYp6zTDMT5lbo/Y8wIlZpDGB9BwfNwR15JwoYOGpjxSNSe6xfJzW0+++4SzlGy/uaQ3gUZRPL+5/vT5+RYJx+NcleYPBae8Z5dKFsZpW+rMoCqcVvLwqCfpb//ZdzTzt7SuwI+1Iz3e9wTriF9dr5mMTxi7krLoWDkNC+OM667l1Nu4w4Hj3kQoliKNXN4eLN680cZe5iXL+Hm6bnF1y1zs2R+M9NG65yqKsIVLXutNthgkF5sEIQ40O+1Q9+09V1chITHBhYFb2wPRFHK7WLAwTuZ3+48cP/2AGjJGA/ENmwXNPBO+eM2VYf3f39yg7IZhHTGaG4iavxDtORaBVCxSbdhDL+gE+JFF7Omb5r5vmacStZWERtbK8VzqrtH9X0Z9oJpq8n1HFqxYLfVn/jbGW8B03nPMdfG8lR7XgUNTSmZzmxt8B8+D7Dphmei1DaaSf/rUXc1IiT1tuDAKFI0oGB7PqCxgNinqd8f3LMKY9a2PfDRyOMnI0lME1pHLaz0X4YMgFx2BkAxGXSRcRFxcbanbDmFK1mKbsifkfdyR7wwKrBy5iX1aOaLkl9Oh9dxhOzZX24TLSz0nnypFLt+zxMEz79o7La63oZ8UZ6OVuTufCK9ewfaSh9Y4gPPAehHTDx2u6fWbowTRHlk5Cc6lvi04XYWqzsi+x4v0RvRsWKoeO3Gpzs+BPLaRUmq6lrLucCyJcvT4hGWxP55wo5HAMOif7w/YCs53H0giPceHfKba3ZGkl0RbjcC0poHmUDNmPnKvncFqIxDnLZYXszMIRys+k5cPDOeG8Fc65TgWE3l5/Hwj+ekjjUMVbYn7+gW97WEbAIS4rljHr2iVzf1Z79miLYmuXyOExWiC2VZ5qNHDbVs6g0C1bImXKLZLgRsaUBmC9t0eISGY9V7J04pirmn3BY8PPwDgWxH+WmJ/Ab24yF7x7mBaonyBtB4Ill/xfqd9TzeeYbmkO0/YlyZFWtcs0hHPs/nDP2hNSWeq8aaOw8c3NCbJ88eppi4yxGbFg0HEi6YhVAXL2SIKN8ZWYkJqnOkC34Dyrm4zsu0X2r3GCccglWcZsFxdEKcus0GDh16AEyd4C4u2MIdbvKTBpWZiMrefwySo/1CRrkcmk+adm4aZEX8Rky21jYUrn9FdEvkN70vTctPl9M0VgSM5mvS3LRXO8ByZn6Uh0WjDYEo7fY8nZmLHpTYSW9Uh53JxRdj+vwopFIoVA9dujzWZi8/gUU4tb045ytL+WFU1zfs71q5H1Ov9fto/kvc9qfTpDdJdKkE9WLwIYkbT3nez/YKA50/n+mf/9Zfnl+eX55fnl+eX5//Hz8/eBCe3/8yq4aQuanmJf5nhmRPb7z5wcZnhTQP7o272bbpXiMFh7W/5WOiTON2siRMLZ3XJlaOv/sfQwj/l+MJBGrXkpISb7YLff3xP1+mUyde/+jWDLRinHmmADMJyWabPYdtTYPHV6iV/aLRGmCwLlGvT7CvemZTJtgsYpgmhaspcj/nWmXFqwW73b+lHAzI4P6C6nnVg4fs6GvlqPvOhOmLbLo7pc2mGE44Hlu0SLvXt7fu14mzXPOQHZGOaPb0vaFoVM266wktN5OlWtEVOty+5eKEjuTrMCNyMWcw8mHkKLUV9rJnClmjWdR7XEThJxGnqsB09T3/98rc0nOnmmuVC11hXzRHVQ+e3qNLc8kuInB5hg+3pm1ZV3D0b7ul4z3GYCS49vEtdX+l3I55w6c8VVqLfI0hWOE0Pxw5pGvyd6cz0eKZLXNyXusZmc6C+r3Avrlib2/D9uaCvWsQgKU3/3+nooFYZEp8gMoKaXcyYSY5FjeV8uUXi9LAjINWpZKNNWDQFI4IwS3j8XG9QdOElu7ZjMvqMp/tPqH1Fnm7xR/3dh9OAigYcEdLY+hpw5UfU9ZG6mNk8segcG8qPP7AIbF5cGO3NSw8xVixsn6Xz/KZS5dpm7dZBDC59PxCZpvrl5Xdk3T0buwPDuNSdoD9N+MEKjEiv3wS0IkDkHY02C/r9BCXgCIbeMPCkF9RDg70b2O3Njf92RHiCQjqUP9wDIN2Odp5xvOzZeB9Mk3maLvA7BxFOlIl+r8tPJ05WRKViZKJTdWEYgTNRqpFdqfe26kekv2B0PCZTs3Znj8GOIN5o1h3AZkuYlXSngr/b61qkG0vcqaNpFJYR+a4nydAETM3zLMby+gWxSfONg8SdLG6ymOmpTOEJ5jkhtlpujW95H2fIQbDKBP1B36IbNTJEPmXesTftRHxSuNuArs/J3+m522QZF2HCnCxoTLN21z8g8Fm/vmAV6NtJZdc8Ts9LJVFkM5uywavfvMBSgs4TTIn2T8tlhptd4/kOw0mz90g5I6yEwHLZm30n+5GzmzOOGafKlD+OOctQUNhgm/asupuZXEXuNJzO+tZ34SyJYkV7qj6nOUMU9unDs/Ge9zuUt6Y5aLs4HWu28QJvkVHfaV+2uzsQSo+AiOVKAwYv7Jhonsl2OcqwyDjCo+taVn3PYNobVNchq4FsFRPMT5qiE3NeEXxzyc2Fns871VH0e6QIyRK9ISf179EsH65i1Gxy8JNNbMPp9InZNPYushW95eEnCUtzHf3dv/sTc3RD0V5R3On0g0wnhvACkU+0pmjdNw5SeWy/trkwaK53oiYZJlJpU3R6A3Sui7Ik5dixvf0GgOZSYNtf6GMLFKfRJdqYdK1t8em4g+r0WR38x27HdJ+RpTOBQYwu44TtRYiaLcRZO//tUtLNDReXAy+N4f1DOVLJCs87UwgtUDlisT93fOje41/pFMeLby4gWRFhURgh3MJ+PtWz0zHaJVOuD4AondmsX4GdUOwNw40/08qWaVb4pl8tWL6gHnucyeW33/xWz8l05nAs2D+WvP+o3ytLHvHUjCxPeCYP/fY0AzljOZAsTU+cdLCkIgwU6glQ0TxnYakbQdU1zIuch9ykYNyQjeXSjwOvb3QKbvQn5GMPc41rlqkpH1j2Hf/Rv/hrNht9CH70Jo75CahQQqdRetHzsL9j+fU1VqWd0WVk87+fT5T+5rMA8yryOA8DTpySfKE+DBBmI+lyiWMFDDx18kuWrzfEScTpR9OHVygehgfadIMYTC1FvqKuHeTvJ0bD3FKcQqpqJvZDLswemBSc71yah3e0prd1yI9ceAuuYoEa9HwmZYbrQH/I8e3nzecL891ODQg5EfoBrUFpLm8jbl5doM4PDIaKMNyuuMs/MI8jC0P9VY0PHP905hQoriMdpEhvxtl4zJZglNouLE8Q+x6OI9mZ2rvoB86V4K4+4Rkns8xc3DCk7J7X2GxP26IdCWbhYkWKbaTtOPVthqJg+yqiPRuk4egghgEx2sSTHkcuO1795d/gzxFVrv+/4v5E3J6YCg9l1iLIQCRrhv2BadJ2d//hyGJ1gSxKAgMDXFshqqlo8z8XgwY4WwPBQvuob+TMkY6TDHn7/q2ZJwd/23C8L7EzfehfriNKfyJNrvjm9itjKwfePPyOtjvhZXrNlGXz449/YFSSfNBrFiwT7t/vKOaJfq3TnW3VkqHoI4ltm9JOO+FYz4Ebry8drtYGyLQMYBygk3xlkORfv1zihAqr7RiXehyz7xFcLrHbjnk2NJFeiq08vGWEY4I+ZymprZrBCYhNWv/d4yeu0wInS4mNkq2fzUi/wfE7hKGdPFspzfB8vGXe4qwlhcmcj3VN3vTchhnx0pROoj3WbJG4Fv1H3bOZxAlrx4OypTNp8qqTYMGvby7pjejvXVFR9C3d0SG41badBClrqdiGF/gLfajOzZnRmgiSLQtTGD/3u2fj/enzs4fgX3//LW8M6KD8UHIeHxhLB7nXk7B+cUOtZtpRsrl4CUC731N1EtVLbMNNeV8JLlMf4Trc/14fjFmcsokixspCunoY9eOBdx8euLl5ife1NljHbugcm6uvL7Ej/aIqEZwfnr+Y735DP3Sfo0prSnBHOLU1fWOYRsqKOUoRTJ9rDs5lzNVlwsW6odr/YL47cZ5asq5gZ9BnxzYnFdDUA59qHfHtGouybHFvFsSm7hgXNv0YkFylFLXJr4/PbytB5zF6A2fDjrPPPXqnxN8uP9e5tonC813OtcSK9XgXYonv9hRuz/5kWHm8mG7uSNIFsWGMOd89cp2FBN6WybAm2H6KNUum4MzaMs7zYU+gFIlffW7NcJ/jYoCaggkRSTrf0FwVgwaC2JAb1Gf19oEwUDj9jFObQ8uGKGxB7jmYYvxl2HO8cmjHkgkNNCAOX/gAACAASURBVArCiPu+YLh3GFN9WEZ+SCRCJr+jEzpy3U2Cl9kSV1pI6zmwAGDhgOcPWGNPbkBa7uziHaEsbS49zSn4aThyvD9ClWCb5umw92n7iKqzSDf6hl+ONfmPBc4Sziaj4ZYuYfstbqmQw9NveHwfL7hdRJ/JRzbXCao8ooY3BPv52VhX5qbqLEJEGzG/HJGNXu/Qsggtm6IPmCo9d24QsomuaJE8GNuyu5Dad8jiWzwDyFmsAw7dxLxImAJ9mNnZAkcEdM6B2TC67A8Nx3GksyrOpiZ0HgWL7RX99Lxq0tR6HaaxYxwqBrklNuxq0yIlsRo4HwgsfQiOXYUlbJzBZmUoyOxhwNqfubx1sc5G4TwcWa4lw67AnFlMpcC1ByQ2nuGIjIaQuKv40H1EmAyRcicOvUV5fA6UKvI9oTm4vSwgRvCHj++5P+kbTrAJEbue3p+4r38HwJW3IFQdRZ7z/V/om8Y2shiLN2z/9hYbffjsPt1THN/ym998y5udmWMnJF2+oh07zoZi7noTMR131I2LMM3sKwGVHz8bb+QtWC9MMN/NiHWEs17w6lJPyjaICWMHZx0xh/rvGmXzqcu5tBz8V3q857uRahiQY8SwMBSOaU3XVZSlhR0ZlLPT08uerWWxSPR7fTgW2NEEo2LM9QGVvQq5vHgO7Hr93SWeswXj5rq5ZcuaxBGMpo6dbBc0jwcOP05Ek2mM/+43xMNEOPUUZk761qEbO8TV9Nlv522DbfuEgcOnT/oAlZ7H+vIF53lA5nod/SBG9EeqoQah7UzOPy+L+7OHoG0PLGZtxI/NEeFZOOTcHfQm2S5TXn11zWlXMz3qSYrcjIe65KGfeXmjD0b71NLUE/2o6NMnJGTA998uCKsRZYAH7uTgNgXkHVdrQzeWedTjROO6DAvTMzILbtbbZ+NdpRnH4yP7k0k9+g4Cm2j7Fe2kqaqKXcWpP3LJFZan/z953PNov+dV+EC60E7m8XhmuYlpyxN3Bz1NURVzsh0Wy1fEoz7wjn0Ht69Jrm9pTVrzsbVwLEXxOOMqQ7mVfAGm67rUakIYWLWVXjElCwLXwu/031d7xeZlRnvIcQxKsY078rYnmX3yRm+wOF2xlmuIBaPhA/xUHQhml9WVz73QDmAbxpzvcupdSZnqgGQoZlr/jnY/4BmDaXkOhsD2CCJFmiasrnRAYm8k1u6OadhR3ek5afI7hO/x6mINJjV7dXlNOi44tiX2WdOB1aJn0XmoRcTRcBM6UUAY+QzDQJDp72YXCV9fRdwdG7JLPZ9Vfk8SLCh+2JGGXzbjuJ+wy4nj+x1nc4tWvYvaS4TjUIcGjXbyiY8Jw7wgDk0wVzbEzcjcJmTeE7POEjEnRPNMW5vUmor55voVXR/xItKH26m4o+0l1VERSG2LrWUh6yN2ODF/oW9p9/bfAbD+6p/xq98sEZXgPOj5PL+tOAvJNIcMgbaLhBDpTjjXS8Y3OkgrvIZg81csk+BzT1wYRgThgLIBk9bs+4GdPzC3OZ6n5yBeaCLmyMoozNpLXxKsBP398/TiaOxzGnqslSCyPTJz7Y/rjn5umIaW1De3gLxmPV8yei3no/Yfi8UlDD1p3TEMev3tq4h1kPCg7qjM4X4Tpex+eIcXBPizIbd2O5q6R+5GDiYdWsV7OM704jkILXI8RpMNGpoDgeWSLWZGoT+Lry4p6pxl7GFZ+n3VbBPZBcO54/xRr+NqmrhwZ67XS84mOLALhxeqwVEf+Rcv9S3l8tdL2qPEbnfEth5zVNc4niAJXRoDXOkH8J6okX7ypNMEllnDZIXnClzXxzFpzsmbeNdPvLh4zdYgTQ9DzaQkXTVyNFSMYvKR7Z79g43n6nmpkppzl7M7VXy6Mz2hdsr40ufhdODa9E6qfKRVHlY/4phsQNgrQvcLPcTnI3PsUnfaZqUbMfkeyvN1KhyoPhV8OvyRri7YGjYXdbGi73vOp5qbtc6utbZg7Gb6dmBC27Y7g20HBEEMj9p/cCX59q/+Jd0mpTDtbr6Tcu5sHvKPDBvDU91/uVzy9PwCjPnl+eX55fnl+eX5D/b52ZtgPvfUnk57eL5FL1u8cMHqKx25uAufWQlkP9CbK29Qe1hlS2xNXKJTS+sXL/jd/gEVuPz69dcAqPMn5ABNdcY2zZSZMzJMe/Zlyounpmhl0ZQnxu6M9UQ0O0lm63kKwcHCEYLRMLSXUcv53LHNRmxPj08OHqk/4YQK29RShv2Mv8pBTISmD+lifUnTTXS94Mo0UH90GqYBJjUymd6f2fGw7ZT4229Z2aauRUNdtbSiwWS5iK3n4IL7vCFUARhlgLlvSQuP08eBt3udWuzdiu/VP6eXDt0TnPtuzz6fyJ0UNes5FuKBQQ6srlJGpaPFu4Pk3fiB63yDMvWg2Jr54dMHxPktojUQ/Kqjswv8fuKlaUZuvwAzL8YDtpuxurxgu9DvukgzpmjiT3/8SGPg4V+9fklT3HNsJxJDintqLeqppbs7cLE1wCp7ROIz2i6FidIf9x85WhbpzV+Rm9tbMbXYU05l+WDkhaYhYPZmLl+vUeMXbq1AtPSx6MjPM66j64vjDLLocKcJK9Dvv3E8itFnOCaEjo4enSkgylL60KIynIZ52zK2DTdj8vlWJSbBZRPRjRtS893FImPJEZVXFE9p8B6k3RGdHhjU/bOxtia6DTd3JMOaho4kNpH7WuLOgq6vaEZ9c5N1QYuFnWbYG73edgveGbqhJd7qFG68XhJSc+gnNkaCxrEXDNRAhFho27tcbbCtgKr8xNevtITWMJ5582lPa9JPP332BlS1yNZkizUX3pqto/dkn3fsP76hkYJf/ea1/s1C0ooPiNZnbcjHi2bGGs7cOzaJSemt/QWW05C3io8//B0AD6GPs7RJm4LdGz0We3pkbhe040j5xB17bohtn8l5nh5Pr27oXZOpGGbUVJK6GwoDPqHe4doTWRDim57nXh4pdg9Eg83d3+s1E57Lr7MEuzjjW081g5J5s8a2Q6LFU7r2jJc5jHPPw/3v9Xz2MV9/fUPT1ViGWeXqxZab13/1bLz12LMR+j2yxCJZZWRuiG/6LrM4Qh1KnEVOdzSk98cH1MJlPPb4s765WcsN+1xx685gSjjLKCRYKFYsaDu9/jevX5IuA6zpHWtDDHC7tahFxuy4HI3sXN3ORN1z8gSBR911OIa0eg4cOjngRQmhqcd7FwmbizX9cMA1WZjqcCAJIU5c8spIR80Wy9WCOAo5fdCfebLAYuLthzN3td4rcb2klD3J6jfQ6s/2h3fEqwUkE7khkc++gMf46fPz6dClz2LWE6J+4zGcSi4Xgo3JwcdWTFkJlFyRmLrZRWxz7EPOjyXHXKOWtq9n/sJxEZHNawOgOU8Ns6wpjp+4MbJE63VCKy4JbiMs06/3w5t7DsOMciSW0XqLwgDbfe6k3/zjj0xNgzCHwMNDQZXv+ZGczKSRYt8lWK6wffjqRheeh1zhRxN+OBMp7cj6Y40sct6/uefV5dd6suYL1GjR1C5n039pzR0yKvGnGmUQox/fV9RjQ/IqQGT6sKja5xvTjWbCZcpx0OM97jvGPievLd7e6YK9WkakSU/jSgZDX2VLi10lyNuaJNVL2B6PzMWJ7PtLXFPQO/zQ0qgD917BN9/q9PFJSBZuSJDe4hm5qnM7U0ywpKUxsYU3PUffVpXL7TdXWN6Gtn5iMylxW4d54SLMl399e43sl7R1R2DY8tdJQHEouHy55LUhQR5Hh50IEHGIb/rOWmJsZ2TOlvSBXuN2t0NkHu7NDff3ut7TSItE2jj+Cmd+nq4DuP1+xcPvzgyzQ35vJGjSW5LaI/AXGoQEVPYW0R8R84pJ6E18tkZer7/h/FBRSENGrGbS1QrbiVCmDvnyakmKBZcenWnk30Qp82wjohgv1A46WDjMU8VD+RbRPa8JSgNEitUIdc7qekNv5lNeWchuZv8xp35Kw3Y2bWojzxMbc+DZDBzUjiha4q5NYGVLznmJXHqMgUn8RB4f7wum6khg5KREWfK+bhnOFYk5GLdhzPb8kfMXpH5GS/uFhXWDfRbs2h/waj2fcqo43xXEjsLtdNo8kJL6DK+2HtaV/u6Ph5J4GXDhC1Rv+kmvY+o6I7ZaZoOq3Kmar5ILAmHhm/XxF7eQCaofP9EYsJQfZiw8m/4LlH9ynZIa9sNrO+GHj39gafE5mAk8Gy+Yqc6P2CdD+HyueO06XEQRjqH0Wi5SXvktkRchDDm6wuLv949k61e8+/s/AOAFn/jtb14jjzWeMJp9oSLvOvKpo2kNNmK1ZRTP0+PtNGCb9XKZSCTcxD6WIYoOZYSd9kSDw2DSfalIeHxT0FQ5vjCHux+R1hHQoSqj2SktwnVMFLt4vZ6UeX/gsIfvvlmxNtJUWEva80e+/uYveWHSxn+s90Tdc8YYb4LJnvAdc7ipiV6At1Sf65+VmHE3MaJtCZ7qmLIitBwK1dIb0FPgr5ldxV058q7UaGBb5bQ21PZM7TwpaUT0doXgEXNPwekivMxjdQltY5iPxi/7h6fnZw/Br357wUOtF0udcrztGqs4cm0ERY+HgvlUcJF+S2gapetu5OWLl8Trhj/97g0ASX5AWCnpzTVWp53YRRBjjRI/jYnMLaVtZuLI53bVIQP9Vp+shvVFxpQEKCO++/L735K3zw9Bayz5dDhwMNJHB6U4dSem5j23V9rxfB1+z/vzRDe8ozHCuFmicBlp25rNtd6gUin6csSfEmRlxFfDiN9+95ofdgUYx5A4GxbrJU3RcDAgkGLKsRcLXi0vPrMVtPnzvLQKl5RScDT11A+fau5yQRYuiDzDDOFF7JoTj/XiMwfeMMd0tc15UHSlNpzjY0t1d+RmsvBMoDFUI+WhZ71V5G8Nw4d64NIu8XyLs3HGZTfSK0EX+zRGKHTkuSab76eEq9csRESw1BH+6fGeMm/p64hIaGPLg4GXl98Qjgduje5g+/CeTycPK3a4V/ozO6zA25J3He2Fzi4o1UMicd2QdjbCm+st/jZjXm1QpsbW25KxksjIpq2/iOLBjiUsPE7/cKTPte2kIiB0fG7CvyA0YqxtO3HTbVlc3fLuYNDLx5xRFqzdLb/9WgcE+z/+A7M94/YdtgkE0/uc3eOBdBMjDDHCu3d3REFFdJUhTIDnhwGDKsluXuB/Nt0/fR5r2JqoamhI4xnXk3gL4/DLiD++7+jGmfXGaP0dJ46nRxJrIrswJAq5B5srtlcZl6900NNNM444QCwYZoNUPtnUgUstQwYDZvKJKP8f9t6jWZIsPdN7XGv30Femqqqurm40gMFgMcYFueWvphl3JI1jY5juRotCV2Vl5pWhPFxrdy7OyWQBkVZ/AHmWceOGHz/yE+/3vnVOlRf86Z04QG9CnbXtc7U4Z4zx5uL3u4VGWWpMxUj74ScAVLPB821sE+JEvJfqzLi2lyyvXvIgdQ0j18AyfQ4fcvpRljWZcOgG4udEAC2AMGiwJ4W0zJhLYEywcDg+K/SmjivFnK9DF2dsKT7DzmTZa7RRnpTsWdiXKFOFJyMVQTSimT4/nXLUO3HwLseeq/VrdC1isxaGhtGNZNsdiwt4cyXWT18v+PCrS/IebuW4LDcW05CxnNncSJKL+/TIUN6jDzBK/tz7+C3T/XmxfN/2BJb4fBU6GDV4pvmJKUvpO6ayYfcQs5OG5uT5tNWOfP+IZog1u3YTkkZBrXtaWXLUNzlG65EbE6dn8b/6pKE7Oor11SdWHvvKY21H+L2CrohxX1ZQfwaUGJoD/dCTyn3hOA6TrnEyBwwp5lzaOu5qxtSpPO2E55bkB143Fm3Rokgu40UwkXY5z0eVqhHn1jildJaFemGhLsS4z361wfj1HMWdSA7i7ImHgtBQiQyNuRS57ppzo/Pn7RcvwZv5grIUL9w7cPtihrIbGA7iMFaOB5banOn04ZPVMjY9xmjzdegxzeWhWCrMpxq/cNlIUtyhzUlOO0zNxpZyO1X5jLOpGVWXSk7OLBwJrlxqJeQuFhv2fRKjj58JeVwvMdQJR1pWXpWjugYPaYsukZBJfcRrc2wlY5TcjGazophVtNNAJz3GzWLN6dhgKT6GKoE2ikrRbbEmnfVaLFDFW1F4K+qq40mKhYbrOeFiIrIq6oOkhDPPqXsay8RIMhS5EQe9oRk06qrAk8LAY9fz/NMT7Ziyn8katvSZtnYozSUnWYdY1zWGa/P4t2eWkQgDKK7CPNS5ClWqnbjU0uwdhQqR06HaYkzi+Jm+SVBevsJFeoDT+7P+vn7zT/iRT2gpIMNIYXRNWg4sf6Ux7MQlELcjDGC4C643AlqeotPVDrmm8ngS4ZQhL8B54HTsGCXibLLXaLpF1itYkqkkXDrUk4KSxxgSQHFITtCYTDgY9ufRX90wUtUKLRZm9Fr+n850KFhfj/SStcOqWnzdp4xbpr2wcq/CC5aOj9brvJG1StezgOd+4phOWJowasbDO4I0QRkilEAm+593xDMD3VXpdHGRbfORwTa5Cd9w5X4Ebvyfn/rax2LtuNM91fgS6oZY1g7GxUDeFASugSbj65E28pxZ1JaK7sjyirJEv+wZPJVGpvv9zZxWbYiLI63sX15B0Sssbq6JD2LOgj7HXL1AWU/Yg9jzStGQev0nwuKft9VMlsN0KZql0HcpjVw7wWAQXSpkbcVW8mKOR4XuaqTexhTSQh/NkaGeuHs+0kth4NO+4jgNRIHG7ySbiT13yXcxZRlzqMWYPP7NxjU97Kmmltqetb4hmC1ZjueeVZZNTKNYd1Z2D9kWx9eYOeIccSuLY7rnWrV534r+Tf3AVE/oKBgS8LIydIYMbNOBrdjTX+kK//vXb/hQ6yiR+N9/u/sXjs/PvHn5DYZM3RjewFO+Z8IiXMhoSNORpecMLEP+jCnfYz57zdxy8FWTo3TKdS9CJYW7A6Gkl2udiUsz5cXSpZbREX134qL3uFgtSOVl8Bg3ZHcZlQWORBGvw4hoOWc1ZPTZR61QMNWQY2JSS17kx/2JQ3WOvr24CND7Dl/WSFRKQaGZtKNDjhjj6LWL7kHcN+QylOYOJ5Rcp2ljQlWyvnQ1j0XLsVE+ifSWSonhK2RojJHkIr2co+ouo2dgSAk0tXdZrEzGMaWUXL6z4POMUh/bF2DMl/alfWlf2pf2n7b9oidYnLYkpbB43779gNHEmHqALmV0+n6itArsY8yHSkoLDRNL/4JoveHiKLy+93d3ZEXBqmmxI+EGq1ONF9ksVyYzGfaZ9RFN2xMoNWokLI+V4dHPdFIUzFJYLflTjP6ZOG9yqpgODamEB592KWWTg6Lxg2R8WHQnqpXDdy+/ZSWtwDEPmM0XZI8pD/fCY9qsLfS8xg90fE9YHn3Xo/kRmA6bVrjk8RSiqBHh2uDrQKqNKxpNfEfhD9QyXt99JhyqHXKet3dMkgVFG0CvW7y5gi8LVg9uQ34/klYFX0nWmbgfOJUp9aTQttLi12t8zedUdgwSGGQPJ6KZylS75K0Yr6pV0JsHlMLGkwKdY92S9SqmpmMZwpLLTudq10pZYg42u6dHHAkKuJgvmTY685sZuSPG+HgoKf+y5fpXG/6P/ynADfnumdoyeRW+YHUjapjKMiG5T+m6PUona7iMGktVSDWTJhYW3B+3vyc+HljdvMCR5ODtfYZjrGiaivz4eQh0sAjJ8keq1COVit/9pLMab9gdevxCjIm2cOm6kqFvmEsYueu6XKsu+Vjy01tRw1gPLWU/MlkhquSTvbWW9KbK6RTTI8ZECV/wQ3NCH2YMsVg7z3c7iuGR2f8yw1ueb7uPSg2KYuIqOUpt0kkGjcNhYltkWE5H9dzKuTDwxwFTVzF68Yy2Llj5IaY3MErruyliusd32JeXvL4R3kzHQN4pVA8V+iCeO5kNC9/FDwA5Vqq6wxpzvs/PgRAfhYyzx0cGt6drLCxdhPX9dchYGPTpwGMu2WfGmNb4O7rde3JZjG+7AWXcs55ZrKUk2MNTgUWJE4RUufQ4JptTnpE8HqgmMWeH6o6N85KmrKmlckHndKi9RVZ9TkXiCKPwcNZexkVgYNLTvhfsJ4NTMrNtdicHU3JT/uN//Q3NY0rVt5jyTPE3F1yEL1laE0MsS4zGit3TO358fsK7FO8x5DGXo015OFDJs/Fp9zemwGJ+cYkuuWJ/fFDIu3PPahgaXMmnuxgGVrqH55lUhfAqdVUnfuo53t8zyRxd//gjq7nDpRkIIWbAsFaotkI/jOix5OHMBub+jGEcwfyYh/OxTg1ap3AhRX51M2BXTWTZA6oq+YizGqs/H99uSFDHDkXKP7moaJZKrZSfBG+dhU6mjPR0nB7E2m7KlpmlEG9rRksyxjgqVVGTqj2tDPUu5z52sKQYWxxJtqHaBqfsgDm0n0p9rmYu9tSjKy2J5K299n6ZO/QXL8H78oAiUUb+5ZxGbWi3e2xJGbV5GXH44UeWwRW//U4gyh4+HEhOHYu8pyqEy799OPEYP9EMEU9PkkUmf8fVC5//6n/D6lfCDTbLkf2HI7r7AltqxL1ZRZSzKyhLLmVCfXsq2JbnB9/Tuz3P/R15JcILu6zEZMCaWaRbMSC9JmLV93mN4YlL62K+YHI9dK/k4UmEW05lyvXyG6Jx4iTVknMsNsENebWj+FgUqjeEG4V8tFi9FIs2r22ybYY5OrihLNisz2nTOrMgLQf8Uubf9jaRPtBlBakMQfnqC9bRyGVgMFvI2Po7SIYUQ7dIcrHAgsBl5Rq88paUkpVHKU/cXPmgrz6W6/GhS3EG8JwZL6VO3j4wWI8rroPXRBvxjBdSG/Hf9deySD7s6fyUTCK51NWccVIIgpegCxBEVn7A9A3MycNuxAGaliqb1a8Y6gqkbNDN7SWBvkQPRzyZ60kNHVVdsKtLXFn/1eQDr+ZzjMmlayUyzFC4vbB5vbml8c+1GgFcz0IxLfLaoJVABLVyuCtqDmbJP70Sm33a9+RTSlU5aLLi+/mHd2zpKZsTz/IwVoYGVwu4/OY1z1uxTqrQwHh8pGpbVEOGDa2A/hjzp/sfqWVue5xbOJFKPxk05vnY3n4tNvbLlYc26dT0zGTOMl11lHlIkvyVMJB9DkPq43uqfc4gw4ae0nATLNEvLA6ZmNu0zfC9gMurgFCGf8cp506dOCpHjFaqgdg++lhgRDaTRCFHxkDTlnQP92f9HSSie3d3ovNKVGOkl6ofx7uI8GKNEUUMEmRi2jau1qL6Lr1EPueNR9Fk6EXNbCVyacFs5JTmJE/vUSVZdGeNlEPCqFqMEhhzFYQ46oCh6nw8km0nxF65zD/l/v7/luWHT6H0pG8ILg26ZE/fyvxWU3IYTWgWzCSKluZAz4DpKZ8Mly5LsV0LJckwJUL8FHeUWc6L66/wXwrDPyx3ePpEjY7aSsNamxMsXeIip96LfTa1Bo1+c74eLi+4lBp55uCQpxWrucPNQnx3UANK5ZHN9W/Jn0X64+7xR6xmIApr5hK41isdmqSL0zyxPz3jyM3LN9xnCXkh9TN7ky7rUHWFV2uRwqjGJWZg8te3d0xyD0x9xVic54iX4YRW62gyxdR7OqvApaomPmIC8+pEbxvoaxvn12Id28uJum1QvBFF0i5utYZk1tLkI5VMbXW9yo0/Yq0CRokNGd0WdIOiSBgkKb0zuyJNS2xyLJkCU7XPk2l8bL94CY5GR2NJCp1BIa1bwoWNvqvkIKUslnNCJ8C9Fpt4WRg87v7C+8dnMplg1VWH5eVL9vWJURaYvlzM8JSJw7Djd5EsuZjrlBWYS4dJQmiN2QVBZEFWocnfM32D4fn8EtyfjlRNSf/RanMqlopH2/p4FyKHEQDLhUsz6LQyVm/ZCrUKwzCiyVzc7mlL2lYEpsPTVliQ882vuS973sUdJ6njN2i3WKaJZ3aokZhYN9CYTjaPRUOkigOqDc5pyDzL43oxghRF1d7UlL2DqnmoMmdw4V7SWmtKY2A0xGd+uCV6dNHXtyDVLFp74NtXr/BGnfhJWN/x/cSLX19RnYpPeltuZTP53xD2e0yp8vFSjbhcv2H1zRpHlqY06rmn7Wg2TZdSZkd8R8zjXIswNpfM9JBegnSu3nzN2luhtvesr8Smde0FqjWnrUw+pvDUwcaaQVf5xI04UPQR3sb33FUnSrmhtOc7li+WRPMjXSFlY6KQyHAxh5JWOy8/ASizGi+84ebXK97/KPr2NjlB7KDVB1xZ1jNzdIpxoC88DFNSVa0c0lPM2/0djkT9uq6HFfQ87x4pJL3e2vQJX1/wZuWRHOUh24xURc4xS+klo88whfiXNtmx4/l0nsP0BjGPU9US398zWCGaKw6vfNvRFgUPdweeZVQi9Dse8h3R2HH/IPM/o4vlHQiaJf/2VjAfJVrDd5dfM8Q5D4kwSDZLE8V18UKHXhX9c82QrK5Q9xm9BBr1bUVdnjjFfzvrry6pxV795obyectkFCxnAiwVBCGXX13RjRPWtYD/q03GEGmMlkO4EJa5P0T88fRndL1muRH7c1pnbP/7A/ePHz6JVO9+3OObBo06UEmjz7FtLuZrtvWW9STOj5tZhKe9QDHPQXPKpBLJfJ1WFZSpRl7ELCUtzcK8xbB9ssxAHYWxcEr21HFKY+v4kiWr1nW+Tx7559U1pqS/i8KON9ff4H/3kqMEzHVWiWMFeFWJMRPrZ4p8iiFj+/sPJIkUqc0chtP5pRL5IYHs29BB3+scH1smmWM2lR3FvsC2LYxR8jsXDs2QEhomwUbMxf5QMdUWb7UCqSxEX7bE4z3FqcCTOqeqE6JMNlOrk0u6un1ukmgwjjd0ktHJ0HuGz2jUGq1CoDeftPvyRkUzDLRMpfmILtYdjFAl3dUMktpy9mJGcvfAGBoYG/HcpsqoioEht1A7ceaNfYd2GxG9uKZWZUmI3lO1JSbqJ+WQsSkoUge4LQAAIABJREFUioqcjlvJp1IW5znXn7df1hMcPbS5FMstO9zIxmo0bElnpR4aFrc+pmrxw58FpL+N9zTo/H53gEpcMlVgoA4D3mJOdxS/5y8twhub62sXyxEvdcxzxuWCRskwbIHG6tqMMQ3RRh1L0h4tFxrxs3/WX2vlESUHul4sOkvV2fge/kplbERfnu9/IrItri5nWI4YYDvUiJMKVdUZPwpAzgJGXeEUH0mkS15nMa3m8bbqsDaCcmt+u+HU56iFjuKJ0IpqrqjGgfYxIZa0RIvPINaM2Yyg1DAlUfAirKhrA211iyNphVRvwqanseY8yGSygcPl388x/Q2tLjai57xG8yfaw4nNPwiLr/pGxW0hCzpcXVzQv1qv0bI9puZgSDkqy1Nww1vUSieXaMFmPL+0e1bE/T152aE64kDtfR3FGviXH/8H6U5cDL/75/+GNeo8/fiet9KC9AyHRqsxo0ueWnGQmelAp0xQ9byTYal9D20V0yXPKIa4kOqpZ8oHnh4/oEnvMPruf6XJY96/fWQwPh8OzVvIDZ3gxYor6X3thgcO9RFNhQ+9qDnLYw1nMpnqRxRXeC5usaBRNS5DG28mxi60Wvb5SUC55UE7TDpTa3B/yBk6MY93ecrz/j12eI2+kjWrY0l/KMiuPZjO126ZiX1xd/cOdXGFqsEgBYmNdqIbFGZXK0op9VRNE+HFHK3WSFK5BmjIgp5mnIjn4uDJU50/Pj5wbS/xZa1s2to47kSswEmiFPenlLBNyVFRZHjNsEzUvsT7DPf72MtQLTN0O6Gtcx4kavBqsNk+PRG3HbNrsWbHbsPD2/doM42ZI8FSdk50a2E4Ht9Llfap2WNtZkR8RSEjOsOQoSQGTjBhyVrcTRDiRTp6G2FLtGDfdLx7/gtZ9pmoCyOJBItovUbAwCKasboVv2fkPX1eMakCNASQVgbu/IKXl99SS90kc2GRpjb/8pjiS8CUEUSsfz3nYKq4Ulzg76/X2N4Sz1uiO+J7/++7f+Hp+cCART2KtZckFqfP1LEF85BmlJGlQiFNjsTTyPpKXIxX9oyXqxdQHwgW4pkbxSM+/ESGx/VK8CyraspfthnFQaGRhnt6LLivO/JOJ1xIEenGQDU93nYV8V/FnOXNiG8ETCuYS9YXJctxP8N96/oj5BOjvASNYST7sKXKJipT1qeGHr2jsp86lLmk0wuXHNOKcGGjvBKG0KU3EQ4p26cefRIGydwLsMOA0lWxZbnG0BoMcY1CTydv5my/J586NpGK64vI4WZ2fvb+vH0BxnxpX9qX9qV9af9p2y96gtPQ8MIWXl+/tEiqhNDQP4UbBrshp2Bu6OwrYWUouk6pt/ywu8dcCYtvvLLZP91hj6DowlJ4/3iPvYy4UL/j//qDCN2kWkFdZsyuLb5yhXW3xkO9CMhch1GSUW/rmnBxbu298gL++qxwlHImm4XPZqWwwuZZxuW/Xs759fUrdN1EjYVXcUg8LgKLyQ0wO2HlJNyTPZ+YbzxWr/8RgLjVeb+vGFcXrF+Kd7v4ao3+h7+wa7ZExmsA2rpBrW06vyWTUiWDZZ31NwoDFGtGKMVTW2WPZi9oG50xl4rszYlOL9hcBby6EJ5RqYzs9g3zTYN/JTxmx70ia0sys2SS3lwbOJhqz/ypIZdpKMvxsNZz1msLzRLe3IWnM2kWD7uG+iDh4c3VWX+/+7u/Z+yuGdW3DDInZg0jzfMepR6JH8S4/2j8D4LoT0xHBY2Pa2XCdVzcGwXbE0XVjWvx/Z//ld2//cAggTbL+cDD/Tv6pEWZC4u8HwzIddzuRK/IXEKnoaQTK8dip51zL4LgLzw2MU2/x10Li3LzesPNKkBJDaxSzPXuOSYyTazZBmTtaKml+EqAHl2iSQZ9tauxxwrFnTiUwvrexQOHPGPfPlDUUjbLU5ivl7ThiBmIdappOfZKo9VaDO/cMu0lB2ydxaAuCBYdrYwGUJUE9Yy4q9GXYiKHtkJ1PE5NyfjRw6ta0uHEtW7xVoagHEdHNy2yYPwksTWaGoXhUVspmQTVpGVOlzeiZCAV+8IMG2zTxA6ugH8vrXVz81vxrrMH8tOcfv8To/TST8aEeb8lq57pc2Hd6/OBQFWxTB0jF2vHtiJ+97tvsKbgE8l0+egzaTXLZYgmQ3/3/88jpZ5wdfEd40zM2cV8gx9qKP5IZwnQRlUbNLmG6pznBHtFw5ClKS9efoWnTbjaE8sb8b96NqAlJz4UCuYkokZF2rLxNgTRgiQX79b2NZY2J04PPEnP0q47Vv4SRe04yf0+tiqNW+H7yseAGHFzQg98Nr9xKGQd8DFLyIbPeIK6idqKz0fNoO8n4rKjlPgE/VJjNGzUe5tWepKuG9J1IcHld4wXYo8VSkVVfU9dFMSPImKyS0bG2ZzN5WsmOVb7rKHT4NXXv0GTRP2Hp5w0q+mrji6Uoscu3KwvQYZHP7bQVGknjfxRhh5Vg67t2VcViil+r253TJ1D2ytYEgNwHAumpYJ3ecnsNyLEvrzy6fqKaDuQyxpDvTUpy5q0yDAMWcutafR1wv0uxW3F99rS4LmcUJY6L6/E+iln52fvz9svXoJz28SQyfTH7IBVKYxTzZPMObm1ylzxuH/6icODZBm/XjK7Vlk0SxpNhCXDC5vGmZPe5+SZYFRYLkPuEzDu/w1DahY+NQ2T2fBysDE6EY5TOpeFURBaGkeZpxo1sPzPBKa7BKMvMCTzAJXP1BocjgmeXCil0tKZAzPVRp+LiYjvTgwNzDyNp/ojjZLGu4eaF8tbZrIYVwk9Xlz8htGwMHWp6/Z4gGnkxeWKwRQhk64acW2Tw8NAU4qkdf0Z/cPTXw/o4YR/LanABouZpzLORuJaXNqXTkShWbxcrfD8j/WKIe/Ct+jRxK3c2IO6xbqC1HKIpQRR1yaYls5J8fgWEfZRQ5vmqGMGCq4p5Xa6mm5qmOtzeskW8nT8DPp20rCnid9tblEkQuvf3v9P0nRAGQYuAnHgtfEWU3+F45no8hnq2NHVA8QlgyQfL56P+PWJzrmkkPqRahxzsVwz+QbxKHUW0wROBT4+aiSeEY42s9k1nbGm2p/nVABW0RrHKMjrmk6GtA17QJsU6j5Fk+g7azYQDzXWkHO9kiH8XKPuUsqmxZH5Bt3TyIoRz2woUtHfTLdQVI2iGxlk0uXy1S3L0eFZ6Zlk/Wxk+cyjiPnGwr89NzAkzzTrzQWe6VD3DpUhi+BXK6ZUZzhW1DKdULYlpyzm8CHFuRRGlDt36YYj2jjDWLly3KHTaoraoJeE5F9HBoppUegWk0Rh68xRXIOibLFk3eq2yLlazNkEEf/xEnySMk/5/p51YODdXnIqP4bmTarGYB65WJY42Ky5xfrFBm1UOUmKOK/V+fbKpBt1lFSEyIeiZXga0ceajaQ1VF6tiTSD+foVrZQdqrIc33G58i30mcgx3qcDbafy02fqBB+zLY4jVQqGkKItMEybIJUE2sZEsHrNKqo5ytpq01AozJDjKUHixbh6YWFnPd3GoS8+0oHNUX2TSc3RpKwTTsupSsgeS+KDeN/jacfo+3zYx59oJgezQqvOiSkuLl9g28JYqtWRtu6Jh+pjeS5D7jOkA4bSci0Zaf7weI9n3uA5M37/VzE/aZ6SVStqUyeTGIBCm5NMKtM4J1TE/OhTQ94OlIVB44jFeKLn3dOPKO2Ju1Ccd9+8NPnuxXf8x0tQqVQUZUJ3xFke7zryuqYoIbqR6Pe65cfjPaq1YiPrLqdmwluE3P7uBTcyjbO6cYnjnME+sv2DZM6qU5gMNLWl78R4FU1GXiUUcfyJScjQfW58lTHfUaTibKzcXybQ/sVL8GoZcn8Uses0faatEoZdSfSRc9FzmAcWabxDDaW0jG1w93zHWHUouuisF/n89u++o3idkaSSuR+DUFUpzJrkKHIJjqYRqga2r6KY4qXyVsTZJ2UCiT5zm4aO8wLe21VLdgxIr8QAR36AI2Hr+1JYUKtgwe1yxfrr1adcSpJWfChy4kNFLSnMtnFJUkx0+57iB6FAcfU64uuLNREGpWQHOT0X9FNHFEScpEROFT+wUCpi5cCpFEXnv3lxDtP11xscvSWQwqOeotA1I3NNQ19LeLTjEjQKjhGjSZRT5R7xOh3b8hh1KZE0qQTliKKOLCSgoDg2+GOH8mrNai7mLE4UDtqWuvKwpVqAYfY8tSPVKSWTB3lXnyMuqwaqNudh32FU4uL52x/+jGZaXK80QkdaY5nPPK+opwpdIvzyYeT7929x3+64/meJPqtS6rSjKibuH2Vh69jwj//bf+NyfUV8J4ytQ3JEiXc4hoUaictccS36vCNRUo75ZxQ6AMdzWfgexyIDVayxYB1S1S1eP9HZEt03ZHhBQJ3v6SYxnhYKSrBkHGsmCfiZ2RHf/pfXrEIX552Q23EUlVOR0OcJiSULhfWaMai5iALKUlJwDROK29AVHVV/rnKw8sT8GLpHqSh0poMhcx+NMkPVa0wVTpKL1BgVAkfntLAJZNJuUCtGW6MZagykRI6mUHUmsxsbZ/wIPBio8oxeG1hLLyrRthTbnplZoUodtrmqM5/rVNFnaN4U8a5a4OH5Or47sP8gPUhfY2n12MaCVOaE3WYge5+SdBaTPNyHvuDuMWe1MHkdiSiHvS2JHYup7jGkAfEPb36NHznY0QVZLObsaXpG6w06xWEnvYV2NNhmNbl2nuXRdRVbeuDXrwK6MsBUSjx5ppzePzFoCuXQ0srC6/gw0Sw6NNWlk+wjux6mtsEaNIK1pIR7ecHz4zsOyROOLb43YLCPnygmmKSm6IU349QZPHx4R5yJ5z7vY4rPJKX+7rf/jDuItf50l9N3BgcmzJUEy6xXxGMKh5Srl8Izcq0bmkHj/z7U7E8SyzGoGH2IFl6RjaIfhmZyM5uxH11s5SOQJyRvcv71LiX9UQoIazl9pxAaKqkUpu1Hm8E8Z7gxtYmhN/AcYRwfx5S6Vxi0kf2zlFN7bfHCuuah7NGkUW6aJYbroDouqTSiqDy0ziCtFU6SOu8yXDK2DYaiEydiPTZNiWqYeJbDIO85xxpxFi5NPeF8lA77TBTu5+0XL8EuhO6DGMxwpbH9W05VF9ysJGJnrHhbHBn6FEWiSHM1YwwzhqxhPhdWRq+U5MXfiFE5SJjy5cU1lr9k0go0ifaZ1BHH09jMAhZXYsNulgsUJ6HtDcxRyqjoA053vjHNSkVPD7hSCT5LU8qmw6T+5FYr9kDWjJgnlaoRn9nWiqHR2e//zCRrpCZV5VD0JD9smVzx2W/VBRMfCNYhugQoPJ8STk8lvlLgyiSzk6Uo2kigt1z7YgI263PE2mh1qP1EKMdueXuL1zXUTUYpOR1njATujFoLaGR9plkomFODGzro0vLUKhM3srA8hUx6Vfpwoh0VLpYWhqS/0yebJD7hWAXKIN7/bQ6HKkbrNHaSjFezz/ki79MjWt8QtCU3rqSvWi55M/Nod3e00rO6vVyjnAbUriC8kFyCjzvehAGDrZG+F15mlz4SFxn5VGOfxIVnzpZ0dU68jzmWYsyUfMBUfHTdxdIlErTz2bUq+TQw2OeyWgBFAppjMZkdspySi0DDNlWCjUcnw0NuGECj8ayV7KSHM7gW/gAeJpLIAvVCpYkUeq+k0cVcnIYJwy9Q6aAVa/I5/4nFxkfVFJ4GER6yO7jA4WQon2o2/13rPqqelwy6yX1yTyop4hSl4TkzObUjeSNJlY2JxdVLhumR9bX0GI0NdVEyW89QI/HZ1E6UyoQVOGQ/Cet9Mi5RlIH6kOHLQ7BtOwzthG/7TJUwGKahwO31T3yVP28nuT6MXMdUVF5uXuD64lxYhi1ObuLqE1krSeXHhm1xYuH27CWcfXoVUMYVlZJgeOJcCBcOrq7Spy21fFd3foEX2VijR6qIi3YReYTLFR+KiePpY6hSo9FGwujc4Oy7mncP4r1uv1nwT3/3ijZOKI4iNPv+WEG1p+ttEfMDjqeKX69D1MDGXorLbb4S/MG3kfWpvGAyBfDmx6cMwxBe3+bVa6pJoxpL5pGUsNIc+vgOyzBJe0nAb4Y49uKsvzPDQJ3EXnx8fOT38YH51RJtFBd51k9EF2s+xAU/pmJxb9ZfkZUnDNVjuRDAPSU90KQ5wWZG64nfW/pzkspkals+lthu83d4ZkTfl/xtL2s724E3t0tGTWEpL1pnrn866//d+FYj26cnEqll2mQF5cmgRaWRPKb9Tsd9EaEOLYUm5a+2KXqS4/ojj1ILOTpsGLuGw7ZBk7XXbQeuZjF/saaTPNWPb7+nLVN03SCQHMo6I0O9pciPDBJ1P7afJ9j/2L4AY760L+1L+9K+tP+07Rc9QVsr0aUXZBUa1tQRLhwmKfHxbn/H2tdRvZFQF7eusSwZHY1NMOPrS5G/2aYn8oNOmdxRd5LXkhWp12O3Fgv5PdcFo4Pan5gvxe8tNx73xYmhSVAm8Vn2uOfD9+dyNI494K4CjB+Fxdf1exTDwlJ1ektYQZbZ0bU5D4d3uI6w7lRvQm87vGVAk0lmkVxFj6DVGl6FwsXfXIRoU8fL9YyjZKrfnwpUTUFxPJRKeEKGrpNUOwJNw5bPmE3nQ/23u2euFhHzXITHLt0Br87I4o6Pjlhllfh+QFfuyFrhfUzodFrIIUkIKlmL2Sf8yTRRUBl/lHWc2iPz6JJTHpDIUEOT1ihaxjhOjJmwKtvjgaJW0EYfVRYKK+25ffT77//MbdDz8irk8utvAVjMVmjJlla1iRsx7uNyxWI50W0fcU1Jirt5ib4IKYqOnx5FOcT1BSyNOclTQecLL0r3fMbtjqchppWlBEY1Yk8aQWhzffUr8W6LBcmTSoVNo3yeO1SZfLTeJfRr7veCrNqf/4pItenUhi4QYc4hK/DCkKvNgmQrhZtTFUPr0THRJTP+zmugKnhqa2pXjGdNTF+3qHpMKyHzi4s5LxYelaLiyaL1okk4KgterK5xrHNQV1HIHPj9nwkv/gs3kY3ai7losTk9P5EcWw6NLDRfr7jtM9TNjEkyCdku9JaF5UXoH8WRxwHFtjntTxhy/8xNm3xQ8TRQZX2mrfXMvvqKddeQHkTYzOlyivjAbDof3/2jsOS9ISFXL2lNuLGkNJdusFpuGJoCU77rNn3EtBrUwcA1xLqreg1mI1maYEmwnWZqlH2F79n4L8XauZhdYE0j00kRNcPAcKqYlAkHA0sqtbSTSWTdgn9OqP7Duz9xcytCvz/9lPFi1fH800/c/VWA8jyroVEVJk2nLkXOOs56ph+2mOYTx1rUu4bXlyimy2EaGA0xnhMZB22gZSSVtZhe4uJez+A5Y5Bh6MfDA9+/f0JzV4SScGRrJ4zd+dkwd2b8tPvI4dkz6B2H2iHwZEg7n/BtjdKxPwGDUtPG9F6gODP0Rp5FV68p8i2O5uOb0tWaHLZ1RmUpmAvJa7qvUC2XmepxIVNC6mhwuVqRnCpsOY9pvcf6zLXxfEw4xhnDk1S6yTTmhkmjjsRS/UYfWtqmxnYn+lxEpoYx4xjv0EyV1hJrsSpqVL2hKhSKROaKNRXt0qNsJyYJ5jINn7RL2ZjGJ1xJdnzGM0oCS8eTecLFL9fK//IlGHoqXiSZDboTtjfhYTBOIs6vair50GNrDZ1Ed6msqM2Wixc3zK+lLFHlE5wG2ncBtzKM5noKbfaMt7QJpIq8bvY4dY0TtFSS7HbXBJS6QVb1KDIUMhCzK89ZLDzHJXA6FJkPCTy4vL6iSPbYUptuHioMfcXcc8gUEbq4WN+iOQNGsQRZTzipP6FcLhiOBahiDE75E//wzT/SKym2rPu7WsxZziasoSKt5KWS1hy3b/E8j2gmFo/6mWR9pbhofsRJKgj86x8P3FoOo1JTa2Kcmn3Bj/VfUU8Gg2SVd5YNTVnQjRO6K2vOGqgec2xb5aSI3ytOCWlZMuw3dB9RmlVK1vS4FGylWnRx0sk9h65MaDu56GTR+M9b3HWEusrQaygykXF9cUEzi4i3M4q3fwBAi1XMWUihFyDzM/ObBURrLFWhUETIUelTPN1EtzuyQsQc1Sxj1B1szcCXjBy6oYNroUcbVBnqcowZnZ1xSiBYRGd9Fb/fc7Feke2OZM5H6acDeCtMa8K0JXqsGmiticvFHF2VaF41J40z3if3uDLn5jpLxrZnnFp8T5Kedw2TqZActkSXInTj3C6YQp2pzKnlpTWZCoqqYqom7WekaJpWMnd0DeGQM9obFp1YA7Wps5gplG2HJ6W+urYk3TUMk85OhqeKhYuzmlEcU6ZWPEMPA4xGwx8V5pINx1B0QrVH0TQaqeNo6zaRCrqqMv+oNq/oMMYM3WeIKSzxnSC4xJjrZM2Eboq++Y5FYWn03UAui8xPfY/tbPBcl+Uo1mwauqj+gi4+cpBUZ/NQx4xgrDKMXvR36DM0a0atVhi6MJYKpaNteybbxqrFcxP3krbbY3AOQjuoLZtAjGepK7z9sOd0zHmQKYZAd3jeHgnUgeBCXL7eqws61eKpStlvpfTRXw8ElwaPY0U7yHX8cOQv2x/46f6ZSRcGhN8vYW+RHRJ8WaOq6iuilU3eargbifzsOpLDOUVhtLhmeBZjMgQmbW0Sp0d2ssh+7Bwc38RuRmIpJfWKGyZfg7ijqsW6828u8ac5D9mO/iTC8KbZ8pD01EaJLlHZU2+yrVo8vUQbxZ7VHY0iq1EDC1WeRwoOSX+eiqqSHrebyKXmq+u6XC9WFA5YH5G/6oiuiZxq0ch91nbkVUdRl2iy6N+357hWx64suZPrxzRVKiekzXtaWT95ffmGS9VkShsUqTM6FAWBbqFpJbZ0VIbPGBk/b7/416rZkknG/7t3W5R6wpuHnyRjUvXE8VQSLkPUS4mKSnbosznBrOepFpdMUxQY7iXhTMWfSfUFx2aX9+AoNJK1olNGJn0iHiE9iQW2MEQyfZwSNCmfVCYNmnEOg55du7QfRqyZOKBul1fMvYiTV1DLQ7ubesr4PRtXR7Ukd6he8eb1FWQdp71Y7O8OMf02ZsACyVSzyxrS3uWHP35PK4s4B2NAnyq8UOP9UXpqfYd9c4nR9NzIfI3jnjOZx6XN067gJEsVhqcDe2XF7PUKVZX9HVvaUghUNpnI6WzGBacxZxZMlFfiALBVi/jdA8rdhCLfvz6qdLOGx+YOpIdz95igKgXWoFBICZ5tovO43xI4X6PL+HlzcQ6MKXSPvDZ4X3fcN5JzcIpQeoVu8DElgUAVP3OfnWiOFbXkTJqUFqtJyW2PUaL0queKIn5maSx4PRMHRavPeIiPlKcHfHmY2dcRuuIw1BpxJT3arqfrLOgamv483wpwfypoFYXQmj7JJmVpjme72J2CqopDdn17g2b7mNjMbsX7P2aPeEqLvlkxST7Epu2ZzXU8x8OTl6qv2PjuRP3dhuUnZYCWRhvoxgFHsoW0yoQyUxlcldE4XwvXvvisd3zswMKyHE6GeMb+8ZnQ6LmY+3hrma8qDuiDzqQ2GNJw6Z5bDE2ltVK8j2CAvuKQx4S1iRdKhGwz4HoGhaN/Asv0QUex32ExspGXWdMpDIeOrjn3BKdSnAGF43JfqrRZzelSjPHrwaTv52A6JDPhfRwOM5qh4lfRnF6Kbdd6wGqukrYmpRRq7U85M9elMQwqGYzQe4W2OPL4eE+VSnYcL6DSapLe5JBLVRt9QTpAGp/ngCbVpJHjlPQpd88dg8YnJqmH5A76jGxq0KTyxfrmkvnFGvWDiiqjDafuiFbrqNsTP+x/AiAMB5IkAaWFTFwQ93d7Puy+x7FVXhpSJixwMO2QrOh4J3lrH+ME0ziPuhjktKoE2lU1GzNg6BM+pOIzRUtoshmu71JtP3quNZ7uo1geilQ50Zucqahx1IJkL3VWs45dkfNy6XKSHplqTgTrBdZko0lHpT1t0YKJuR/x6o0As+l1RZ2fE2ksg5C6gIdJGAHTpKL7HheLBbYqLsEUldYwaI9HpDITkznQWwpUJr0mxl3pHBTFp41rhkx88aRqKLrKNKSfqAOrLMZWwRwtskq8rzrq2KaFpkEjlS+az2i5/rz94iX45399z3EnJqvtHBzLpFcU3I+xOt+gUzX62zm+DGcUQ4bq9GRdhyelW+rpQGk8cNfl6LImLtA1er/nfmx5OAgEqjcuWF/MKNsaVcJ9nh4mVNODuoBRkgcbGtNnqJFmqxF/VuHKMF9tp/SmTbdrMeSl4uoK2hgwOj1jIfqnhSpNVaNWDrHU9jOaiPennqgd8KVlbFg33CdHDmWFYQpvuMlqFreXlOWIOokFVRkdkaaidQq6rMNxP5NM1gyDwoJ+EobBnIm/VDk3sU7oi3Hq1YEk6SizjlaGuA7bBxrLQT+emMuL1w1Ar1r22SN2LOvBhp7+3uKhi1E6GS4YO+hqJqXBPYh57E2DtlQ4tAm5IolyD+esEN9+9Q2h0vBqOce6Ft/btg1TpfJud8f+JA68yFVIDzlqUYiQF7DyZ8wWS4okwW0lLNtXOWQ16ZSBLWt/FJfMaOlsm8GRqEfDp+tq8mTiYS/WY23BsTTJC2i0z3OH/uVv91zcrGibEk0abjerObphcHnx4hNyNctGhmlinEYUXfTXdCa2eU84G4RiKGAtHOo4Zu4FaBK+jwedoRA4EZYMfT+m77AMUMeCcCnWWJoNjJ1Olhb89fu3Z321HQkiQyNPalQSqnyQ82ihazpRYBDKco2Fe43pQNkM1IUj10qG561p84pe3luWqTHvbLq2oq1lyUkESpoxVAW7g1jHM0WhSk4ctJRgI7l8h5Je67iYR8C/15DrZPlGYy8ZVYPH+j3pk/iOZn+F4xSYbUclwTJFpdI2Gj88FOiO9FJNnSF7omOklwjppDiRJx1LQ0GV/MDvjgllqZDFLZMq5sybKtrY5GFsSaUnNB5GfmwGdP18PcxmNqP0cNI8Ibziks8kAAAgAElEQVQ1mSoNLZBRqGZgKhvKHrxB7HdHTxnjkBcrC13WzvltS0hOH5z4WkoTdb7LFNl8++2G6knsAa1OKawlq8sLDPl7vaFj6A6e0hBO4n+/Gl8xpTH/kUK7N0IGWb7BUNOUNek+wZIHe2V66LbPqA24l2KNfXURkscDw1DQSQV6vSqJ24khUGjmYlEYlkZkTJyUhKoQ+/zF6grPdCkOOxRZiuZdOcyCEM0u0VxZckONp5+H8zXDZtQHbF8YWmlVMYwaw2QwSLkmw1DoBgXHiRhTsY6bcYSmoVYDbEsK/PYr7o8px1QD6WwYmo2hzYjmJpk0hI77mtUsYLHwOGaylGJS0HWXri8ZZSjV8L2z/v68fQHGfGlf2pf2pX1p/2nbLxNo9xqqJVz5i2CAYSTvEwqpSG5fGWxY0ZoavSk+GxoDJTDJtCOuBNCUesXjMaMyKl5Jy7gq9rRNTfa4J5MEsjcXBb91bVTP4nkrFc7VlDarCCeXQHLAGapL9/h81t+iecBk4vJG9LkZB6zQxShrTBnO2HgB4yZCc3xmMpnqr2B3f6QuMvaZVEdwIJoFXC0djrFMRgcujRtyvbRpDiIEkZmdoJHURubSmrW1Ds93mKoOpZN5A+Pcs1JmAXgB2iistj5T2BcH2oPCWiaTo7lBqffkAwyy2PUhaxgHkyCvePssbMil3mM7Goc8w5bwfWPyiYwKGu1T7nCMeo77GrUrea4V+YxvUVwYjQWtDHNVyXkB78s3VwxxR3MVsJWMJNZTxYGMQ5FQS3kdI9xgaoBhosgw5Na1GU2dYweltNwbw2VXWrwbei6kAkM/dGiOB5pN5kilgrSkrya0qCCSntpxMnBXN7zTK1zj85bePuuwk4mx1llKxRDF1lndXnO1uiYpZBF89cD2uENVBixJnry+DNBdAzyLXpZqrG4CnvsT6emRQkpdzcOQutCovZpKfq/RbVR9Qp0P+JlYY15k4BsRkzpyfDwvkZhrYpzyVkPXXfSxZwplMXaucpp0KqtnL7k+o0nD0AOUsmEtSZBN/xZmNruuof1YTmOucdUeTVVQDfFc99gzNSVlk+PvJE9oqKFkCVW755CL2lZHTTD7Ht05t/x1W0QCpsmn8SxQNmwrsSf1oiEYBvzVHF2uWSVvaIyI56HCkLlOx+xot+AYJcFGMB/txi11cmRtqDiSfB7HIYg0DMXl+Ums9/umopsq8EOeRxEe8y0NL1+wb87DXzNXozfF+89mC1zHIitBM8WajRyT48JmVVsslsLru1iuGXWLi6sN10vRvyktGGnpCo9WkpnnCly6Joo50fQy1J+BQUOcHD+pYUyGR6fOMQ2VCxn+1yyTzj0H8izWGy6uxB774/MjlAndmOHIsrO68yh1Da+bcCXp/zBq1FPFOHS0MqStehpq22JHEVYgFYGSCnV5Q5+dSCRXsmPaKGaBpg8oUvnkdu5iGjp9NbHNhHe9NhyCzwCPTnEBU48fSFECxSA0B54e33PsZOQwcMhNDdcPaCRjTrkvcIyIl5s1pi/ZyXK4f/tI2zefZKIMRSdgwrcMRk2WTs0cIlVlKCuak7h/1EYhqTM0WjRZe/v/sfcmv5Yua3rXL76+Xf3usz3NvXVvNZSMDEhgiX+BGbIsDxh4wBAxsMwAIQ8QYgAjBEKW+QuAIWLACCRk7HJZLte95957TuY5mbm71X99G8EgYqfr1EofBoygMoa7WSu+iPjeeJvnfZ7Y/zRw7mn85CW4ev4V7kYb+111C5R0RcvlyuSlZzOGoKfqdhwz/QI0ModhRuyGHIRp2PQzrLolUhLHXKqugM3bt3iB4vWNnqwlH3nYCabygtiAFjrpMDTgr1wswyCyzh55PTmtq4SRR3IRkrqGUNf2GPeS668XdKaXyE56pqsQaxl/ZCnpuiW+V7HblwgDYHFcOH/ucx4sGQb94vXHLcQB5ZAxMxqAcWrhpIqmK2m3+iVLliU+inQaMzW1o9A7NSShFdMqQWwUM7YV+H5A6/QcDFl2th+xvZCyzrCMztl+WzL0GV2woDPovoNb88ye8JBDbFQVgq7lzj4wjJKZudN6z0Z0EUXVIYzxHLKWfTclSAt83xCXfwLNWhaCKmqZ9B7B2sg6tUeK3Q+U2QFhiILDw5pqsOn2R+xQF+ibKmBWzCl3GUWj12QyjTmuEoZ9za8fn9JtPh0esrujM4ojaTuQuyFLsaTf6edVM5f1usSLXCYXz07mCtA0FqNSNKOFZdQHkmlMEC5o65LWkDaLccS1bCzbQhlGkpnnMAiH1g1xHNN4PvZ0ysMVEs8Yiqr3CIKAsLORZh+tMKBlICJmfqn/rtwoxDhSjRZFnp3Mtaq089XRoB4H1PlzYkMj05Y9gfDpCpiZ3kHv2ZLYhmgaYBuwTHDuQdki6iM7w1Iyc3oie8rQZbj9kx7nDmfpMnN78tCUGPqWnlus/QcMFoFQHLlSii45BUK0xrlRyuehqpi0HSrUKe132wOTsMXft0yf6++sRcfDvqU57DlKg9QW0GMjnQ3nBrhV1w5q7Nnc94RzwzRyLHFLByFhbep9PRXp3CcWDvHwlG6coc59RHMKNBntAt806fdjTb7TgJv8KYXve9y8OMfd5SwS/f9BMNJ4irntsTRk+4Nn8/a73zLxBRj04dxRjMNI2yjOrzRwa5sK2nVBOBkQppyytmBQHf1RoBpjK6IZrntKqP7tdzuqnT4TYz1ihZL0+ozYkFH7wQIqm871qAwq+d1mA6GDSlOUwTINFoQXAUIoKpMj9xMbJQTnFy+ItoYcwpOs5j6Z65Ibpfq86Zn0HrZnUW+0rcyCAGt+iseouwPlKFHGwR16xeN+y27fMprtqLKCbuIy9Xx6g/modgcia2QsI2JzMQ79gaTIGIXEMw7EWO+YOCnymHP+pK7S1/RlQyBtXp0brMBxxzwKWa1SXlwY5/hTshd/YfzkJXjuN8yNvIVdOAw9+DMfZQQ7g6AnF4plYn/0DGdWihV7CKshNWwMHgF+dMFjnLMxPIxeHPDi3/iSoLU4Nx7V7fEdgxxJ5jbHWh8wUWREY4NljwzGGM0jm57Tg7OcTpi6IeoJKeT2bFzBRPkcz/RBPHRb8t7h3JMcMmPItz+QTCPs2Ma39ffKak0iR5TXEhodItUeyUaFL3wCcxg9zyceBsr8gDBopBdehB2NTNIpl4n+3+YTMP5StfgDKCOHFE5DcGyE2xEZFFx1aBE2hEFCZuiVqv6BpD5noMA2a+eMM/atQ5TMWAZP2mclu21Ncn5Ja2D+5Q5enC9ILi7Z14b6zbE5r1LUbE5vaM6yh1P5EakErpSIdmTna6diKPdsmz2VyrFv9YtynET4hNxvH1mbiH1IV7y+UUjRMzNrnDc10h4YF4Jur/ezt0eyrKU5VhhbST6dYgkbSw00RpzYcfe4qUUyu6J3Ps0Yc39YM72f0LuCVui9uWwC7h4qwqDCPjy1OfRYtiJ2HLzY7L9q6XqLQzVQGHSZ3DYMUhHNzwhMS1DbNSTpir4Y6I3HGwgXqWDoejIDNGqqmsd2pC5q2v40KxB6BvUnAHvA28FoWFQSTyLanv3eYjQgoKbdEK9SFskFe4OUXmcjrlI4AuxBnxW1H4inO6qxovmhMHPJiduUqtqjGuPg+T6JymHm4hhOTPIWNXdp7VPPfwjMpSV2WLi0QkKnPytgoCw7anvHfmvqi6FHXmz49v7NRyetdyzCsKerQgrTInI99ZkFU/Kg4uFe77VvWZRtRy8ltiGRGByXvoeyqelsIzSrBpSMCaLTKs/y5oKuMPXkocNxbIpjTWgZbbpQC83O0isujZ5e6PjMvBnRcsoYGedDOrz64gUvopj3O93qowYbRzi0jiIxkZr4kBCEb8mzmqMh9nCBqXB4kJLSXNxOU7IrT7Mu2yJjZy43fxoStT2v/AnKMGmthM33hwrVPpAZkgbblkzcFe7hQGfqlf4QEy3myEYyGm5bkVoksU1R7bFdQ5uXwGgrrp9P8QxitOsb7EOD53pEhu7W8ibI4ZSBZWwPlNuKoTHtEAT0hxKnBt/QPXZSMmwHNrKhq0zdtumwbQl7h86oU1iqJ2RPGsSYxA/d0NIet2wfd6TGeS/rirGvsYOAKDAtIW5G6A74I7S1CXy80/P7F8dPXoK7+u6jQrUbNQxZS+t7pEIv8KFsuNs/cHkTE1/pg+glHjdnK0Z7T2n6xo6qxusDkuWUrVGjXe86LhZTnl0/4/13/wKAfdlwGdjc2QOWQTc11gjznnq3o4tN/9vWoW5P1ZiniwUvflYgGqORNTqks5hOelRH7VX5z18zcXw8Sq6NPp/1XNJ2W5KuxjIw8jq2GBqbOHWZ2vrwyDCG2GYWzQkMcKfuc+wg4tWZg2+8dEc12KrlauogDW1bvztFrEl7Qt3suTdRiuOM2O2R1JZIQ1ZY4KDKCtsPGAzlXMKC6PkKV3gIc1MMToNtDdh9izBo1r6oIQooOw/HUA1Focu271CjpDctCCJPaCJwrYSF0hdjl5w6Gd7Mps8t3vUbPMP/OFZ3ZNU9+01Gb4xg3OwRQUpTFhTmpY0C2PQVxe17tualsEOHfVfwyh+phM4QHMeBrrPIup7AgC+EFTEMI8oeOOy1557YI5N4hkOD+sSlAvDP/89fsXlRMj+fExtP/rivicK3zKOIyPQ+NWNNnZV4cxfXUMlNZ3PCeEIuapynNK/dI0VHvr6lM3yyu7phfbfDGTtzg8HoSQYXwmJEGsTb2CvGciCrGz6iVv7i2p7p9W43R9pGMdofEMZZmNkDnhUgUsVO6fmltiJyLJRaf2R92Y4liIaACekTajhoOY8C7FWKMJd5WfogO6qDw9jpdV+dTXCGA+PYsMtM9LpVPFu5dOIT7ExP9Hpdzr4qaayRHoOO7jaEroXdKSxzGQfzGUW9JwpmJIn+/N5usfIpnl2gMD/rWo51jWJgkxvpn8zCG2vcOMQyEBKhJmTbDH/a45i52HFMPHPIPuH4f3nxNdlMz2+ShFT9kcHLMXcFfRvilzWOk7Ix7D1zLyGSDevbR/KjvqQTFeDakh+qCrs0Kec0ZWDk8LCnMvJXRdfQVIK2U2TmXWkDD+kKptInMlmDDsHD/tSJGy1BYbiIw+WcZFwhvAY56vM0jAJrsMlKuDTsQGHSs5q8ZnUeUDemzcWLmaUe2HDsDIJybLiYTtnXDZ0R9A79GFdYpG6MY3p7lQ32WY/sjwzGVtgqZsLp+f3yWYrbN2xN+4JlQSkV4SxEGgfixnZp5EDvKtRKZw3uthustiVMMgJjezzPI1pM8SOP/mhoIeMUJ+gYQphM9Tk+m68Y6xxHSiwjrbwIHOrmiGQgip8i30+3UD2Nz8CYz+Pz+Dw+j8/jr+wQ6hNsEB9/Kf4VVByfx+fxeXwen8fn8f+RoZQ6LRSb8TkS/Dw+j8/j8/g8/sqOz5fg5/F5fB6fx+fxV3b8JDDm3/3b/yWNQdj0fcumLPFUTyB04dSLJaEnQEieSufWKIl8j8bxYDRErI6PEg6LaMIQGBYMeqS0cQaBHE07hJczHDpsC1rT7S/DgcD16YXNU3b24uyGWM35H/6Lv/Wj+f7qH7V0VUNhZEo2H/YUyqJXHbbhE1V5R1E/kB0OtIbTrh9qPDfB8yfEqfYLzqYT8qzDn07oDZjnfn2PQDH6I0+KcMd2xBIJo/qXoqoXic209xGBzy9+7w8AuPriipd/OPvRfP/+f/g3mSxcujv9rL/dVczCGO+ZxXinC8KJTFgsfB7UhNHIPE3PL3G8lrLs8Y1cCPGe+2PDsPkW4fwCgOerlsp3yTuLuRGLzT4cUKT4i3MmE0O+bQ/UZUt13+AOmnmhXUb8/f/8v//RfP/Bf/ULvvr6NY0KODwYVJnrYmNRKof9qIvs1+GX4AysuwzH4KPHtqMaOhgqLi80GEMWG74/tFzOFgiD0iuckTqrcToX17CjyE5ycW1j+zH0eh+rY0kzrrl/88Bt/jsA/tt/8KPp8r/9r/8z231H5T8gjMDzuMupdxm3jy2urYvz68OOtq0ZJjZeob9TdWB1PnfNns3GgLAqi8RxcBcRidDPNYkiLH+k3kkio1L+1U3MWBQ4dgCGLcOOHMLFJeHMpUav09/5W//Bx7n+O3/jPwUgpcZdJAROwqNhZvqj859x8H2q7J+RNfoMTQ7QxC2HpqEcNONSXXQ8e/6a0J/hGbDMtPJoJwOeXfDdn+u9PfvynMASVL2NZRg5Esdiuko4lBXlo/5fL3Qp8zusIOV/+od/90dr+9/9w/9Dn5OiYrO9p+sG/NgAKjoL13cY+gzf6HjWY4uwJM0Ay6kRfe5rBtFT52DPDIdlFWBbLg17wsagnIXADwXKinAMHZxtSYTskYODNDJpZV8T2RPi1YL/+O/+ez+a77//H/0n7IwQMrbCcRW+63HYGWmmmcNydU1kxcxMD6gfK+rdkSSZEhri7qyT+LLG96A2avO2NaORI6ln0xkk6OPDgR4Bsv0IjgujkLZt2ZcV20LbKDddUDUH/pf/5r/+0Xz/3t/75/z2zzVN4nbcEQcDSZDy9qiFA4rDI4dyT9T6bAxI0B87wlmD03pg2pBm84jZ6hzbGTiY3l83SvGjMxw/pG+1bdtu99xnRxZ+ihVqIEnkRQxWx3xxRmw0BK+vrvjjP/xr/J2/+eP46X/83/8z6v3A4aiBa0EyxSo6Qm9kOOj1XK2eE04cOvuc0VAnjllL6yfEVsxgNEp3xzsiN8KRc+KFIUzvf+B+C6MqGY1Autu7GtXKiGj02StDi22xo84faQzq3mt+zHb0l8fnSPDz+Dw+j8/j8/grO34yEhz6ktSoTI/DQOT5NE1H+KQqbUsCJXFdSeOYvqFhzyw8o7Orj1x9vcwZB5ex7RBo2HM4Qmt57I7VRz68jpa+UQyWQ11pT2Hiz0lSByltGoOEF5ZgW5/21nz/w6+QEvLc9GZ5IWU9sLlff4wiu25P02YEyqatniKNhloopmcQDToiuS0UbV+zdAWZUQd/qPaIXuG5Lg+GCcZlIAgbCjekP2qPTB4UuSVIZiG//aA9mc0nVC/urSPW8Rrn6jUA1vgdkfxAWP6SX0/083uPG0Z1ycXlDd9/p3v37t9+z9kXIaFyCGLTw6YUPGz5x99sCJ/9YwDeseDL6Stu/AUrw+H5aHf8usj54qxnJV7p5/qhY1ZPKScjd290dGwfP6HG7JxT1ufUwidzjdpEG7DyYopSURgVjaPvE8hrklRyKHXE1Hp70lHSdzW3BhKuvK9oIou3+ZHNvSZl8OMJQezyxYsv8TvTQC4C3PmC+jggfB31qCghOdi4YUn6UfHixyxCpWXx/f6Bpm6JR/1ZbeLhOhOceE9pWFW+u/tA2+TMqwWDoz+rvn9g4s5pLAvH8CZGMmR2OUNYCc9NE7xlCd7nFUHwyNSw8ojpnJUXEsqMW3Pe2zbGtbeoIWTxiddu80HziTbRgsTvuav3tKaW/75/pPVL1o813pmO6Pt5zsP9Gu9o05vIJX94y/t+4Mx3ySZ6/y4FNHWNsCJ+3WsmmP7PtnSL1zjtLaGnyRGy1Ob/+rAm8hvEUUdqoXPH+zzDC05Fam2jrJK4JQ99jx90eKbx3rLBHyXV2OEkOtJYKsExq5niIA3J8iwN8JMz2vOeRum9aP2Rzuqw9xnNU3uNGzObLbBtiXL1s3q+Ty8VWXGgN60KoxSMbseQnzLGLK5DwtmTOnpPnLgEOLy+1Ht2fTZHhBGhsJmY9eyKHT8cNgjPJTCcpUJt8B1BYCkmhv9CORYSCK2M3KgoeBcWljtlf1izvNSiz64Xs1MV02xCutdRpHIjtp9QkWize+ZPNkAKkmTCIGuuDTNXFQqC9y3xlYv7oNf9eHyPs/cQlkV8pu1dbGdMZjab/D1C5eYZFsw8Qd0PKN+wDU0bfj6PyKsR4RoBbjEwPfdIfEHT6Qh0GAO+L9+fngfpcrjPccKn1iobGc0ZZML0Rq974M3Z9oLj4z2JaRNy3IDZ0kIFFkFrMgkqwlZLIuuMZK7XZn0LUbshVw6iWJs1UNiFjXtxxmBaUxxrZOKc65adUtvjUfx0i8RPXoIzt8EP9EWmOoXnhNzLPRaGGcR32ZclKy9kNP0mrSxorYggAOeJAcCa4o+CYSzpzIvdq56hUth2ydg/NdVLHuqcubciSDQjxWQWEVoObV/TldpA72qBZ58e9MftA/e3e3KjZOw6cypcumOHNdeHp2skvbDpB5fRNCgH6Tmp4+A7MTtz08oyw448ynxgP+rvFYPkWDe4Qct0opcuFPDu8cDYb3THKeCKFjlK+nWNcPTzOuMpq0m2bukmikVoDph/5JgEhG7P2fdmPSeXtNXAd/c/cGfd6ef/riWuQqrhgZVJae5LnzH7QN5UvHmrDWr8T1zKv37gcPOK3xt1CrJ3Y85TSX+fUrzURsbqHtjnJZ0cCYVJBYWn6ztESx4qizZU2Lbuu1Oey5pLrLghnug9G72Y0Q+YOCuawKjIS0FpjzRKcbvTL14SBRRNSf2+4M4c2F+GEZZ/hut7LK90Wtf1I3Z1y/buEXJ9pmLp4EYL5tMSVT8lp398CdpxjLRmCFVSmQbtlRMxf3bFh9/+OY+F1pKLIpckT8jXR2qlz0SX2VjiW9xxBq4hGu8D0i5mDD38RlvAUub0ty19X3GeGVq/raBRDgUlj61png4d1HHKbjgyDSYna/vVXF883o3g3Kp4uLRp7vTepsEjTglNr3AzfT4nkeJubMFKmM5Nn6ntMAsEsy/O8A2tX7ntqScFi2Dgi9gw0AgJVssYupwZ+5A6c4JxTf5DRmfrPduoW5ZyQbm+O5nvk7qMyx5PPhLYLSjtQHRS0tMgHEVhGqsVNVKAF434vqERSzyGoaQZ4UkIpLdaJD1VA8LR81jNEoKpAGlTFU9OeY/lKkLbYm+bEktZoAIf5Z6e3cP2AWX29urFJYvIpaoa8lxf0lWhST8mIqIybDteUpPEgtkEvNQQKzQ9qRvgWA3SpLqdNufQK+4P93iGrDlJloy20BbWMMaU3cAk9lm9vsBy9Po9HHKKTzTLHx5+xcgTpVtEZLscbAffkHG3wuJ84eM4PtlEr0m/2WJ1kstXVyxf6421+5rY2iDbR5xn+n83x5Jd9qccyx6B3jM38rFGH685YJnvmM7PScaYhffA2kh9tYNN9t2ptJYXJEhaMKnuZPEMSx6Ie4njaCdg2jXI8YHN7i3SpFerSjGLLkkXPpFplk/kl3iVRzMcabfGsd4W2HVJQs7eOBpSdOw8h2vL4mHQdmvcSi6vfebpL9nv/wSA1A34qfGTl6AtB0KTMO0syWQBdjRlHJ4uj4SoDxhqievpizHOW5RooAIl9eEMnRme51ErQWoENbPOoZclrvTxE/2yeyLhmQgJYw9lIrfYFwx9RT22WOaCquUjXfKJSAWYBz2deaO21Y5yK4kvPGJjZILlBWWRM9QZw1pfWkHoMYwWu7BhMHMex5iJ59F5Hc4TW8SZTdBVzGzB1blemDJXhMmO7qFFOfrlm69mWF1NvisJdnpdZHTKdfruvuXn6gEVPdU5VqwcFyt0sZaauaX/VYMTNtRT6M1HZOpIVm+wVEt1X5jnPmcUZ0yfN6hHfUg2cYl8k+PPHpGuXpPHO4tmbEjDFfFUy8jE8ZysrZjcPtCa2kfVnnYcv38bImYdTb3Dn+oIQjoLgqmNI8Hp9P96oUcnYh6DgN6w/EzUAj9Iuc9SlOFnPaqebVnTOR7eRLN0cD5n5jrkRUdrdBaF7aPCmqJ38c15/vaHmqQb8WY+QXL+ybNAPsGNN9RrlzDVa3J0B6p9zv1+z+47bdzlWDMMR+TgsLrQUU+3GLDe91RtjmGmY+z3fH/Xooo9w2v9d0V9x0NRMp98zRb9h/3DBryW+6pGGfHUm+kZbdmihpHOOWWwsM4MH2+r6OYBbj/wbK4dp2TqEIRL9pcVe0evsVv3vIhd3t0eCYx2oJIR9mTGK8vjzuhY2tNzWiSPZUdwbQgo+hnLbEQoiwvDrmI1PUPY4V4tGV1d11l0K6qtyzT2+Rd/ab6+OeuRiFGLiCqvkabWaSsXJ3EQToA66O/c1ZLIDxHuwNFwD48qR3gRo5QUo16T2B1wmOH6isg00E8nE6LARzqK3lwooi0YpcANPKZGrebY9MSBjxd8gpiiKMEQcKTBObQDfjvQGfqyTHZMjj4bUWIb+yYaj0W8xB471JMMU5FBcSCwBIGl/+6+V9QtSNky9/XlEycO9ehwNl0xn2kHdF3k5E1DavfY5n3sij3NcEqj5zoVZ2YPA9dh8FuWVUlvHPzFzCH62SXZu4ZZa7Itbox/0TIJfZTSn29Jh22zxRMDSaEdso3asd025BKenT+RJUwRcmBsL7heGEkjb4JsCoRf8+LJgfJaRHkqaF4VFrUlcUzUZXcLgihBjC3fv9WR27f2O2bSYjVa5KNhkbFBBBaBE7C/0+tpuR3rscAaGrI/fWu+tyfPepqmojE2WomOKoR/tr+la590Bxd4tY0VFIyGXWiMflpF4icvQaEONIaM1rUChqNkNg+wDQxmsAYIE2oxIjsj0xElzB1F30t6Q40zCIFl+5Ak2L3hVxRrXDtkU9/TGK6/2cQFBmQrwDLhsjUyqg6/b+gNXY4sO2R1Kky6e/9bnNBn4mtP+7EtEHEPbkpj+iEle7ayZZcdaHt9+HZbi4vzCOk6tCZyE9UMb9ITeS5y1AXqJrOYXKb0tw+83RijFc9woyl1MjAJ9OFJ7TnYHsHcZTBE08fqlIbM9q6p+4Cs1YZoOSzZrTtm5ZHeRC6WfeC36pLAsfn6tUlTdR4P+YFvjm8JO72F02jKNFqSzjtmll7jPxaK+fULrmdTMCrtUthsxh9Yb3pebwxHoO+xWb+jHDOmrV673f3tyXxnkyukI+gDRTz9OQCHPiPPHdJggm104vpRst+X9KPH5WR9s8sAACAASURBVBPp+TRm7HrKquaJH+NQrvGqgZubK4JAvzwvX6SIbc/FNOBY6M+7P+wYjxVn8wAavQbfF2+xXZi6S4bqlNEE4NivydYW327eEZs1iStBJ3b4SvDi2qTrs4B+NjI8Qj8aEmg/JboJeNx4tO8ML6FdEn14pHck+Xt9kbu+5OrqBYE6gNLP4HqSfmw47lsGo1mZ7j3qpKep4ab1TuZampfYPwtxFgLnfU/3EXwTIkIHt5tyYVhk7GBkcCIW3PL9Qe9t3b3B60o23QuSM6OVWF6ziRSu9Y7KZFzqYSC5LEjFNVVlygSuIm3PiX3YGk97b2cEFw7l5tRID6Web2dtsSQoERIYuJibWoxWR9l5H4n13U5QdzmVUkRGyLdhoG0bLN/H8Ywh7yzq8Yg/cwmNxyODls7xqHOH0VwYYw8y7Jjgk5i/Wz736WcrwuI0Ehx3BVMTzcm7A3gBUjYYQiyCcMSJY8YmxzN6j0IIhCOwlCSI9Hc8f3HN3IGiKTA+D14m8WcJvrdiYv7umO1Yl4La9qh3OpO07jKKLOfCsugaU3YIBZY6dTjTtCAxlGbxPGB76BHdAZNsobEsksbidnz7kTHn2cuA1dlzhuWcwVCuOSpAfV9hzb6kGbUtssYD0zTmLE4JjYPfyiNp6KECD2X2ZzaJGBxIkpTROEtNZ+F+gkFoNX3GdmahDFtXeikYSpfHHzbkT0T1qU+VNWSFwA/1dwxjw+HdLRNZMzOUhW0rsQ8Zu3xHa6gI79+84+3+yHQ2o9xrW9rZI7vOIUxdlBG+9lcJ9+/fIyyBMir30v1Xtgjq9fjJ334en8fn8Xl8Hp/H/4/HT0aCIzu6+qnAWjP4JbK/ojNFzcHOCcIZIorwDRee9ASxLfju2999hKguLxPq3kMqSau061U7Nvl+R77JsY23OJs42INNP7QIQ+Jai0dCJ0VZCtcUP0dbst6fytHkD98zu1mC8QqSuYWXTJhOPI4mhG46GLuKwzCyN2lTMQ9JzkJmoaA2ahMiabDSGeFFgmei/7rfM1YFu7plzHQkOqk7Mi/EcXts4+BX0YjoOkZXEZl2jfATpLMvLZe62DNd6dpXvTnS+AcaccNBam/n5+GcJtkjvSsM0pgz5wp/FBzX7xiNF7ze7oi8AlH7eEZ9oLIbzhcOdlOwfyLZ7c6ZTZ4TjhW/OujveO2v8I8ewu4In0SAz1+ezNdyLsBq8ITHuw+6hvfYZHiuYHY548pE0UoF2MuEKLRJQv29l5cx337zgeMPGyaGkHzuxTBTzNKIqzOdXgx9ifIDnDRhYrzPYe5w3PT44YwPvY7Ko9kKTwiwBVdfnLLaAxzWB1LlE0VTqkcNTNq2Ero9PhkrE80kE4vL6QWVlbP5oCPgF2c+748dX1k2vNJnW5WKbGgYXZfHQj+/vbrmeRTQuh5JYmrbykYlDmc3LuPUEK2n5+AEjEWGjM9O5rpxntJXijYreDHxqA0X5/s3QitdLCaEno42Hx3JqnXYzny2v9FRRTB7zbB8SXO/pRcmHTr27GwXrAlHI6B65kWc2TN8ccDynkRqU8a445v9W3xHp0Pnck57FnB4d5rKl5Z+T2RX4PoB0xlYpnaSqRGnBddTVCYt501cutIjsF0sk56y5IhUDd7EQjj6Z6pqKAqwZYdyjZp7DcHhgcEPaSoTzY0WM0+gohnKnDEPhyRWjM6pwoxjK1zDCWopGPsOO51yHZ+b5/HpB8GoPHrThrPsbIr+SCVb4l5H28lyxvQyYthKPjzqdHpPS7XOSS99JLrWdf+4oRgUarpgf9C153xzwI1nZE3BaECD4STAtU7Tt2fBwGyi99ULHXbNmqvEwzESTPuio+HAz+bLj5JOh37C4mqFtAMy09ZFpBC7FWWn6GpDcG7FnC1iCF1GA3LMdg1OEjKfhPSmlaSQcH12QdvUNFttt+10wicEcfDCGUtfkhm7nW17pFBUUUQ0MdJujzZ5M3DctpzdmFLH2KI2a+7HM25M+rcfFG1fkIwljRFSD/GJfYWSEM90HdOySm7cOUOYcZcZME8zIQwtitpD9np/rMNPx3o/eQlumz1LzIGNXTpHYqsdjbH2vcqRtY2KAiqjlKwaF1/52PaMMDDF5Iee2rdpvOCjAv18cYk39ODAWGljZNmKy7OUOHI+kgdXZcMssNkdFPsnmSMRMJSnl+D68ZEmlJxZRuZGtfSzAMebk9V6fnl7pIgdRmnTWiZXHIXkdsBiMsdDG8Fmm/PduqSrl4S+Ye4Xgnd3G4QjmBsU1Dh1SFwHx08x9XksYNPkuBL8mVniTwB55pchQ3Xk3KQ9/Mslh3SK+qHlfPZ7AAxTuOhv8M9KnFKnAnPVQfw7ptEzMLJWVjChLBqcfYkljK7dGCIeCg6OS7zW87BvasJmYJ/6+Lemv+xyws31nIciow313i6T06PRiYZ83/Pt4Ugt9PMrL6VZuMSTgNwoaywnDueXE1QcECt9ELthRxiW3PyewjPEyPVQktg39LbNPtN/tw4sViJks/6OOHkFgIgtatnzfV7SrfX8VGSjhA9OiD/7dE0wthLsFwnXXs033+ji/MN3f0JfvedmlZIZIzutFMtZSOzecfkHRk/QD3hZjJSuQJk0WlJPeSdafvvwDeGoHYgL6yWhcFkEEYVxvqosp9pbxM+WHI2RwRvo6hxVldS3p31LltSXm1VI3DLFvjpnletzsS5K6tBmVW7Zm5RjWWcsXnxJ+abGd/QlNbG/oHzo2P3QEBrE4PD7DucPRzYy48KkquwyQoULxtsjz1JTEysTHvJHxrJkW5ua/8s9YhtRb07Tt8Kk2xAWnl1TSRdlEN39CJajSBcJItMXT14XnC2uGH2LypQm6qZh4l2QUdKa/xWdZJAdG9lz3GrDdp6G5GLAHVrimT5jyVjTtzZ9fcSW+qxuDncEfYfvndaAVFcQmfPp1HvWrcNlvODi2Y1ez6ZCCQGBz5gZoJocaeuRou/5YPrfnivF6CmybQZ7/U53w4hwBnqRcChNmWYSsEpmrM5fcf/+LQBv/I7VswVJNKOv9AXXHBwm01P0ouu1TBf6OWbpAKplPksJU10m2RX3HA8D1WRGa+bBNiInJfE9nM5cWl2K8gvW+/XHfspl2tKME2aWQLjafiQXMcswZOq7DJf6HB/yHQ4x5TEHk3K9uZmiutP04oPqELMAtdaX232v8JoRNXaUudFY3BR4SPrEwku1ExUMLcfMJi32PBgQ3c18yua7bzluS3yjPRmkcy6jSz4ca5pSf97q6pK5J/iuHsjNfWAFLcFkxVS07I0N84JPE+w/jZ+8BFXrERi0U5BGWLZNYEcII61yLHoy2TBlYGfqDdKxsYRHmD7nuNZ1k6YVxEphy/ajBNL+Q0neKFb+gtEAYwJfEc0mWAi8QT+UGhsid443iykMOlQNMDs/VTmYLFfEyZTpC23wzuVArkKU7X1s68hUxBikTCZXjEsjCTVZIdyaTb3HMsi13nN4vH1kvzny1Y3xPJwJL/7oD2gP7yiV3sTzucciXTL0FfkHwzSf2vhyyTS2WRi4dTScIsBSEZNePGfmG8b/UjEdlmxe1AhjACMShume6bMV7x/0i3i3VgTeORdfukjHNDufdxSPEcezO35ugAGPHyqyfcvLC8XeMMhPq56LyWu6bzcUZveH72+RM5/XVsy9gUdv81NvOlkuaFlTvq1Jv9YeabB6TsGI77sfX6jRdVBpT/F4R7wy615ltOJIMhfcD/qFChqbybOGQEz4/oNGy63znMfKwmkkcxMduHVP4MeoRlE4+jmEcugyi8wf+H73aSklPwxpa+jvbeSoX05LCoK+ZTo4XJl6SGoLll2Hc+ayv9Xn7r75Fc+DOY5rsdvrS+b85QXnrwKcfzols3TNreszjtYLlssldq5ftu044PkLKloe7vVlObd98qzhux9ueXlensz1+RdfAjBzOpJOkDU1pQEfWbZF3jYEW4dQaQN90QquXlt459cfVUO6JiCsM/pnL0gvDNycgczz6d/tcDM9l+XFc2Z3Jf3C5n5vanHqHukeCTxFY4zlYWNTRCmrxY5v/tJ8F+bcWXZNfL6g3BzAIL9tJ0TIkWQeMhhR3WqvqFoH4Xg8mvVUbYiKRtrR4zEzkUEjEI7NNJqgDAaglyV1UWNXNcGNUUiRgqbcMU3OGU19bewF3gAEp+fB9gWjZdq4SsViuWAarbCE/o5ZErHvB4ahZPS1bam6gTxxOBwt2lCvyW+KlvJP3hB1NT+/0PvT1i2ja+OJiK3J/HjejMuLr5nGMaVZqxfxgvJYYzWKwahS5IOg2e5P5uu4DkuDNp/5CnV9hmMpprGpH07mLBOPN1nB5qB/tnjxDDtwyLY5eafPZ99Kajx64eP5Okq17SNfXV0SnC9Jp3o91a5BuoKbyxR3or/3h287ED2R35FG2gG/Xiao4PQSDJtbfr3pOT7qZ3GjK7qspckeqRp9D5RFRTq0hLZk+8a0yjmS1eUlu0YQGKmn41BiuVOerRyOmd7L45s1vqMISpvcZJzKtkFJxXSy5Gcro/d46LEOLfasJE40uNB3P40Z+LjWP/XL0LVxTGrBbny6caSiwzHeiD/0dENPyUhv+uv8IKRqOmQlqISBh6saLAev8VGDftAPhwI5SmQo8BP9Mzec0JZg2wOH42DmMNIowabaYxmpGo+RoDs96LOpxSRJmF3rdJM9Su6rkcddQ/FUxE7mzBYzjrnLaDz8YhSA5LguePZcH4DFF0v2bcc+E7yp9QX/1csLbDVS5iVpaiDtyxGFQ1tLMgNpvowkr87OGboW3/Qs/fAJIVXh1yQiIV/rC3WrMmS14Z8VDjOTzgr3vyV87lP8kxnftvqieH4Wc8/Ih+2e16ZvSowvEDIjXU4/oiUvDr9hW3ZsGxf/uX4B4qpkuSo5qpTgW/38XVthDZLWi3Fc/XcL//RonE3OUJHN82NOn+pDd33j0FgeMprjGSVP6W1ojxX94VvEmTkXk4jH99+wz9cUD/qinQWwvodXL77i5pf6rDjvWizlk20jmkqnkSzb59XF1zz0Dl9G2sFprY4P//R3uOMVUz5d+PZbi8P2QBUGzCe/1M/whUVWDjwXEjfRc9t9KFn3D4jsA7GJSBaOw5d/LWG7aXACY4yuJzh2wL/9N37Bw702qB+k5Pm5YBzeI01aSj4URI5Pd7BJHZPisXzGsWM4KrrlKWR7jPUFFcxfI44tx8FmFZvLd/kK+9BzuN3x4qD/93ZZUdUKX/nMjIEKqiNiGnOevCA0cHOZSt4Vd+TehMGgN1V9RMaS8DDypjYR4/GOYfKH+NGR1tM/S4OQxG/o7ZuT+XpPqt2Wgy8sQiHITbZjaATObE7VAZaeb3jukZUtXauojFSPF8S07pzCKZGu3tfjeGTooHBmPDd9gsfGJgo9RF1gWnHZ5gfsZofrC1wTmbijQtETNqe8/3l+JDGsIs9eXCAmAWmQUxf6ArX8KaCQXkRuQEp37wpsq6aSFt5EvxdDNNKXNZmw2Uo9Pyd1ORw3dHlIaViTtg8Dba6ol2cc3+u9DSMI7QHVlNQbw6zixwTW6XyL9R2Hc+1oprNL4tGmzDNao53pjz6dF+AHitDR9smfOuxLF5k1RKN2IJvBx02eETL/GEQs5hWXX7+C0eLZXH9HHe0Y13vuf9iAqy+y2XxC3Q0IXzEz+qFnfk92PHXiZOmisjW18ayDIcb1UrbFG45GDimrKsoRpuOGwtbvxS+WLnMVglvTtvpz9w81Yd8i+x1+/xRs2EjhUrlrso0+nx/evuOLP/o3ufzi/GMW4rarOTRbplWEbUCJdfxZSunz+Dw+j8/j8/g8Pjn+HyJBH2UERbdFC11NWw/YlU4PDmGK3bXINmMxfwGAa0c8DB11efiX6TFp0Rx70mlAa7y2sQtwAkElcxLTnGl5EUkS4I8dQ649qn4I6ZC4Y8/cMD5UlWR9kCfzbZt7No1PutGeh5zP8EVEJW/54U5/XvpKcLiXPHQtyVx7nyqI2K9LXr56yeKFjiLHYsvqYkk4s3g86M+7vf0ey3NpVY5fa09rc9txiF2OZU9kUr1K2gxWhUCyU9rjU92pCPC7h5iXkwekiWrt+gb/2de8lCXHxvRvnSe4NzXtwyNffKnX+A+vBX/26OK6PlMTqavFlOvtkkXSc7G80s8wTZDfvkW+9PHem95B+ZJN0RAXR+KnNO9tRTCNePe7DeUHva7HT6Q8bDfEqlzS8+f4lzoSTBdTplbEvu9YmxTP8ObA++k7Ls8DykynPfz5PXW6Zvfme2aRed4wxEknEEswhW2CCneI8OYpD5X+34dKUa73dJnkJnkOQLKKyBGMWclyeZoaB9g1Iw93FZ208Wb6eRaLa1bbjPzwG3zTr+dd2vz57o7Z8RbfeOXnk0seHlpWywuaUKdVujBlvSu4Og+5ONf1pa6LSeYX/O7X331sCQpEy23xFiea4FvaCz0WNWIYmF6seP2LX5zMdRj0M3SNRR8nqDphY4BLRB1z36abuGyljl6/dm+oyorIsXkmtDf/4ByxD4qtvWNqGSYUAV2X8tLd8TvDLhRbFps65LU9MHvUP/uzwebiuUecJPi/1lH5qz/+OQ0Hmtt3J/PtTN057mxaRtLQozXprCCwsYQkP/aUvql9qYBe+vS2i0r0ug9ySuNO2OU+tqnPWvacNj8SjzNGw/dai4Zx7KBRBKae6HsxUo3024bWmAJfONTtDuzT83Dm+UwNSEkMDakcCeSAZSISx7X4kFXk64rvPugIvB8qwkSTLTRGuNkTCYvJkio/8s3vfqXn3A+E6YQolvittgvj5o6yec8wdpyZ9GzdVSR+ynTlEqDX+G7b46rT0sNqkRKbDMfY2Axdzqh6zpTea+lKOifi7nH7sUdbVkeu+5C6eKTudZT65c/+Oo506S8LrE6/Y93jLa4hA5kb2puvxQ250+PvS35zr1Pu87MlTtWQTgVXRghZNB1dfdqe5qszRFPjeU+gyYFOtsRJSp/rz3MXPpeNxTGPuTBYBncRUdlHpu7I/EKfn/P5Oano+ObP3zOzzbMlEY/7DXaxx0Wvlx+ECLtkf7/mYTBtZqsZyJR+d8QLjcj3+P8CGDN3HRzxRI+VIZVHpxyEWUyheoQ9IZpGH1kgWtvCtkYaL6LP9WLV0mMVxWQVmNo8IpGgQrJ8j2fy8tM6QzkKJRwYTa66rpnPEiwnplMmnF+GrLPTvjuLhG6X83hvwBhdz7tuzsNeMTzJSfU+oesTlhL7ic1CJkQXNzQuvHtvamcKFueXeI1gLIwjkB+5WF0RRheUa70u4nrJMB5xhpT0XBsoxyrYbY447cDcvKBVd4oAs+8Ktnub2Zm+jG7OXuK/umD6uOfB9G+58ojsLqjGLVdmM91mwr/2R9cs3t3BG0OjJD3CpSRJE/JKAy+uVzeorxwSK4JEp2O/dufcNgG1f49vUL5N0uMeQE7W3H7Q1Z9um57M96E8sH+MUIGNbVIMvi9RFPR5xWAuvFpsSDyJbRe8HfRBXFaK11+mrMSEO1vvxY2K8d2aWrxlY4icfSumliPSr2CqnZTmzT1ZIvGDkIPSZy/qJlxNQ2TjEDqnDhHAbz6syccGq1U8vDfnONjj1S1OnZAP+tK26ow4gLt3HV8utRF7UDXWpoQXPb5BZPpnEUrl9JOE5FLXg141z9gNHe6LlOad3uPKcbiKVmTlFMfTxi5wY97J91zP55x5p+nQf/3yCwD6i4jtrzeczxXOqNOcrgOuv+D5ssMxKaOWiNkYQWhjGxDZS7XgbdtQbMDL9Rm4//2U1+6Ut3JJatJ893cPNMcNv40bkpW+4OPwDGd0ifqE6ZVe4yQOOLO/4t0ppguM0enFCPseD4vAgKWi6RwxmyD9kKDVZ2zTjTSOi69spgZJXssVjQqYOy1Fob9z7HuSiwtWlw7wRLbh4rcJSRQxHrWjkQQjdtbhphai0HbGlw2eHTCxTuGLtp0SmeZpmfcksxarcpnEhryj6HH7FlGXTEyf4NFyEJaNMwYI9URPKLheXtJPX3NX/an+WVaxmC9o84bA1BMvokt8Idg9FLgGoOEgiJ2En11c4xsav8EqOTSnNatJmGChn7U+vuGxqVGDIDc9xTKSpF5B3DSkpq9PNQO745qF3VObtCy7D8zPXtIFCtsw3AQXEb6yiEM4GKJ+x90i5CMRI88nU7NOdxRjRWhH7E1D/qFqud+f2t5ufkFnj6SXeo2Xnse2ecPcn+BKnU4/rt9TWjXxpcPFTK/TEEDWP2JdO8i5KU+oN8zFjGih2JlL8DBY5H1OV3ZYZwY0WQjW6yObsSeMtQ1N3Ges4phmPsX+1rCOXT8/me9fHD95CR6bPVemO9PBoZIjWVVxLPRkJ/MJri2xXB8RGlYVJyFJHWx34BBpA5B2HkMfUXYVfqhfinm0oD/cUlUh49P9VHkcG12cl0a9oi1qxnqLn2d0Sntj0XKK738CBh0njL1NX+q39iAKRnfOxPGQqTZudbEluXjOZJIQT7SRsXyHeutS95LORB/upGMobOTYMZhG69u7NfSCZy8u2IYG5er51AeJytf4hjuys2ywwLbBNrW12dlpXjr8esTeJchSG8+i+IE/eC7h1R/RxjqCfPubkW3+gZc/f8H6g76MD88iJtmWpT/nH91oY+fc7xgnLv/WPGYrTT2gy7j88vf5pZLcGbj1rG8ZZUD+Z0ucc4P8/e72/2bvzbYlObL0vM/n2cNjOnPmyUQCKKCrUS12UyTXol5aj6ClRepCi2S3qlADcs4zx+jh8+y6MEuoqgOEHqDTLjNPRJibbzPbw7//nzebeyZqQDsTF09paPxrNMQiuOSe1+z3Fstr8dKCTUu5MJhbNfVnmqvpFEKNx/xHKlnY9r4zqAcF4zc6y1xs5KYqyA4HqqTHa4RN1Y2KN4OxKrl6Jg7oD+03uPWETh/Je4mGTRQIvscYYzT1+MIGUJyKx7hBz0aq/oP4t27K+2KFkTzgXojNmaRr3AraeKA7FQ7ZyeRrnj0LcK5+QJcADYac+mBSuBXfzgRZwE3esH/8QEJHb3++yOfo0TmK6zBIVHKj9JjWBe92G9z1cU2FQKyTG0bk05J0sHHl5WYPPZ2VQBEQrwRv44keYulT0lbBjf8s1s4LmBQj3aYhicS7NT/UPC4jlAFmslbclPAp+RfGXQVL8W8X4RndSU/0bMFyJw65SRigTDV85bil42om7HlsCtqxIa57PjcBGZpCM8DYqvhLEUGUucYqjTm0NqMi2yEsB1XRsM0psQSPTPuexj6gKS2lbO5eOB662eLXCrmssVdJzrIDNRbqFABdW+MbBvb02Mm4nJxg1eL7okHHyzyUTKU+iMsIHQx67HZAk2ePVQ30Y0MUOWSS+cdtbdQGnKHhRNanK2OLmrU0FexKsXZqBXELQ5WjySbwZ6/mdJlKkRg/H7zKYUPzC3iBdx/eEkr2Ju/FAq03QVfZpuL7x6LlsdPxmoFT6QM6wRl+kXGwVPzTFwDE1cCwu6dvN8wWYp9o0wlkW/qdgSPJLB7XW0KjgrLAl2j4NBOsOpsuo5f15LJX+dQVR/NdhAsuL0Za6UC4xsBYnNEPOtW5WLt0f09tDsy9CdapRKtXW4xXHqlRMn5uO1IqhnHPev+WTxsJXlR81BH+++o1eSsc0DgPWC1dTtwpF98LdqXoIsJ2Twhal5utoE2z1F/y4v6/8evo0HJAn0ouSdPCqCpGx0TthZFp40ClqZiKTsdnYIzNPFgSxx2jL5knEpXd/ZZusPGkR6VaAxPP42r+96iK8EYmZksddxh1Qy8PgOW0IzAt1GjCVHI4Zl2JWR6nF/OspTV0ahmVGo7LTLVYrbZ8WonLwrE1ZienhM4JvSbZCG5i2v0By/IoM5EKWS/AyDvQoZIHWYXKp15hc7cilP10pTpQtyl1cmA3yDTBWYRXG1g0mFPR/6Zbxy/iO++E27sUPNmbNzf4/cPIf14c2A3igm6aivPpK6ZRxcuXonevGB+pIpNerXl1EGnJ6trBaUaUyW84k4gvDjusIWelzlhLeqj6YJA2CgfbxJbOTBTNqU8m3Gz/G74kCnas48jVqgr0Vkdvntj9JL7vzihp32s4JwrInp6i2ZPXMSttIHv4SXx4+oKrs57AqTk5F5dPeX9HO7roicrbTFwCM9fF01167YArpY5enIZsHgx6GiLZmlI1Ww5VhhPYtMov9wmuswp7v2U7tjR7cfHczAwWXsQ+LEglKCRJdBIlIXx5QvCNiMiult/i/K8h86mPei5s8e0fCxI7o9KvWDri+z69/8jtwwcK8wrtmWRMGQKUxKHax9ysxCFray26dwZ1wXA4JiAepIfvWhbOuKCtXYxTGan6Nl3XU77fI/07tKeY0+sls9V7+kzYp9XuKao5J9qaWSdI2ZUrE0OvsMeBWFKTaWqGY13TZm8odmJf2OcXHOKEwNxRSqk03ZtjdAmdc9wi4Un6sn3bkw/Q9wqjvGTWacq+qdAXGdNBzCPuc5rcpulgX0qZNL9nnFjcP9UYUkqr6zIsVaXsNbzPrU59S5QaDHoFUkbHVgZMH5TBRJMp4qZrUZQOj+PIyp7ojFvJXDJoOGhY4TmJ7B/NigeGwWY+0Ynl/Mp9S90O1IPCIPsT23nJeudjdz3jQVxInmuQFznpKuVMUt29+Oqap9U9SmXw6rlw5i5Ol9S+RVU0GNIP6tYp+v6YXP8vf3r7sxP4zbMQw/RYBCHtVjjCHz+9p1gd+Mdvv2P8zOuXlQSeAaqLkYh3YQ05UHIyU1mcie9TupK3b574y8M9l6FwSOYLh/W45f71T3gXMvNhBAzjSNlCXQlb3O1S8vIXkOO6jaMqDDJVedA18sRmcANMaRfOiyVWFWGeWTTh5wzBwMXM5fCuJp+K54gmV+yyBCYvCENps5rF419+wo+uaHrhfDiOy2T6VaslYAAAIABJREFUnOsXr7j4SnKgmnPUrENpShRDktwPx2fZX48vwJgv48v4Mr6ML+Pf7PjVSLAac1xH3LCeb8FDh6m3zCSTx6EpyTcjWueiydrH/Ow5YfiK5XwgFRk9bpSKrtYwTYNQNtVHWkV0dorWp5Qyfaf0JW2jYdBgNCLS6I0Brc5QNIhkzUEdU/zueOp17xCeB6ij+L7H2wRUhy5vqHfCI3enM8pEJ852dLKIWxcjvWOSJB2W/A1WLcluS7BcUObCG3l6MLFMCzVP+TtbpH+TUkVLLQYl4kl6i9nHDKo9ywB0RbQ19N2xN3Jfltzu/8BVK1Jru74idO+5v/W5k6KTpulwMVe5fBFxL8VTHSOkMwMuzlU+3Yjo8+xkTtiGWEPH330nPD4Gj30shCenjUiFtJOW8scOLzpn0omo99F6zsTfo3tf8+Gj+L60PCbJvb/dcvf2R9paR/te/F3eWWzGjtCxuLqQKU29pKeHfkB3RTS3yzpmNyVjM2Kkwg32rZB9seHCnqHJ9QyXr9BGky610RBrd9g3LGcXtM05RSnBN5VK29u4lc/4C+0cAPYadkpJ89ARTKQ8zpjxYZcRBqcUimwK//oZc3fJhb7n/FpELu7MwtBDdlMbR0p9FZOS/Z2Frx34eC+ev/ZsomffE9kBv7+TnIbxmt54RTid48ja9VJxqCuV+fkLTONYRSK6kN6yn3P+7z2UnxKyB9l3eh2Q3XdkRk4oU3AvGDgJDmxLGFzJcpRrnLUHBs3gUIkUKR8vabWBRikYUxGVF9qMMLBo/W8YfpDN7O7A4WNKpdfMZJnAsDJ80+Gb8pjbsjMlYcZWIS0qNjdbLAmeaO2AsihRtwOZIpmFMOh0g0H30eTfNWXPbhgZCpVAEpyHhgKdQl028LmhvNgxjxzGUcdORDQXWhP8EeoxpVZkn6Duog8mtXJMUG4F/s/fV7YKWTIQhS4Pn2mYqpGTpc3p6Tmm7Lt816w5DFDsDigSDFLWHp6j0zcNtvw331WIvAknS4PfXorMj+eHVJ8+Ypgap4rIJISjwWp/oFIVylq8syZJmdjHkVWpFBjnIu23fcwg2zGen8C92LP3b58wmxTt+Sl6KdOcZselNWe0J/wopbm8YcLJ/Jq6bgnkmZkX0DUGZq+zkwoWltNRZgmW7mBLDtxRaXm427G3LZ7LOq7nW+yyYwaheH0LrUapyTYhJWQwTf7wqQFLRK9j1eIaHWdXC2724izr1JF3j2ta98DJhbhr+tkSpVryuL+nm4movMXhLc8IXhhUsThn81XNR+WOoD7DeRRZMm9aMTUgftyR5OI9Ktlx+vavx6+jQ/uWToayhBqjaqLR4ElGhlwZWRg6reHhG5LEV7E4nShMpl/RSumOIG5Q/+wQBRauZKx1hoQkvadpYS6BEl2+wVAgTWN6iabsFI29oaB0FUSywdKZ/oxa/euRKTXL+oy1JP2u6pGHdMWo6ixlzaFWWrb7W+5ijVzWHCw9IEsn9K3HOBMXiHF3R5KNPDMqckmvZnseyd2W82ubLJP9WnXOi9FEU11c2ZDfVgXoFo0y8HonjCz0jg39rfGBu7pnLASQx2pD/uOrv2c7xLR3ElV5MSN77vDEgm0mLvJVl9LpM75dTPnu+98B0KQHMG4ZqbkzXwAwZhr/2z99zZClvC4lDd0t5EGNF7X8l3+RoJr099TxlOjcZ5+KAyr45vxovrf3ex4eCuzrGf1GEo1ftERDgOGO2IGoHTWbil2eYhslgyQCONyt2F54nCcmj60EPTU5m5uExjVxL0Xx2jMn1GWBVut0Ulm+TeDjao9WrEgkCOJyEjKZXtC+vyNTpkdzBbhw4KcPHcn9E9pEXDxmC3fvb7nxQgJTrPHf//AbLk5UetPnQZI02OqE1eMd/8cf/4Xr78T3913Aj4lFExd8N5X0bZ3BYOYElUMum+U3XU+fPWK6IUtZDyrzjtpoOPPPmV0ez3d5Li8GXWVQE9qoJpY1kuzjDm8IOaQZV6awz2oy4ebHewbP4DdS73A9rJmbOlXrUsm5PLz7Pd/+4wlxfEelid8NhoFPfY+ub7k6F/az2h0olTXP7WecnojDd262zJ6/5E8nx5egL5GWm03NNi1ZrRJCiXLU2jVpoZP3NUUrUr+9u0Sb2OzjijoUn7WiMya9Q6lkGJIYW7EHZqpCdugZZF+bo0CtqlhdS9mLfa/VFVYP2dhgSh4vc9aTmR3uLxCqa0rHKHsby7uUVQ0nTkskU78VE8xC5f7NW7YSHemHAY7vc7vZ4ElWp0W4pO51yiJhKlO4atszsTpGvSH9JJ631YSMkLJO6SWSVp8sINNIi+3PqiaO5lBkx1JVXQm9ZNtZmQXNOmP9foctSR96ZUvR13z4uMWVwLDBO+Xr5YRtEaNIVqa0i6k2B2oCpHAF77IDZaeiehaapJMssgJUlculhy7LTu/LAcXxmbo2miw5eN6WKMhAOqifR70qwZnRjWKfPYwmmu5RaAafWTnUoaZabXm8r/GlBKgXzGgVlyxt0AMZWIQtOAHKf/gNXSocwTwb8L4dKdYdDwdxCd+qNf6Dhr5U8GQ/7tSMaOMdThphSRKFtvt1Au1fvQTVtqOTyMjG0UDT0BWN1hWXzFkfkYw2jdEz6mKR+ryhyzu6qEaS4BNZJRMPUEeaz825XcOAwSI6wZQsCLvbA7Xe0TYj5zOxSml/oNVSzK5kzIXRxa3GITkuJreWw5unDGzx8IMWQmOiWA3PJKv+Y9cw5iNdOzLKF7ZvdA5Djx5FqJnYyI1/ILBglbdYUp9M80aWk4Dr01N2a1HDqh5fM51PmPc2teQcbMpHRtNCMw1mllgXWzu+BJ+3Not/umaUYpJkCu+LW77bh9xIKqzZLZSLAvvkhkQK4zqWD3pGp4ycye7hezfl9p/fYSgGtWRNv/yPU95/+iPt4xOfCWuK9oohXnO7ynnze1EPsiqdxdmGp49bRlUg3tzty6P5uo7Fi+ffYs4VakkR5p0rrLuUoqx5cyua2+3iESXf0s9VqkS2yehL1kVDU8Y8uxYXbPH6AxPb5uTy+meU4tP2FreNcCIH9SDed+Ap7O/2rG7vMc/FGmRlzYli8FQWHJJfzuoPxjmX0Zr1U0Ozk4dHMKPtFPSq4+xKXNquaZBoKmQDv/snEZVPzy54n6X85ekjTzvJeN/tuW96tKYhly0sz22bhfuCYKZxLltTmnXMavWEj0stddiSLGFUDZT5FnUTHc31mawd3+9WvE1vuTi5YvPmc4tRy/AUcz0zSNbikB10hzHPcIKARHKM2k2KpRyojIDFILkUz0Z2j3sac89YiCgyV7bkySP+by22BxEd+vYMu6/YbFsWv/0AwPZwgV4WuL+g2LJdCydg/bin2NQ0VkgsVUnMQGVABdVjlIoDRblDK0ye0pbNWtjsSVTTagZZuieSwbFq2tT2yNBkaIYkLggc+qrl3XpNs5GftTUydAzbYOrKvaWqOJrKaB5HgmdTnVru9+z0FKf1WCcmoS6cLzusqfqEaT/iBiISUmYL4rpl+fzsZ1WbMR1JNzF9W7D4WryzuihINzn1bsV8Ieby1eycy3BJ4jxRyud9UG+5qzseHjNmM+GQJKZHNxy3dLjWSCvR2/NJQ4yKVjYgkZHPZt+RpTGbvGDmy8jddbg5xHjOjMVMnIFW0fLu3Rp7OpI/iXnkd6/Bdzg5sZl8Vr0oDniDwsRXf25an03A9g3KxsdG7BXD80naEfjbthl96nIy/4ZOFq3XmxV5YBPYE4pGRn29QasNtIzMQ8nq9ZuXHMYNambTSXAl2cBW81lEFqUhnm27u+e2zFk3YNsiu/R3i2ew9NHGkPdS1SVtepK7DPch51HiRmbKMRnB38z91/5TNQtCeeEZlkYzDPQzFw9hJK2mYysqKCOWVPs1/QFTm6O3ORriFt/vSgxlTUfAKhaHe//wDnfqMKgGtjxQrKaki3eM5Ciq5H1rS7Re5SyKfpbDuUkPqMpxelGtTPIsY26JxeyGjusJ5IOGbkutv7rjXZrQrwa++nsRQu/KmGpTohodgexXUmoX1zQp8kemgUwlpi3RPGTqh4zS0240jz6taGyVSKIIm95HHwZ8dUEu0w3vs2Mgz7N/d8m7/56jXYu+sacf/0D4xuThH+Hxzx8B2KhbpouXmE3EfSJetHlhEE0Hdu9SElPknJvhQLH6SKlpVC8kafFtyonykrQvuL0V8/3jXscpJ7Sti3kpURa5xSp5j6qXTK7E5Tf97gf43/92vtHijMKv0AKYSWc7LVMuJ2esi1vuP70BYKsP/O67b8m7DcleHGQTHSaGxdS4wI7FJdBpM7zFjO+/uuauFms3FjviNsVOdSxHGHtmR0wXCzwvYhjFOh4eNkyiEk5stPKXzXga2CynHq7ikjzIw/j2HZ1a4F16mLJgPuQ7nOic0V9SS6q2XLUpbZWT5X9mkGfs3dMNhVbzd39/zpgKR6PqevadTvHYULTiN7Y3H1Bud3Cqs9sIe7c0n3pYsS1cFvYx7+19ISMcr8M9tGzT94yXkpVlnbEfM4yTAFsCD56qP9OeVlw3d3i6cBhX6YbV4x2OH+AYkj+ztNjv/xsXl78jDyRn6bogenFCXj9wKqHZuqVhLQsgpqnE/t6Ot9T/1x3j/Hh9u0KsXdMWaIFDnuxQMsn8pNskSkfcJIzy+wfLxDJ0vjo1GDYyPZXcknYd20NOmYm/2+1byjMF23Jw5F7sRpM83VOUBZYnDsVcMam6BDvvkX4111ODUbMwfuHQs7yAZivPmd6kKQM+bWsuZfThuQrNfo9vlDiyLazYbnhxfo7qjKRyv+fUNEaCPozUT5/TsAZW0eEtL3m5FGdK4E+gV6mbJePntFzlU9w/0W4SBhlZnr2ckTvH6brKaNFLsbeNJARKKr8nskSUvt/sSPOObl2yyoTa4/n3oPrgcI4iwT2WqfDqNMI9v+DprQS3fNrzzfXIolWgkmdA2lDXO/ZxQf6ZYnDh0tceRXaP5Uky+07j8HR8lg37KcqyolKEfc5Uj2x9R19mP+s4DpbLxeVX6FbDm88co/U/Ezdr5pfXRKZ4t6u8wG4V1iFs34nL9vHDWzabHGM8ZdTF+TFOp/SNw9IeOfRiDQ8fD/i6jn1pMDvIntL62Cn66/EFGPNlfBlfxpfxZfybHb8uqqtaaNKjtMyIXM0JxhHDE2mFAcif1gSBhy5JmwNNJd3f0jcblM9UDmrIxIF9umWQNRelLzEHUOMGWyoZD01BM1SMXUMvUzBmNxAGId3Qsitlo3C8oj0ci762ZYeW5yBz2pqqkncJt5sURQoNBLOvebGccOr5eHPh3WkPFbnVoLYJrWwRuJx4zO0Ols/4TJgf2zUvr7/idH5KIkVgi7mPGT9y4TlYnvCqlnWI2mb46oSslJ7weNzAG+8Hbqw7op3w5Cd9zeF8ZHu/YvdJRsLfdJjKDW/J+YxMHnjCcxrG2qGRUUW8qvH9KYne889//gMA/+NG5788e8+lEZFK1oa36x84PzHw2orzVIoP61u++d2Sy/Ar/ixVGgLn2JvumhGtjDlg0CciwrPCEM2o6B6fsD9zNuoZh41BhYopZYP6ruXkZI5rq2QfhBcYGM85D86pcpc+lu+s8Xl6v2PTjkwmwi48TUG1TrDNCXot0kHRc4Nz38HSHGbGcaoZIFdTyiqlqt+zkk3WVpNxfX7OTMv5rGX68G7PeegSzk/pZM/Z7aamM3z0kyWTQTxXYhpcTQp+e/o9ztdS5ufPa+JVzlOSU+3EM+y2Be1okq/WPO2lLJG/ZX0I+cbc4U9Oj+Y6St5V1wq4vPyWh+4GW8rt3LYp7WnNzR+f+P7VP4jniDRMzST7c8etZOBZZ0/c3acMwUdenIq0blWVbIcat10T+gK+//1vet73OoeqxdVEliPuS65OL4iHBaMu9oU+fUUfrKA97mu0ZY3bUCz0vsXsoZRCqVmzp9Rs0F0cWXMrDR9db0E1WUpS7V1e01Jg6BabRxGlqlVLnvZczK2fiet7VDQTukGlrYXtVOkWrc1YmC6KK97Zm1LhZaxhL4+BR2qvsJd8nbsPKzS1pF2NTEdh7wvXZxgt7M5Fl8WzdLNBN1ps36asJPhoFzOk8HLiYEnSA6XrMadzLM8m+FwS2R/YpQOPtymqVKqv+i1dntLnOZSSU3W06abHLSg+I/FWZH76uGToIHRcnu430k4UHH9BV5cMtSQvOezJWpd19hOuLE8NmYo+MQlPCyy5TlehRWQcUBOPTSOiw7vtHd5ooFk5E9naZh8K0rTm8bYk+F6+b8NjcI/32x92GecrkzKVxCKbPfq+Z24aqLo4A96uM/L8kZdXLqudyJA83exR5h3R9ZLn0u6cqsKaRoyaBbbIrhyiU8p+TZakdE/izCuGHseBVnvFxBF2bE17onxg9CocVUSWbfHLZBqfx69egvpQU0qQSV/kZG1LvM8Y5JdG4RRlHNjWFeYoe/jyTyieg9Z3KLbs3zJnWFZIkmYgNZ4wdhRPGpnSoqQi7ZOnG6qsJpyFjJLhf1j1FJVGleQYEsgQBA7OqAN/W7BfGA7hdYglP+tHFh9XGcM0wJKpymAxR198i6IaHOSl2hkKzoWPe3ZFocpm7CrlH374Cs90uHv3VqxB2fDDV3O6vmUtkaAHw8bVHdrDjqgVa6X7KuHZDN8KSB7Fy1nnx4iqTXaPfqPiPBdpxN60eVildO5ANJNySNrA7dOBYldx/bXUiHMMPjYWu+zP6JJGqssSdC0n2zjcy2Ly6eKS+2YD245Bss14i5p2GvD+D/8PRiscnKuLMy4sj92HFemTeIbZ744P6jTLqLKMYVAwpQzV0D0RdCoHxaI2RJrC1QL2Nx/ZGi2hrIVO5gHdu4TxxKR6LVO4ysCkV6jWI9GFkI4arIJ1XLN9TAm+EXO+62I0vWUWXXI2E78RFh1prdHkNe6LX5ZS+vR6xf/97k80+498pYq/ef6fvmbqaPR5xUFqNiqex2Uw8tvvvqLQxOH06WmDY8N8bmPrsqG4yrCHgYeHHf2DpPB7+oBfBhjpgGoJsIBVbnl2fkqXDxxW4lDQhwDDOnC4/TMP/nENqJaNY3Vn0GsJ2/c9XSLTbWtIPuwp9wXrJ3FZfH+i86ms8Z9VHA7SsTQtlBcD4zjn9SBSVg4L/PlIb5p0sg/Lurri6sSg+f0B80Q6H5nN2fOAr/trdq0kOJ+UXEzO+HS3PZqvIkEHhuagmwrz6YyPsuewUz1szwTPprPEfirbBK0YSBqDUSKBtTCg/ZBT5gmTiXg/hh6jtRlq7zIoYu3aVMHVITINaqlgk2326F2HtbBoCknc4I4opoZuHSe4fNOAXhx3RdugtXvKtuUPP4p9mccRelPSeTCTRANaVTOsDyxPz/AtcbH+13drik2OMTp8Zutb3d9TDiP62IOsa9mz59zfpDxtSpBI2sfHGE9XKOqBj3JNtecugWRG+usR2C62nG+aj/Q0EBrYUloocOZMIpfhBPpQOkGHmGob49rnDIaoV77e/5ElJ0SqS66Ii/yuTUgeG6Jlz42s7SqoWJFFOxRoleyv6xrWq5ykamhlSrfvR1abY2mixXnLuK445GIPBG2GPYmpq4aDdA4P6zuyeM8FAYomcRv3Ga46Ut5sSKScWF0pNB9WqJHGTOIg1qNG8j7n7i8P3D6J7zt7dsXz6ZJiWUAibO/5MCGcNMT7PZ2k47y+/OXz4fP41UvQGHr6vXhZm7Il7UfKEeaRuGFD3WGYLumIiKWCghPOiQ8xZVmBIjan75ekxQfu8wOuRCMpXYZZDwxVTy6h+kPa4E89tKlGjXh4fTajbDuUTuVU1oiMsMWeuMC/8lAnPqZvMDsVi+m7FsrplLNBJ3kUz5EVT0yKiHFyTtFLSi/P4Gxxjj4dsSXKNT6A2WqUyYrJTMwlHKe0Q0GbbTAK8dmw09CHBs2v8G3J9+mkTEwbXRlIR/G7T9tjqqEX0x/w/7GkkdIgfb5jzCycziF9JT6X3CeoTcL03z3nUAlj3/z4xOVs4O7uz5z8IDZQH7rsbh8YTR1tKTyvdV3iTy553dVEkr3HGXo+3nzg/e2e//CVjLRMg7fZhpt3CZNQ/N0PF8csLL3pEC5d+i7HK8RF23cQmBZem7N78wEA7fKMk7NneG3HoEsiBDVkoTrM4pwXoQAjZNt7glzhUJWUnbh8azPEsy8YL8qfBYP9waHJC9zLNXMZ0iuaTlHmVIWG8guRCsD77Zpqt0NTXfxQbIgfFudUxSNxP+LJZnxlrPCHnnL7CTUSNR1XqagOOxKjpa3FwfbVckGSpFQPH9FkI+5JC99ONFZGwe6dcPBenUwI3Jx3b3a88GRU5Y2ohUqaZdzeHduC00tEc9Owe4gZWrhd/R6Awzpg6ln4r1TmV+IAuH0Y2d490QUBNytZozFy5mGA6fUYrmz/cXSWwwumywnlRPzGj/2esPDQnYB1JVGZRkd365BdNnifRantKeEi4Fl+XLPKSyl1ZpVYo4alWTw/le9mHjHoNvtC5U6yz6hjhWK7eMZI48mMwVgzixS0tmWUVH9dU3G6tLi6CPF1qVFKzTbZEJgKTiVbOgyL5fkp56dTilrYWGCB3fbU3TFyvLYcSkXsT92OeFwnDDk/c8W+//SEq2lYtY4twYCt2pD2kH56ILY/s0tN8AON2SzCkKLhzT7lzWNM6E5oT8T+ORQ73r77xGBGtFKYfJuWWFrNoI1MZbtCW/Siwf1fjZKQjWwl2j1sieM9k0nJRIJ+ppcHLosFpy+uUKXaxrunlE214eQ6+hlU5J5/j7a0+Ck58OaTsM+0Vlg6Lndxye6DaNSfeCGDZ1AfKqZTMZ+sd3hc79DDUxTJx7pbHUgfjmuC88UrVv2G8LNyQ5VwaulslYy3H0W7xvaQspgp3OwPfCNpB83LKe9Wf6RTDryQ4uqLaIk9j2jShIdcZvw2e8ayorInBBNxDo59j7eImHpLNo/Cjm+2JeFvFsRlhSVR6I7zq9fcr1+CQ5aTW9LAvDlFWaIoI5YsPJddgWWYeKqF6gjjnOgDXdBjOD2xrP8/rN6x2e9Y7bbMJRnxxdLD0Fo6W0eXKVf3LGAR+oxlQldKoIBi0BsNZp8xyjaHbqjQlGPYq2P4+Gc2i5m4BBQaDLOmNSOGXpI2JwZF9sjZ4gTjWhBS1/sDykRjsAfsQLKojD5DXdCXBQPiQcyJhm/1ZHFDdy+AK6blYBsmz15cEEjwjWUsmIQRm834M3R3Pj329sphx6FtyR7F554/m/Lvpw5V1hFLWrYfZ2uGboLS1mwk2il47pKuDqzHnumTePmjlmBuMoa5izqK70tUjf3tgKclJIlEJBod9+o93jTFCb4BoHUeif+YsMseKCWjT1sdR4KtUbHb1Yx2TyvFkf3AoS72DE2M54uL03c1fH2O3sW4mvjdKQaW5/FSecb4TLyLLS5259FbLn0p1mmd1Zw8v8bLUpaSSWcMS17vEtpGZduKy9fKOtLRIt3sSPxjmiwA7I64aDmtRraKiD5//3uHwS3xbB19IrUyZ0vyceTt/ZplKg6UZhioHIcx7RkbcXj+cPY1cZjztLpjaYnnevZMx1MV2tWfyB+E7UxMiy5r8C0LNxT2vk9LnLZhjDtS/5iQ+vOBSthQbhIiZ+A0FAfFSVEx+CH2tmLhCzv6y2TP9HsLpa1oJPXXyeyUxbnHOBx4Hwtb+eF6JOpTKn9G1n8WvS2oWx9OXcydzIYw0msZRpFjGuI9zvqaaDZhtz+WLaslJ6yu9HThHN9X8WQvmalFJKOC7QwYmtRdNJYc+prWBEWmDIdBIxhqnADSg3AWJqcup75LaIhyDECapnRFgmvOODsTdhlMHCa2SugoLCWCsM5HimaNVR+zMy39cxyJQq9m4GYWxpnLIEVw/V7BqhUKteP1ViBwQ0cnxaWLQZEtDWP/DEXb4HQusWzXGbszykHD0iPeFsKOnw4xt+uakwudQuq4taGFxUhva0xlC5J3esLldH68vnZEJUnQ7ckEo3lP8ZiSz8Wa1Hc2t9mPvHp6wpaRa2eXuErIsN+izAUr07f/9ILDmPPx9pFbmdLVlIpJtGA5mbD5IN7PJh4YC51qPKeVklMzX0FdnqEGIYdO/EY70fBrG97+rTD0AYhmPmPz2SFtsY0atWvYIv52Ytv0Y8bH1xu0RMzFGyZMrn/HcnLKSoqGd3v47rsFo+7RPAo765nz4usF3mnO6pNssxsVzLhlbbxh6GVp5+6OwUw5sWC0Zb/47rjn+a/HF2DMl/FlfBlfxpfxb3b8aiTomzaBKzyPYOGyG+AsdPFl+N61NUPZUboZxkaE6Y/DIzePN4SLBYop04P9ivX+gSQt8DXhyZvKS4LJhLIucWRKInQi/D7l0ObsZHP3wjEo6hVZ00Apobu9ivYLDCyDtqHe+hhL4S1nbUuxL1CMkVJ6xn5gcqJdsFj0tJ+Ju6dnNEnCvsgwDPG8arOmSSp0R8dypXxJu2XoNU5cFfNSRJtpC3bfo2GjIzyodPVA1ymo2gLHkuK72nGKpmjBKic8FJKvNDb55rcXjDctU+ndvTLu0J9PiNMadZAMKn8qadtPXLxy6aR3V2Uqv49brvVbJpVkT78acecFfa0wmwsP9etnzzD/zweKmcn3hvi3xq5Rnhs0zgLuJJu/cczH2T2kaIbOer/FlymTE2egSHXC8JxBMmgsphGO60Kt82Et0i197HHWLfnQGsgyFM3qhO6ZSV4HWFII+XLouL8tsSsVyUdNV5q8PHuGog9sZI/ulTZBxcLoYtL6uJkbYOKccBVdU+sJSNWPMtqgtj5KdEHffSZtXhDYJsvz76kltLxXdZy+xbcjormI+nzHx2lH6mLOIEl5FVvDHhXsKsCUJBJa3nGjNpiLGaZsMjbjkq4sSbscLzuGbIeykXukYnk25W1WEcj+vx8/PHChOyx1PjNuAAAgAElEQVS//YbbWtixktTYixAOT5z9J+H1v3B8xoVG19nMPgrjPgwZzm+fMa5TSkkObxs25rnJ5mPOVvLnTp427MYpVvyRC9mGsHUemZ+OhOXseHFlCrqxDOj2JIPClZS5ms19+oeCvdbjyMxKP2ZEmkKuFqiDBInlPaFvkW1yppE4A4bhQNnEzNozFCkY7RcZxWDgeS2aKdZTLxV8e6BuKozPjCy+T98ZaMFxejFaLLk8FXOe2DCZ6+zXGTc7YVCj4eCrKpOlTVqIyOxPq1uW5pybR2ieZLvXpiRPYz5FBlktSyyHAx/ygrPap3YkO0ppsN0NOGaLJnvxvGjJpr5j1Eo0aVOT0xB7cZwlen+b0q/F3L69fM5k+j0//vQOX4p5G7aCpfuMioIlFVjulZrWdWnyhmolMh9DpFOkCQUdnmRuaacz8r7nzAxYnAiwVDIaKOYCe2jZSpLyJh8xeod+OqOR/c6KMaf03x3Nt4t3tH3E6Vw8i5qVVPsdb/9yz0y28LSH17SdINfot+IdpXpP8MlCc3XuYzG/QzqSHh45u9CIZZyWZDa9UrKwIjpHnFHOAEVfENWXFLawH8320TUbbeLgSBIF73/CKPV5/HpNcGLj68LA+qRGGxssd4Gli0M2TwritGPsUnop+5H0I1VTYJYpmiTatiyV2cRltBsU2R8zWiPhSUjQOVTygmq7hMy2qXRoJMikchQuggWq8YQ1iH/zDZNUP556YJxxeR7gT+Tt1nesNjlte0BrxAFtlDbqLCe+vyeW3xGez8iqkq5xOUjdwSqO6fa3mNMJP3z9NQC3cYzWpCionJ0JI1bjnKqoqLKYM09snrxueP2n9+gUNIZUTOiPN6Yy6ORGRaUJY9fnC6ypQZ5lZCvx99E/TFDLV3hhzJXsf/zD4x/obmb8cBZQ78XLfz0tuPA7+i7Eb4Uhuu0W3QxAV5DMWty/vid3DoS1QuyIXH29bfE7h+fLkA/tJ/Fcl8eIqkI5cKgUJqPNUjoaxuk5rfmGOtHAEmmzaHnFaRBS7d/jy1pCwZS2DnDMCfkgJvM2PtDkObm+ZXknfteOAprYwBxq0lISMAwaM8tEsQMa+R5HvcMxDLYeBItjNCBAmaRUZoOueyiSvmt3v8MIWi6VM3xZS5mEFs/MCyh2dK2Y7yvfZtPfMVcXfDsRIAPFznn3JqZNbyl3wrY/xhndS5/F6SlZKy6Z9SrFqkbS9COJJEJ//bgnOzRUika3P7bdl9+KZ9g92TTFHvtwYH8nSwwuZErITqv4jWR92f9Dzok7slstSZ7ERXOvpnwV+PiYZLJJv9ZM9oRcPZ9BKeWV4oGgO6F7oeDcivds6BqHocNhoJI6bJ3m0PYa3nCcTtKkostkHNE9B6PXCOWe6MyAoltTdwOj1LvUVINm6KjShFoyRJ3ML3HSilizUCUqu44zLFROrA5bssPkYYuflji4AnwCjEoKLDAtnawR9qRzINRMfPXYdl++uODundhn6/VHjMFn9HoupEanRstqdUOfmHz1tbCBJ1Vj3VSkWc6T7Akcu44+LsmUgF4SVw91S6U6PGKhyRKQ0tZUxoTdoDCRl3ljDLSaj6GNGFIholNVFPs4IacqOq5U6kCHvjOJ6xI84WgtsHFch9v9Fky5dk7P7eOKUZmx/0nU0l4etvgXEVN/Qi3NrhtUumagLCqcqUi5t1pNU6nEScvrjyJdfxL5OJbDaKQU8vyqnY72F/ruIuOM99V7FpJxKlMrXj+9p1EMQle8s9uPJdO+JvIHHFm3nc++prE6mofsZ7Dd+LDn037H0webVu733HfwTZ+ua7Eq2aPdDQTaEtM16SQpx/T0jJcv5oSmQyeJ1Cf/P/nOX70En0Uujjx4M2r8ucdUUWhkc7vuR/jBQNcp1HKRAqUg8x1UbcTzpcCkAtNUYX5xgi8ZJMJwgTX2ZO2eUL5sqx9JdgVNXtGXwpCDQCWaRlSbGL8Thhj4HVdTH1j9zXyTJufTY4EViM8+//YCwzZJHzds7oV15kOK1eRs24TNRhTt0/0FcZVjTJ8RSORep9dcXJ/TWxq1vOCH1Xs+lSPl5ZRzR65BVRPvHjF0jXvJd5pWFXXRoQQxq0SCANxjlpBqWdK9L5hMpQhNa9LUCap9xhiJmmOdhkSnNY1+gEys59fmgo9XA//jbU/giTX5u/ac1UsT3x/xUnFBPe5zzpUtmenhSM+9VFqieiDUVBQJ/T9s7jjkMLF7vFYcFNv1m6P5jmVHGe9obQglYU+sDWTrhnWesJCw7MfbhNpPiPOEy4mIUuzojIc/3RBHOc8i4X2uUgW1yMFvaKW37Kxqym3K4Bi0EvU3OAFlHWD4OqG0aAsTvwT1ao7zP/H0Sj3B921W9xH9VlwAo6czQ0PNNUIJlhnjAt3JOWwHJoaYx2jAYphyZU2gFZfCh9f31LtbnLyhlXVs2wjZ3x/Iqhx3Jp7/0q9Zf7LZ3HeUkkDXs6coC4O27Emr40PE0SWCrrxnou5JzJRIkZBxxeNRq9B1G1UKS9uTBa3S0WohmeQEPQ0G7g4pSj6ybsQhY9gTPKXFnIaotZjfq78rCbUT2o8psZTFGd014fgNk+ctViZebtLHOIf3xPpxu8zYSOh61jMuLNzJAlVqZm5391ieS2To2HJvp4w8Hrb4ZoQjz4qsSchpiBYWoYw+nYUHVYo1HnAMcbk7hoNre3ihxmMq6+KRjWPodGPOKFGPTWNgjTWWfRy5Nk2HL1Gjo1Fzv88gOCUMJF1ddmCp+pTv95SSMMGa+Nw9rYnOXqEjfjfZbFDcntbX8GS2ZkxtLEVFj06x5Bo0qcYk9Hjxm0u8SNinM3OpTDC6hm9/+AEA36oYzeP2qdrRMSQ1Yd41TM9Dvr++xJaqD36aYmkJajBnX0gSjdmSaOZiDB5XvxNRudprUDWY84BI0uvVqwOhk3O/W6GNYk3MfqDRTfbtI0Uvsjej91syoOlHIol3GDSF0xdn8F//1foOa6JBxbLEuzDuY7qdyfXSJH8Sdnw96qy3OdpocrGQ2pNKy9n5V9xtH7nbCuCOomm0DyvsWc1G0lMGpQ1LF+Opp5E6tW058Oo3z/G1M+bPxZ5aqiO2azP3rmiksx2vjyPXvx6/zhiDiiJ7N5bOAj8MyTqfqBeHdlY32GPPtqo/a+BS1WuULiW5K39mWQjdEFepWK1znECip+IHGq1h6FusE/F9ih2g9QVNkjHIHkPDPsFiBKNBk4TX7bok+QUppac4xrEDBslhaHYugWrRKgqW7DcZtgX1uKYrB2pJLVXc17SZRdq2mIbor8qbDjyPUS3Z7kWhfNvsGEaNw1OOLSNa1fBx2gF/otDJgrxhaFz+9pSBOduVSKMo6jF4I7xXGYMF6r24eHa3f6FvGr7/9xbDUhj76kPJLHK5mP8vdAtxoMbZbxneP2CfdGQSXr28MHDUCPvW4XEn+gRfzr5CczvOHufsA8mT6rjoWcvMM5hLsc/zswlP/1xRmHD5g1i7Z5Pj3iUlLlFqyB4/8MmRl8onF286Yzl10ZGbLC+5yzKqvGFUZRqp6smzPY7psOZzCwe0SsRsaXO2lKKlm47Q7zA7g8dOzGWYL6hHBSU+oEtnok4bOsXCNFWy4nA0V4DtU0pdtnR9jPJMeLyB3eJOl3iLa0pXvMPNbuTZYoLDQCvZZyLLpSkUHj/eI/cSntehORHKouFe2pg/drzfZpSHe+xc2t045aBUjPYJgYTR3z7FHIwJ9TiiWr/AZSj16k6sni48J8/BnYl3th9vuX2TsAtqNLkfbecV7rnGTDfQWpFKDk5ihlhlc2rBrdgf1eGBlBPuq5/opQyR1/0D5WRP3H4ikyCQbxe/xTZ1tkZPIyWxFk5HpTTw++NLe5S9mboVUzUG+eGJuBAL1aMz2i6R7dH74hnMUsFCwbY9PhP8xPc5Yeji+6cYcpEPfUG/3+FpBeFCPpelMbVddHryTOwxU9HxnJ4k26PJPjzVs/B7B388BsZkWUnVizPFnZpYhw6WBqPskzQtkxGF0k5pVRGVu1chZreiC2xGKUhrmTOKfESJfFRLrIsR9ri2QeAtoZJlj1wnNC2ev3rOiSSWP72IKHSdeL/HkXuvqBvK5rjl4FAeyBvhjDiTEwzbYHH2HarMrHjzHKcpUOYmn57EOh2SDZZuEl0sCZ8LlHOndCSHFDvy0OT7bzWVNtMJlhpT2Zri6hVN6RHqBmeGDEpOr8k1yOwGcyn2z9TRfwZG/s0wauwrk2EjskFGcII975iEKqYMmobTU3ZPNbY+0EiB4+Zmi6JbVM3+Z4BXvEu5Xk54uZjx1VzM735XkL594t3TmnGQF97lKwLTxwpURpmuXS59BjNAi0bSj+K8fMiPGZr+enwBxnwZX8aX8WV8Gf9mx69Ggv3Q/tyMrXlCJd1qe1Yr4Xk/NVtoGvKhJJEcdEXRUVQtuuIRfk5p2xpUCuNDgWx1wxo1RtugOnQcJLuzGmioNIzoRJ89yCGnK2xoVWQfO33XMGbHef+tMnDuTdlIr1JZ/4RvKrQWhJJRIDVqHjePmIGLMwqvSg9n7MwDSamQygjT9n3eZk+4SY+WSzb//Q7DUOiyhkSmFtQsoWkGGs3ElCCDVnWgnjIoJqN0exXT4l8Py1CxzAZfF2sXTDwWL1tsx+eiF+lQOzRQBgdtNsGqhWfzdBdjaRpLtyF4I4WBq4yX5lcoNNxLMsXSNbj2I6yLU+KNJAbvt0xMk08f3qBei5SMVkR43+Wo6gp9J16aoR43dDvTAaOqqfqaXrYS9E7GGCssTl6hSBmVeFMQnsxw1Jb5RKS5itqGqcHlJKKUAB//xCUbRpbnHdNIQMbtS59AUdBMjWgrPOFOhZXhkMcVg4w2nsqUSC3xFQUr+GXl6KaG5GHPWadiRuK5OqNh6UWUWsCs/Jy+bFlePcM1TBxbQtCbjPUuZX1Yc7kUhf1poHI4xIzlAkdGH7lywCljHm9zDEmEnp43uMqA5ahEMs3XDwuaKqHWTPrhFwieLTG/aHFC/McbrMFnJuWVzNoiefaO/WAxyp44tW158zrklacw/L/svTmsbVma5/Xb87z3me695w5vjojMjJqySlUqEwcxmPg4SBg4SIiWMLrdFrg4jcACCQkJqYVDW0gICYFQiWqgs8jKjMiMN97p3DPveVwbY60XFaH7Opy2UL3PejrvnLvXXsO3vvH/d6RXrvU6/cTiFwF88408aI07patz7jX44kLmv8LJgV2xJz7VabfS0s6jFb13gbnTcUo5n3omyHcHrofHUYxGgUWYmkWHTpntKVRfsBuHhIbBYOh87FYwdIereURjGBTK8SliwWiM9FmKrezxMDAo/ZZosGlN+Q6a8Cj6Avocc1T5P0NDrzKCvKdXgPGuMOnqLdv68VnblEdq5UW36AQXAaNnI1Qv4sPDlm5oyd2Re9WzqZkLxFRw27d8uJU6oCz2iGFNdOVSqRaOi/NzTlzBkB+xTLm2qegxIxMj6kB5KbplEvk2mhlhqCgEI9x+gln+1fOv0J/KPXaBheXNCduBNlRoXeaUur1nXVXcbhX4xMzj5dkJ3skSeynrE+LTM7zNPU2dYjtqXuoJRrBhGDK0UEXcRhe97vF8h/ZEnv020JlPYlzbYKI8srJqMVRI9ocyiI78esWodEB4seR5AMObLffvZORnk7eMg46RVTyoXtmjJXjSGfSJ/z1R82wR8vWrL2nSAedUEbjPenadR29NsBRqVNd0bLd7wlLn7AsFBhKdY+gNTQPlqPqv+8dRrR/KT16CkRNiKrc1OxRkqU3XaxSl3Jx605DXNY1es90rPjSjZ+JPsM05luL10rOS8NjTuh2u4mbTLI2hGXACm0YlOvf6Pabu4CY+nkKDGfuarm4xmh5PVaXmwsAyE+DHIdFN0/Hufke6lfmvs1ObL85mBL5DrnqEmMYYusYhHzBVVarttPR5j9O3WIWckmjeUqy3rI8rRhVua+qMSZIQCg1Tfbbb38EI2yJE9VQzhnPKnQHeCXWrjIjZY3oXx26Y9ibzK7nBGk1nmp9g7Uu0Exn2m11U2LXN+pvXDJmc9+KuIPjyhKvLX3LQVSNqueHdMWV6YiFWMg/XHBrEGCCyHUGt2LcXPveHDwzWiFWqhtqlST2M6Hc+z/7yOQDzq8cbJ1nOqLYdp5MrhGqoPuzXaENFX2U4as36Q87SnpGdmbiVYgyPdb5IznAbH08pvGIoeOJbTB0Hu5RrG4uAb1ff4n15SVYrCppwJHIMqt6jU2HaU1vn+nrPWbIkMT5NlWLoK8yiw3i5xFBbPYldyrRh5R0ZTuSenYRn2OPIydynU4ZM8foNeXfD0SjQV+q3T77Ctgy2Xo+RyrBX0/fYwTmTS59WKTZRNei6SavFvFZnResGyqah7Q18+/Gx8zI5d8d8z659izO02K0syEn8iGg1Y9f1rHOZ7yooSJsV92dP0A05n/V9zY535MMrWksq1jYb8AMHz54gVL7z9uENxa1gHA/MLuVnxd5Ee32N7sS0lsq5DB7hdiCwrh+NtxqVNasZ+F3Jtq3olNKxfR/XHtA9k7l65q7oGLSRyE0wO2XAzhKSScJqs6dViB+h7fHs8oTikGKrohrHM1kMJutew1MV53YvcCMN0Wp0e8U5N8tp+pGifpwquV817BTotz+JGAe43m/YPMh80ZC31PuWXbmnDKXOC/U1hisYm5rwSj031zHFhPB0xvRMXhbJdIqmuySWgEae83l7xfnJguQsQuvkc/upga3rBInPdCbTGE5tslk9plLy4yUfc0xNaxPMYGhsTNWLm+8zNGdB0W85LOQ+MceMLvDIbIOqkPtzaUEXwEN2ZGLJvaMjqAqXEIOulO+1p6BoR1oq3FiBSEQu1egShFOWl18BsE53HMTj8G2ndxzLgrOJfK8vf3mO89chH9jTq/Nu7F3Ku4a3dU+scsp1W5CP1zhigaWgN09mL+hrqDSd8rUsyrIHDaOysAb45l7O19x8SRIMaMaB4kahEF25BEmMbTecnCng7vZfgU9Q0yNqpNLZ1QN5vaGtTVKhCDXrAZFnHLWWRNGPJIsTwsrFimRxDIAV2mT6yLipsRW/moaNaxnEjg6qiTdtwfZN+vIAygO1z3xM26brC4QCe4xHG3P+CXxAzcEZXUKFlhHMJ9StgeE5aM5HGiKd0NMZhMaoLt8mb/EGlwFwlALwG4eIlPX+nrnCIp1MYjQhEFVJ68sDMAkjtlVOrleYo7T4asOh7Hr6PmdQjbxO+fhSMW2X1q6JP6iNOGnZ6TvEhzUXCkJIG+bcrX4NFwvWv/lbOZ/u1/iVib8vuVEQQs7BRktsvvnrHCeVFrnxs0vEyuFtWnBUubnZ8AJdnBI7e7bqIhP7lkxcow0Nt/fSyjuNHifr51OXzk4wkgWdqtzDNrDKgUEUMChOL1zSJkNsbDJdfi8yPPK8R9Nq6kblFAyD0Ao4bHNc5VnUccghayh+vaMI5Vp8OS45ZjlmMBCqgg+9s0l0wRiWOJ8gJQXZPK79zMeqYamsW930sOYa6/cph2z1/VpfRjfUbU8n5Nx1q5qF+5LC2LNTxLjXDxdMDRdN99h08hIQWsTy6ZITp+e313J90vURx+zQ2g7fkPPZWAOGYxB6gkaxNPxQ1gdZzXf9uz33rytCw2VdSQOnOvqYvs3M1NkpT6hvayJRc/eQ81Tl2fdOyfatwZPlmuNB4Z2Oa+x9wFVncJ3LAhrRFWBkhO4MXzXpG+Oam3bAqht+puh6mnJPbpnon8C9zQ5SifkTg0pYaIP+fe7USgRt6xCNFQIFL7dpsLyIfbWir+V6dWVOpQlEs8dW8z5sN3ShTaDp36NLeXVDr8MMQa1QX0a7wtFcusAk3SulvNUxrJ76E0bRr377O+yPzDSeQdUJyvqIpaIIkeFQIuhIsBX02fnLSyxNY162tB+DDe2Odkhx/IiTpcqdWTpD02ONLRXy2dMkwZ75kECrIklma+AvZjRNy20hFbleFLy/eXwJblufULXceHOP9+mWY54TfOTn7AT2UDOeTnBixZVa+bwuG57NB05nqv2pzjnUOefTkIdc6gCRlvRah+HY5Ir6yOyhtjUGK2Eyl3/P1H12ZUevCY7qbFem/33a84dyNY2pbt8Tuyq3n1sEZzone59qLde7OlT84quEvl8QjvJMnbtPmM594rMzNFWAVmgjq/uaxcUfMmxlkc5dds1NnrLKNCxf6lTDhKatSUcHW1XIYuoEjsHgnNCqmpTc+DSi1Ef5yUsw0ExKRTwr9pL/T/M0EhVu2/cp+77ECxwS1Q/0NEnYcSC0DUyFmefbFnEYoacNnnJ5A81AH3rGsaBWsEKJMWKOBr2l4ajfGk1Hm9eIomRjqz40w2QWPK4A++rl1yS6jlDku5bpsj7seegGeoVpZ5oCs+0xhw4tlH/jeN9QBh6hN+WwkwevKN+x2R1YH9YkytJK4pjD5oHDMHCheux6u2fsbCpjwFOl0Fpi4jQuYTij1aRl1LaPQ2B/++2vOX96xq0rFUV+yNAMQTR9zq8UzNu58Q255zOse4ZeeYfWA219yv/0v73HmEplPItDytLj5YXGA7Klo88sdksPzTOJbv6OHX2MTcr9FHFU6Cv2AXtwqA2P7CjDsO9/s3803mLYMugjs3DCoDbdxDehC+jaARQWqxVFiMGj3ucszuReuT/25HdrUgNmT+T44iCi10twQmo+HryQp09/zrvrt6x/p5B6XjksLi8570oGpY2cyEW0I/f7jGr32MsGmC6f0rcrxipnXUsDanLmobcV8RS2K6lQ8/cpa9vn/rBmMsh5ujs2jP4thuvRj3Ley+1AFgr0wKZR/X+iFRxuPbJ8zZjJs6KLhKFt8UMfbyFDqfpQEHct13lFeXyspN8pyDn0PedLg7tVTf8R+Fe8IdU0Qs2kFErJLCZETQvHLf32YyjIRJylvL/L+PbmVwC8miwZ2wnfbUsmnbylwnaJYfTElzGDIfdPv2sp2pRQwMNKXoJ/+vSMeHaJv3+Me9sob84cNHTbxNF0crX+dtbieTsKzUBXTtlQtdRZxmpzwI8VvqYZcPx2TSUyfGVs62aLbQboQ0OiUEpaNAw6PM3AU33LhjBoqwzHClE1anRViTBctOaxp3K/OYACszdDC1yDwYDnS0kdFlkJVV5yvz+yPqpePzr8qUN4NkHdx7TCoS0jLr58hqUiH0OdUtUtzbHDUDpg5mhoVsZuW6KpwpflsxDDKmmygo8dXll+5N3t+0fj9ZPn37fw7OuGskm5Xh3wY/mZ5zro7gx/ouEdP7ZgDIhGZ6fZeL6iBNsJDocSbZnQKpSfrCuINQMzcak/MsE3Z/jJyHV7Ta36eP3JlHE0OBJRN6pwqe7Zbj/Rnnbq0X1jc60AuY3DHYFpY5+Y+FcK5aeocPISTbTfc8M+u0wQombf1fSlgsr0ZzSxwyAarEQar56zxK1MFp72fUUz/RFh2kz9Ob/4pVxHzXFJu5EmXXFQvZJ9+JlK6bN8ls/yWT7LZ/mk/KQneP2wpWwUs7ymoYuAujZA5QmHUeCZJngainyduthh1R1D22OrHhytzAhsgz94dcWgGt71VoBeklcapiJKNZwA3xM0tU6/ls/N+i2G1uK7I7qyFBpTkHwiOavNTtGrDH1QDPTZFuqWfXOkuJENoOY4Imgph5JQ5X/uiw67TsAdaBR2ZtYdCIIpSbGkUYntu+2e+zdbTC/CVtiltqNjBGeIrmSjciJh5TGMHmPh4F9I1z3SHofsElEx7DfokWK979aczF4w6AVppnpbHhI23GK/WhKqsN/b8p7qoUXf7WnWKmf7Iqc+6ExnCx50GWqY7zVe7wd+827Ni7m0+OL8FV1sYTX37FTIrLn0OLVTTs5ecKEs8tK/fDTeMADfc4kvTr8vo6/sCi3raY8tuZDzNJ3qTKMFhX6JrXiolkNHfhqx3hU0hsxXBU6PZs942ByZ+XLuNFJ22weencc4qok4noZYlobRGYyXcg60hwfcqcezw5Hq04AxCDHBCQoyqyFX9p44Hpi2Jno441TlIDTbIC0Mel0wzBTu6r6ii21OOwsrljnbVS6whUvQp+SNwphNXGbhwMPRRdiyuGcSD3S9BU1LoErwW2egTx8Iq5rSfOwJJqpkXugWJ2cl/uDyoCCNhvKKaswYNIEnZP/mMr1ia1hME51J+VsA7NSgL3Os8QMXCvXDXY6czjzebt/jKUR+Y9SYxi6xtkMzZMShCV0uZzGz9ym/uJCRj9OXHp43sNEeF8b0qshE6yIct2MmbPRQtU24I3mW0WV7ek3h+IZA1xM4MjQO4NQ9awF+beEG8v3HXmB0DZ7loLohmDo6nmXg+iGonsUur6FM0bQKTQEl274NHVTd4/n99a+/QQW1eP7FK1xhUHQ57VLOSTAPcGOfRvModen5moHAij0mizNGVfBy3G84i5Yk8xmjyjX1TYJep8Tnp4yFfMhQtwhq6rwlS2Woe9RnLBcZQ29TKWSi794+8GH1GFB9lebcDDLy5RotYjxghBbFg1yv0TVpphoRZ+iKNac8lAxWzr7s2d2r9Es6MIqCejthUC1MxrTh/iDZYBpV4GUNDzC4VE1PqlpM4kPKOM7ph56VAoLuDQ8jebwfbt7u0AwLS4X6i6Zml66xdw2mIiV4+uol2eaa8rhDD9S5sKHrYxYGvFNFiVrkYbsR+2PGzYMMFZcIOm+gGjK2G3VfaIL4cAqh4P69zFuvdkfOTk8YRcqtqg1xgn+JglDyk5dg22d0qpyzx8K1XfrRQldcc0+ikEPTkY4CTTWyO5nFQI1R2lgqzGdikMymBFFAoSqhfK1l00Fg5tTqBtX0FK0yIcsoFRCr0AeMYcAcIkbV51NpNXn5uCLQGh0GqyFSQL6+59Pj4JUPeOeK/++QI+oWoYVsFUPGelMRTyIMu0OdY2bODM00iIYZsf61UtAAACAASURBVCpzPe6O2GbJ2cVLkrn8zCgqxGKKYWr0HyltNB9HJDSOTaN6ajpV1fdDEeUNVRhTdwo9QXgYd3fsvrjEN6QiyqyUoerovvvAO1Meummq47Z7rpsdkSsv0MM/P2J6FkP3lLWqvtx9mPOVJTg1O8xCbtzO0bC0PYYuiBQtzWm/ZaqdEYoDvqOU5/bxeBenL8gODSIzGGz53GZIMPyelbVnHFVfkzOHJ88w7vdsVd6V1GF6bmNZIe9evwUgeHKCf+XTbHaMsfyedRkQWTG6M+fJpYJ50gy2+wyvKDk/laDf667F6dd4/gRHfwzwDDCbnZPMZxxO9mgK0k3XU7SHI0aeYeoyTFO6Du+zAncosS15kaXLOXYUkBFTlgrNn5qpGXLfd8w/wspZl7zfFRzzDbFqlh+6AD1w2T3kbHbS+DJw6GyH0p8SOI/z2X4slWcmRkzLZb5sEIXcY+m45bnns7q9plT5+LIvuAochvGB6iOEWWQxpO+ZuS7GicoL24JhdsvPy44iTNQe6Cj8gp3bwE7lsOo7+nZG9VKni2QY6YGe+d0tInwMpp6odIWpD2iDjhuEXPoKLFsIOjrK0cT5GFsLE9ymxcPCd+Uz675l6cWYU5uZqrYWQ401mtC0tKp4InJDAs2HdkCo1ElTDdTNgFYbJLZ8r9FsqFuDyHy8dzfrAtuRyvghFQS0eLZNfpDfffB1bMNnNEpCBdwwmToEDgxjRnlUoN+NzujA0B6xFHKWY3kY5khRlMyv5Gf725zVzZGeHkud0SzNyMsCV7coFITd7399y8PdY6qqXhwR+kfQbsFgNeh+zVLVIgirxCkLDuuUnft3OibdHgkmE9ZHOXeuMYJRkXZHzlROdDYLsAOdN797Q/cxztu5tLcZc+sEoWjnivrAgIFpTDi2qgd2OsWLH1ff+pbPabTEVGAjGg151ZMxkipjoasbgvgZVu/Tqpzo+82Ovus4PZnjffFLAKbxiFs5bEyNev2xR3vLRLdos56zhSzcGQ2D1hLkjUapeop1Og6jxsy1OFHsEZ3+ib7GH8hPXoKJb9EpnkB30LFmFqEwqXvFSxbGhP4JZV8w6nLxA0NDG2L8hcBAxe+nDp4w8cYKR11QZmCQdBajFjOouHRdHXC0keMxJgildST6kShwsEc4pFLZ2XlP5TzOA0V+TNuNNEJVPfY222rEsGy0UWHuDSMVA6NugWJCSBKHxZnLbOLSqppu0fX0dUZep1ia/KzvCuIQIs9A9PK3RS+wspKCijRXFB+1xcye4s58GuUdbraP8xT6UwjWO6YKCkt/eore1BwKh1xRNZWewG0O5KOLrVBqouYIEw13NSVUl1vpdvSrgrd31wSJfP9IO1JOppzYC0yVwyvKlL7JeDqxQb2XlumYLyecagUP94rcdfK4wm4cQsx4ghVFxImCw8p1rMFiXSdEyjmfGRHVfkA0I+Eg0WGO7gNGP2d5lTAojkEhBsZuzp99EVMIVUBBz3JxQeXkVKoHPox6Yj2mcx0ilRMLTyMcy2G3zbh+/ThnBTCYIZ7rYQ4uhSsPndsl1OGAXptUKhLA4GPHOvsUCkXfpLsThgfYHlK6RI5t7EzGVjBNHN4pZoBk9y2ObpCV0KeK686u8Bqduh3QVNTE9eeIrucsiLFVjvlHYsjDnr32cakZzZaLRCrHs8RidxSIpcPUlwrAm7fMnCnVasL4VE7UzXcfcK+e0jkZZ+d/KMfSPZDvBcbc4sszOb6tCeMt+OMdpi/bJlozwRcNw6HhkKm8/XnFKEYK8WNkJoCtqgtwWwej77FcnTyVF/7Y2nihzlCX1ELuO2sn6EcNozdwT9R513pskWK2FuJj/5MmGNqeLN1jq98e7ww2+gGtrtjn8nuGnpPlGR4LYqV4O9GD0KiyxwbyQ5YyV0UbRZ/iiQjd0jGEMrS2UI8VnaXjK/LZ+STEtSxMU/u+VSy+CHATm5PFjEZVfQ69YIxctmONqS5pU0De7BB1h62qhtu8pchLNOBBMXOs0iND/gl+vqVPqz5v6hJ7rOnNFt2UObc4EqStLBQJVfTGHwumy5j4NKZXlaVl3sMomESyehTArnIiIdBmLQ9b+Q5N12L0Nk4ssF21Pz2BGExcd6RWcHVTz0VYjy/BrDEYPOhVg7/pWziGw02/YeyVZ+74pJZBV0bUqshxslhQtIKiq5mOct671GJHhed4fPEXfw7A87xj2D/w1R9ooMv5fFjvOZkumV9dESlv8x7BXG/otAZNeZsRnzaSP4o2jv/yW1LTPgUN8Fk+y2f5LJ/ls/z/R8Zx/HQfFZ8LYz7LZ/ksn+Wz/D2Wz5fgZ/ksn+WzfJa/t/L5Evwsn+WzfJbP8vdWfrIw5t/9T/97coU+YtkexnjE6Ed0RyZsu95Cf+IRNAaOkAUFWrWiS8D3LxhKWdyi6zAJYobR/r7qs25h7nkYY8FtK5vWPR+ao4GlDyyeyORnVZqMjSC5eoKRqmqpbgBrwn/y7zz/0Xj/zQl89eqKJJGI543mYTgOi+dP8RVVjWGazM6eItqIJpPvdhQD+3JD2xyYK+ofb6rjDA5jUzBJZIJ1HEZ2N7cUfkhWq2pYYdB2HV8+XRIrFJubdzl31Ya0XPHuNwqlw035p//z2x+N99//b+5pqxbdkwnhoalxhYYRW99X/DFWLJbPcNwRU2Hgxa7DYSww2ux74sihB83s0IeeQbVjmLpD5HpoZkShKlDTvMPqawY0BlV9lqUHAt+l7ltMR/EkYvOf/RvRj8b7j/+DP8U/PWU2TXjIZKK8bVdYQ4qwfoalyfe43a85ieeYyRMSXz7XsEZGJniGhqsKaA6rEd2uyNIDiZpjLfSpfr/DGbeMkSIj9UKyvGHUbHRfFotoeoJpagRGx//6f8nG8P/8n/ztj8b7X//H/xYvX70gcHzKO5mw361X7KojVR/iT2RB0vP5DIgZpwPVXpWCawOnwTmb+oZeYUkWG43pYkkYhtxeSySLwgAtz4nnJgcFCWiWA9uqZeg/sEjkfHaDoKs10nTD7V4WkPyTf/bu+7F++y/+EQDu9Ct2qz3X25q+kXvglXfCm2OF7ZZomixaKI09q3SHOAx4aquYRk/eb7BnMRNFPpvlLp7pk48FmiLp3ewDAj0naK3v2xrKqOdpZYLrcyhUUYX5wGjZ1Ktb/sN/+D/8aG7/tX/93wbg6fKE7NBx36b4qvDkq0nAhyEiWvi8ePUSAOu3D/wLDCxrzqD46Mb1B6ZXIXreUqhG+9tuw+mZxcxecmw/oiwdsLKB4k3KrwO5x/7yYsYxXuJm77BaeQauyxXFbsf5l0/4H/+r//JH4/2n/+y/46gqQXXT4Ki31He33zNB6A8Z3jRkX0OhWiwiodMOBWVtMHkh303fBjijxrY50NaqWGTQabyewehBV+0foYlmWgxNRacg9iLXI56d45yZDAqP1eoENw8H/uF/9A9+NN5/8O+dMb98JecpCjCud6xHn0hV5hvaGbqnIQyNuSb1Z6db5F1Pkd7SW3KevP3A1jhg1RGzqTx4u/QBN47xQxNdgYhYTUejzzk/maHgftFynTtTp6oODIPU+esPt9Rtyn/x37750Xh/9at/TtNVdB9xi7OS1hDYVsDYyXV0AodjmaK3Db2qEC5LwXa7x/ekrgI4nwdsu5a+MBAKmSkvK0zfRtCg6wo1aDAZR0FRDPSDrECd+x6+bWO4AbNI6pSnzx4ThP9QPnuCn+WzfJbP8ln+3spPeoLF5lviE9UPl+UYHvRajq4am5eGh242WHqM40mrqDvodOTkze+oVY9Yp2t4DnDcfd+XYvU994VN0t8ST74GwGGGf2ox5DV9qQBRx4bJfE5+KHBVk7Ue++zuHzeYTuMYx5+h1/K1Bi2m6hyKb/ZoC3nfzyan2IPF0JfcK/T1Y9VxdLdMXJtvjtIyCt5mFK5LEnf4isw27wYOq5T4tMVQbAODPTCZ6xhJzPVOWiO31YF9fmB7TFmtFbJ+9Lg4qSvvcZMIQ3nHgzEw9CVe72C0suw9bzviMcDOYXOU7zxOA8QupRUFlQIpd1yTMSsw3ZZGgWVbkSPhyAwPK1FNy13LoUwxhp5BNS0HzpSxr9je3+F+bAeoH49Xe7HEGeFgRMxUE/xDv+T07Bwr1WkVQO826BiHEbMZCZfScxFVj5vPGFyHURUdzwKTsffZNX/Fw520jJ8s53zQaii22Mrz7+IDx6bCCqZMkNadZwrswcSPfb569WOP9aNcvPoTymbDKHR6X/a6LV7MOfwuZ7QyAk9+tk8rRq/Gq2IGWzWU+2f4l+d82X9BdZBRhOq0IXLPGd2KrYKq8ryQcLGn6nLMgwL7FQ6vJlAcnjMKWdIeWCGjuWQyjfHijwwof+cJZrUs8f6wuqdtHMa+4qigpd40Frvsnv3fHhGhavx1ewYx8NAUJKpHahqbrBuLcJexVx7oVJuRaUc29zWWIovt+pTy3GUyeKRC7gF7GGinUBcWpSXPRVVZBLaOHTzua1znyluySoRlMZ1o6KY8Eze9TyvuGW8F2UJ6M9aXXxF/+5rX2w3Pnsp3dRZwath82+e86SUHZvU3PdvdFOtly2KU63o50fCmNdm+hUGdCz/Aih64/naLo1okxv7IsV4x+38e4/T2eUfZyihCuhswPFjfbAkVR+n+cId5HXIYMpperrepndBW0Js14bV0j1z7QC220IycKwxLbR6gjzptqjHacr11YTPzJmDb5IpdI1oMJNHIMJjMFLffrh2wu8cl/P74kkatjXmtcRwuEJ3BqOAaTXNk5kTkhc7xKH9vnPrYUcQxTdFUC1futRR3R4IxJo/lOuqdA02BIyLeKDCUUDthzDpOXZvGVzBsbUDVCsq6ZVTEuOWhYzJ7DPyRlRr7cktbSP0+lmAYATstQ/fl961uSlXXVE2H1cs1yw47iqLDNgNy1QJ2k2oI00czoVBYrJXlEGk2wsypS7lmXmjQdSOYNZ3qMin7mtKtmPYWRaOIkLPHjEM/lJ+mUjq+ZbySocXLKMQoG36bregVysDkKqYuJph6xqDQ8p1Ww7socIoF2VxNVtsjtB2DXqIrl9wvOjStodwPhJ3cOCMJVVkTtBbCUIzXkzmrekVsnBKo5tlKtznWN4/Ge774Att30BTxpOfanBUz9lZDoEB1jdTm4XqLqDr2qkm/DEc6ISh2JZ0mL6QVsul/mx6JVAim10ZefP0cw9IwBoWMPlp88dULjFLnr3/7vwBw2FccqweCvmM+kYqhbh+jzobuDl/0jLY8JIHhkFUVzfaG8WOYJs3I3pc0A7S57CUz7jy8yCQILcZGjuPUC9g37+iOA63qmWkrjZ6RMDjF0BXN0f6AKxoEPbWmQqnmjsD2GKsN6518/+4TYASRGxLVBjdZS9Ur5gI9oO8caqsga6SR8oXtE82uGJsQp1TUL13JvmxZhidoKOSfLqRpa2aTP0FTF00hNM4HeKgcSluGkptqwXxxQRwDQj63TSFOBLoJQ/9zNcK/+tF4/emS27ce73cHDIXQkfgeXWLg1KeUlqID8sCyPDIsbE8aC0H8ipttwcnFSyxlLIxFzZ0+MHdqulOFtLHXaUKNcWyYfOyBfTYh1J4ze9WQ7+U+bvYlW8tAlBbhbK5G+Hf03DepRKXZ3H6H9eyCZvaEZpD9j7Xd0KRzUn0PCow53U65+vkTTps9RSqV/uBNMOrvuK8fOJvIPVDkLeuHG+5vO568lM841Zfotodr26DIcXdpwWqX0dc1nmp6N7SWm82en3+Mj/1AQqW3q9WOk2nM0dUJdPm3Tuan5Nc5hbOku5eXlsmBD8YN3/72V2zupGH07KnN/cP/S3Hp0ilj8dvuPdG7U/TexDuV32s0j6HzKQeNPzcVw0Gu8c3va8a9iaFwLQ9mh83Ib7XHuLdVviF7J42UVHNoopDdqDGqXr+m8jgc7ujaDdtbuVfG7gPB2ROwQ0ZdnosiNDA6AZUOql8uGAOGNGN/+ECosGINw6Gb2sxCD8eX+MFJLLA9B7QEK5ZzNYgD+ieotQ7uhIUyKrrzKe7aIprpTM4UKpMzQbQDWrCmDeQzWxFwMg+wDJv1W9VP2I1MlpccTYte9cvF5wGef8k4mrxs5X43RMv8WUD7bI6+V9RU2g6/q6g3Gtko591eOmjuGvj2R+Ots5Sb65wWRdnWakznAUQhpcJyddqB+8zAs2BUeKqm4+DpHr3jEShErHLUSHSHnIaBjyw0PWlrku0Fhuop7YVD35b0g8bofXSaAoZ9xdHTGDvJTBJ5Px3w/MlL0HJz5nfyIC7OBroJnGwHauQLeE1IsJxiDFvaTNHIND1n+ZKbfP19g/iegVPDxZq1vIrlgvXeknq/Jlx2nM6k1aolBhYu467h5Jk8sBg6x+uAubGlElLJxjb42WO24Lq1SR92JKG8aO0RrMWEedUyrRViiquTVwa+P2VULAVtmTIcfLb1jiRSjaK+hei3mMacyJNKIBU93mSGbidUe+WVNaDlPTUaC1N5Pdqaw+6abMzwThW7xiHhh5Y/gOjWDCLFV42tlmviUzNaDYFiUO90H4OaNL+hVCgujuUSihldUVK28hAfXr/BzI4k51NMZVkWoqdtGlwtoVcXvlPXWE6BVmp06iJbHe8JPZe8yHACOXfCeGxNt3uTlUgYTA9jof7/9nf8/u2WyzGkUx5O8MUf4ZgDNzcCfaNyyjudk/mcwbSwFf7tPhfcH7fE/R5PHZ5D1vPdt6/pugfmF9KzHNye6kPP8qmgauS7XS7OKZsObWi4PDl5NFYArYlo1hnroUFT/Idp31HXLScvfdJUtcGKGscM8YXGzU4qykULk5MXjFbC6Mi9+KHaUB9/Q70fsISc97ZvqN5/YJfeMLuQaxYZM9bVgO5GeIpd5bC6xhkddqVGkjz2steN9FKuzXus65Zw8oLeVHyXY0dm6ewcnTGTYxb9NQ9rh4tzn3gpn8shw7JPaMWR9x/k/qzWNXeHI194C7xIHvdGOyJyjTzucPZy3h88DaOtSfceK/XbhbMl3UcMf/S4Xbi05Xd+Hv6M8EXCkLX8XOV1c/uUPhD01yWDQvK/O7NwjlcE8QZDsbJ8e/eGoa1ZFl+CkPvu7OWSthWIY0mXygvUCS2sGtA19qPcs9ZO5xfehKPfcXwrL6jAj3D0CvGJjrAu23GrgLE1x8OLDQJstgfFhG52zJYW99/1HFt5zup9z1+cLZlMTuhU9CL0Q0RVk1s1ei9/u7vtKSwPrbYZCvlwZzHnyeKU1rNB7dlRH7EtB911vz+346HEekzdyeCZ3K3lu3raAd84JR0Eh7+VEGzf2TckfsCLJMZr5Lo+GCPFqqcRGpEC8i7MkrptqNIEkav8/EWIPzEY0Kl3isfR8xBMmO5howzhqqno+460aBmUwbwwz6j0OfC//3i8umAIPXrlDI22Q9rlBGWIbkvdKzQNzzFpdR0VOER3XLyFgdlBqXLvpmaRayPH3Z5h+AisoKOPJn3VIgz5vWqw0V0TQ9cYOvkefTiQFS4LS6fX5dlrhn8FT7AsM9pRhgffpEe8vsaLdTRNbtgwyAjtCfvKR+9kCEXYex7GCfXEo/ke8QOW9iVukHKuIMhuKh2jjvCTETHIYfiixBY9ZW+xuZHYmZb5hNFuMEVLqtg4u/1bNPP4aLz2+QtOFueMSqHq2s/JOxt7bKl6xf9mebiDzjgWkMqVyB827Ks9g+NzoSzok2VMuRWIShCdyTH79UDfVvjdCS9Onstn9EeKCvSi4vkfyM+MdxNurr+hcWPObXmB7qxP0HkcN1TGAOqA9UcNw3KYWAZChUMdf6DLW5K+Z1SwR9Opg+h0NrsUC4WbWBYMpk1XduTIQ1x1OkV75NDcM69UeGSssFYtXmQzqL83HLd0g8tpGPGRuMD2+sfzOySkeo/ujkQKBaJxYs6sEv/8jLSQB6BOWwbPZtq1XG8VKo9Z0pdT9PuBg+LOe/fhLavhhsTysRU+5eGwZ7MpaO0OP5NzcBFfYeomxWaNpcJIbz+8Z3RM/FIjPnmMZQhwd9dxs28RhYm9kIdY0+bstHcEnslEeWTtMcGsOt41gmqrkHr2OpE3p6Fig7Qoj/079v0Rt0jJbfkOWVOT5wVDpjNuFc+m1VCYFePtnE6dsG1m0OUHUpEijMWjsb5KnwNQbFoOtNQTA7FTIXcfXLvDdwMOCuFkdX/gi6CktAQ/0+QluJ2dcmYdaY0X5Ct5mVfzlD+0z5k+mZEo2LRsu0HbFGxrAzH4aq9oeP4C3+jZHeQcdGuN4LzhuH4MQ5aYErU/FANuccE5HptSMQiQsiwafpe6eL3SdtMLglmDuJrTNtIw+r+/rUhNF8t1WF5InbKIr7BSg11e8cfPpUc6nZ9g1DV64/JdKZF/bL8lejInOfZ8UCgtXZUyxAbT//Mxf9zmzZG9WlvP3rC+12loQEWIdGdgZnsId0IUK05Ab8SNfWxjIBlUCmg6wTkzydoOTS1u1xQURYbVBDBK3ePuS9p5Tt/4bHO5jyvLZik6rpiwP8oxPuz31M1j9KupHbJT8G39/ZF1EjGsDngKrm7aVozjyO/1PYmiJtMqnW/6Fb2oWCjvst23pINGXr5BV5eBP3XZvW7ZlfdcLqWh6finNJRoa4u+UWTOmcFRdGx2Bc5cvv8iWJCEj42irDVxB4dCjW+0bJpRox4Frrrw9Xxg0Gv6xmA9KCemszA7WHghjSpIasoU3z2SpgdsNTXC0VnOzmksg6NyBgzdQBtqRs1EfLR8nJi5ZlOKiryV5zE6/DRizOfCmM/yWT7LZ/ksf2/lJz1B008xOmmh6XpKmedouIShAm0+9FTGinXV0ynrfqThGStud0c+KMtrqT+Dv5yhjVNe19KV3VYFh809797lXJwrrM+DzYNTE4wWh3tpVbbue35mXvD7WcvwIMOhqT5wo/79QzkULq090Cuv4mkkKJuWbNtRjvLvPdUssEJ2O5O9yq94psEs8vGTGDOQ1vLdcY1W1UQulK30ch33BYEj0MOO6VRiYtpZSHA8kFk261y+x+FuT1G6TC4GDEda87r7OCc4OgP22KHSdRTtgdiewehhFio3VxvYbkiQjHhI6yk0Qn73+/cIZ2CSSMDnVtdoypKOnEwlk8URWq0kDFK8ibT4RFMjQpM0q6g0+f62oyHGEa0rsSPpCVfVY+tpCC2szKXUJsQq2W0w0uuC6eI5g6XaBrKB0AqpJxW6wjZNohmeETBqDgdH2V4ixKqu6BnRp4q94aChazrxMEGoIpU2NEhmId4yYryWYcOtVtIWBmPy6dAtgOXOiOYHrLnPbCmZsR8Oawzh0gwHcl/OSV4bCMPjuC4xFXbo+cWc+NmEqv2Ao9pm5raBszjl4ViB2hNHy2e1b5jaNq2nCHTDkMAf2R8K9FGxTUws/urtO6LawYgfH7tGURwYhkXiLdhuLd6/ldGQeXKBc17gOBFWINflyvwT9CAiCGxGlSfKf7ulHO65fBFSz+SYnZXH+dLi8vkT9I+4jraJZVhUvoGmCG7vd+8wxSVUFgtFyNoPDlBRKdLeH8q5LvfihyHkVWsxOiuGldz/VZ7ywTN5Wl4RXUmv148P1BcRc+MpNw/fAfD8IqbqT6iHG1YPat6rOVnZ8rMrjaqTeztev4X8Be3qgKXO3YlnMtyPaKZNvJYRIj28ZDcxCb9cwe3/8aPxHtwWS62tNepUxZqsHmlUoZ7WHMgSFwuPwJfhdV/XyDfXNM2ek4kMiZvpnPDqgjPXJ1dYl4ejg1iPhE9clnOZ7glPEyxjQmtu6VUOq6v3ZFVAFvaMKt1R6Q6d9ZjloG9mLBSR7TrSGI4ld1WOv5XnxHs5Iy4Fh8xkP6rilibHS8BNJrg7uT56rONbOt+sLCwVlg1Hk3ExJ75fMyiORfssQtgV/pDSqvPkxzO87ZFicc4QyXXstYbQftxysN++hzBh7snoirAjhJajo6OXSm8HArdoaUYHU3mq1dAydWPsyMEs5TwNtYGm6VycLbCFipJpDo6l0+oaYyL1hyM0GtPCNDrcTurZvuwRWkvW5CSd9Bgb6zHj0A/lJy/B3estiwvpti+6J2BqVLVGosCTd9mWaluR1xomUqEm8RWHdsab6w2p6huLzkcevl1hXPjEKnZr7Q2+vdkTmy16Lxf7LCiZNRrzZcyprZTxIPBcjbosGCs5mZXrkvWPCzdWtY2/a9goBd5epFwGF+zHHb4CqX6v54i0RDSCXpObb398TxuNDI7HcSUVj8gKqu0dizOdcCeVpTbJyJlwMRv5sJNTF/QHvHXPGpN1Ld/3N797IO16utSj7xWgbn/+aLzb7MBs5mGr8IOGjt61WJb+fe7LqWP0sEDYJroKQx93DV3f43om27XMzTS7HNPIcXYO04mcz8yBmBmGbqGrENfyJCKYBGhXsF3LfK9uLei6mtEwSDVVtbZ+DKDdOTrZXscpd6SmnJOTic82OkHoFWmrDkfbMeQ9TTunV8wXmjdjOol4d11y840ML84XLuNJQplvuf5GUgR1XkAZa/Rjx9mZVBRulDB3HOz4DONcHtoT3WC3HslKPplTATC1EiNIaPOMdytZVJTnR4yqZ3tfkKqQVOHPMfqU1hAsn6gqwHikL+849tcYgZwL5/SM/O6WTHuPUDTq7vKSs67g9fv3TGdSUR5LDdcaKRuTRFHwzJYx55NXPOQp9ieYz1/vpAGxX2UcqoF2aTII+WJHcWRuLrme3hMoQPL4IqLrUuxwxTuVE3tfHzh/5mP5AakKwc2MDfuqRF8X+B9JWrORtNvzRfQ141wq0G/WIeu0xo089FKubaFnmMcI/yp5NN5++qcAeP177LDh7HSGUGwBZTLlazGFvwioPkijJXBeENYjycKheFA9gbMH5oaLn7zkqC78Sv89i4uXHAuHr2OZ/6I8ZXf/AX9h8rUpz1i779i73/KkmpD+gZwTq7jnSIQtGQAAIABJREFUxcHkJnq8IfQcpor4W3cc4jpje9xzOEhC267SaW8EJ4HLi5lijDd7hC6YtiaXqh/X7QvMwwpnckqjShKP1R1usGWW/Bmzc/nsZOozWD2eMTKocGXd93jByGwCw0Z+NhE24/A49TBbBqQoYtxtQe1bmLlPrsl13dy17PwRrTYoVWFh1dlYCE61HsuX76CLDJqWZ7OA+Ync26KxqdsD2nRCr8im890DvWNA07BTqSNvcsEmcPC7M2bPFLC8MWNiPR7vIasYGoNQ5YWdcIsYdQwdalVYqB1SDHNE6ypSlTvUzA7RG+iDga2KvHU9p+stsv0RU6l5M5zTNBZEBp5iAxn1jmEcKRqTRSDHN1Qd5VBhaDpChVy7+tOk2x/lJy/BXC+pbFkdmpyG5DuP6jxBKK0Tz87BtUnzjuNRbpLIOqE4aViWT7lwVYVj+JxSFzilSak8y9fvbuidJcHMZK48t73pEDkdZieIVU7KxCT2HbJthx4qihMMquGxkp6cuNyUGU0uN8Wb2wlOMlIaLWtNbthZPTAZe6quIkzkZ4M7kFc1lrUnMOV78NKCSUJyoqMrNvPd4Zq79TdYxS/RLXlAE9/nsKsQh4FtKDdZnegY9Qlvfn/LrapMOpk8Xgjb1LA0A9tQbBuBiz0JMaqcY6aS/QZcBK/Is5ZO5fWOeUMgHLJdQ6WSeGFn0zHFYmS/kRvbCV2moUORGbiBPHQuOn1fI5qe8GM+RG/J/YDjPqWp5Nxp/WNPsL49chqGXJdbIuXNVV2EpR25G3UmiidPzGZ09xrr+2tcRyrGt0efdd9DltMrWqudW3AiHKrGYa1onTQP4t4n9iJMT16q+zZHhA5/7Bm0qfwsSExmUUe/77kvP5FvBbJDRbuuabSRTrXXbA53WGHIfDLFVMrObS3Wu3tc48Co6FeayGdt/Ibzs4RNKOfkdr1h+kTnZ/OEQ6PY5kVP3RkYZUihuO4yO8PXHJyFi93KOeltgy7q6Y49v109ZmWwPfn3xuiGh2rLk9M/5loxDRS5Q7XeYfo21pk0QM8ii79Z3fLrvUn93d/I9/A67ooJq/Vr6lwqgKuog13LdZeBahM5pBVDVWNXW+altNwXUxOz7al5S5PKc/Hw5j3nyxfc3j32tK++lusa5E94GfgcSpf4qWSucMqSNgFnXZMGslhsef6C93cfeKDgz/9IehWx+DOyh5qv3ZBrV+XdB5/Rf09/PDAt5VpMzgNeCJfObNBdVXyz0fCzNYNvcqUqPGku2ccWZvWYmqhtNpiKcqmsOwYEx/tbBpWPT6YJdP8fe+/xJEmSpfn9jFN3c+5BMpJVFmsy0zMDyMpiIRAcccIB/+8KZCHAYndbZnaaFksWGdS5uXFue1CtRvV4bl1wnNRjiIeZmpKn7z393vcV2FWC0Yu58C2DuKxozYL+IKKK7mVAkXWMZjWuJJt4uhiw4Ax16DOZif/VPRvVKFhtYoyB2Ptu0pPtE5J5SdoIR7DsGg7RKZrVN01+dJX05kCgvyTSNapI3PWGAw1rqzEkwZWmpRmsWD0c6bZTBgOxJ/ylRV81DEYKI6kDGNcah8cCUz0iOSTY9huejMfcp0e2Eix1padkVcxA1WlbsU7yPiIMT9eDZZocq5pMgorao4I30KnyGlUeeF0PoQZUNYElpbgMG0MzqMs9prw/9suaXRjRJjXqWILDigR3OqQ3TFxLZqHqHEsZ0Jk9SByIbmlocYM7NCEX693UTwOmn7afPQStsGP4K2kotEuO/pa8yEhNIb9SKD1t3uIsL4kkAOTd1Cf5U0l9eGB6IT7g5WTBY7tAdwyKTniZG/2f2FUhaAq6FLI1jwlxlXGoWpA1cWfPxsRBQp+GFNKjMvBY6adGutIbno09dr2E5GoN5dMOtXLopeeldiatEZPERy4sscx++XLJ+zzm7uEN48/Fpq2jnvP5lOnIxJegljTQuaclZMWsFBu5K3LuH27RvWcEF+JvvT8ldG+4f3fkR/TzwJ6c9Dfeb9F7aCQwSDNVyuORyWBOIw/tRvFpOhPTsJgHEvVatvSWzbSeUpnCABhGT29ZGG3LPhVjZ6gaZZRg2XPMSqI+U43H1YZeLXHmA/nejioO6fKESoKFuu4jtUu2Q1x0BNML5uci6jHDlsHyOYnTo0r0HduKo5UQXHjEmfid47fstZRsVzGaiWfrdU9YHFGaD3hjWfvjBJhmyHSh8+KllPkhwelNktsNpSxhyVWPMrfJtQNKdZquA7gcP6M8XhOXHe5E1rpFNfu2YHE2Y/pC9G1zCFGbll2+ptLEs0r9SE1BPrYxpmJ+lrZgqVDtik6KjIY1ZLOcQLdop+KA/mw+Y2ws+OGfXrM7CAfHHJm4w3PasYq9OI2sRgvRl7464I5VtOEZvqzHfbd75Og70GckjyKVeN9qpOGKiR/hfS7WVryqSOt33N5fM+0zOY9jnl98TV8bmK4woAPdZ/VY8/jhe+pAGArPHeBrKk3Vc5wKo9HWFdcfHnEnp+mktBfz8NzxebuOSLQdZiHm/+ZNwS9tk+yXJqasTdzc/hHL1/n7Zsx3EkGp5GueOCaP5wsmRzEmvrZnavwbdtU1fSEyFUFjM3xp8mGX8uS5cFL3aoFVOgxKl6wSjuDuWcOluWe9+oj4jaOwupEyYU8sxpdfMw8rWl3M42fnMxyzZ/MmI+ykKLVjM6xNNNXGXIoDpDhEWBOPydWQQqIyh8aIsp/wkB+pKuEc1soBW1HoygglkQ6orqKNR1A5aPKwKIsGoz3tr+9ccGyEs+QNznHdM9C2WKo8oEceulqQtyZmJA5UvU55OZjRDxIuhrKspVXRL2yqKGUnNQwv/YbeUtkT4PpijM0S9octR3XH86++FHNctxzLju58SS/ZduIi+0spzE+b3pu0ZUJWS4T4ZIDh2lTriF7L5Xd4KKVOHcBRCgYrsYauQ3XIGU9kpG4boDWYpsZASvQpI5/eVqCqUWSpR1GXtOh4usOxkJqFvYU/HKHRCLk8IFVPS1B+2j4BYz61T+1T+9Q+tX+17WcjwdGZx0CiNnZ1ySbdsN6kVFeCBWLimsSaRfiHDY0sjC8KlZ3VUysaRMJrMTOL+3VGo5iYnribuU5bztwR0brljSti8lFl4A4NvD5HZhAIywbue74cLqgjqUZcX6Pe3J/0V7UMak/BK2RkYE6pqgy/t+iW4ry/3yk8N1SGzhHdlFFF62JYLkpW8/D2OwBefD7H6Drm6hmLubjPS4Mjmmcyup8S7URk0ddH7jctaRizcISnvZw9Qbu6YmIvaAuR6tgbH4msLAW9Kznksn5ndaQtVPpzFVf9MeproAi59F6QSnaHfjLD7k32+YZO1mH1TcNk8hSLEkPeJZieRpq6jP0Zui8ikl7pmVo2edVQpNJ7ak365EhnOqithOAfTlM0SQvbsmQZmvhXYkzGy4ZSU5iWBo0EyxymRxb+OeoD/D7+ZzGP1zb7ogK/4r4U/RsUGQ4OR73Ba+X9rFnQWD6XEx9jISIrI/VRlJa3uzvmikjLFJpHlb5j/5jQtqfsQQD7Y87tZkWrG1y2IkovFgMmeUuatPi5iKItUydZ1FTbITdrwVyytV2CwCJ/uOPFSKx3/cWA+3ff8JgcqVsJ2jFcvCdnJFZIKe+Yy7HF3WFFlT7SVjJjoJzh6h3BwmIxOM0K5FJ8t/AWdBSMBh6KKSMNdsSbA9uuZhOKb/3HIuTvzpY00z0TqSzOOCftj5z5DoNSglv6nDzY0uUWk05EB/rZhLUacP3tA8VBRALTIiKuLMbzK3RFrNV6ekO0yan2p+nme5lHu/h8we3rklqDJ7LkJBiV7JoWJdX5d1+Lsfvh+g5PH/D150vMtSi0vruBeuryd4bCawmYezWcUM3ghTvHqkX09apewGzKl9uE/Y9lTaHF9IXJsFK4KSQnaFdzeJjSfUQ6buEuqM7EtyZKj2MrDM5GeIa4T5y8NCFrae//RBeJ5x1iizxeMygfUCXry8i7Qm1z9g8G8UDYoJlxxuxyRBNbRJ2Iyg75I0Gr4pk6kSOjnt5CVRqSMmQTi+ucXKnxJDPMT1vjGLSxsDFLJ6AfzRmOhjxKcdvWSBlOXjBpK45HSQSiO0xrn4nRo0zEGlPVki7TGM9VnFbsz8YC7arBelApDWErw4eEuCzZdgaJLvrbtBGG49FtIzaaWBOBExB8JHTKqxLVddAlD3JnutiaR+HVJEcxt+7EQUeDSmFmS45RpaE3TWbLMecyXau7LugpyU1PlYnxzMIVuuOBM0RXJJNU5KJNK94+HvElhsRScgrHQO1NOknK4RqnketP288egv4kp5P1MevNt4QqdN0FXSRrqdQ5rTmmVu4o1yKds5p3mG/OSDuN83ORWkzTBS8XI35/nbC5FgAAp7PJcniIdnwlya27LmVvhgx/MeGQCoPS3eV8fvmMrEqoZW5XeazZHk/rBF88+YyHqKYdS7BI3eFWFoWeEkqaJydLeR2rPJ9dojniEBjYU878Nef/5hUP4XvxjtrGdzUCL8KSpNKj+RVmd+QmNnl/L+ond6uETI1wF0sWL+XhazkYBDy9NDk8Spqv3emhsvQ8XEenkWTcNipa4DLRVExT1kSWOgvXZeA29JKct8oKerPDLDVUmWa9OJ+D7lI2MciNUtsOVRPhDG0UeZndZXuGakHe56xXYrEPZ0PqNkRd7YklhVuZnpIRrKocV/XoJueEkrhAc20szWD/0HAwxd/SXcNAL9l7OhtJlvx6dctn7pRAn/BwI0AQTdfjTVzGvc7ek3e2Fwa+73L1m6cUEn036Xyq+si54qPNxGK/O3YUUczuPsIbfLwY9mH7SNx1uH6PNZcUcU3A8f6OOm7IPggjlhslP8QPNGXJbfItAIvma16ZNsZFzb4RJAdPShffV1nMW7pK1vBZButsx8tfT1EVceDlm4KbD++YDHtKTYzneNKS1wOerjX64vRQ2b0Xe2p1W3H2tx5R2FLKe9fz0YSwXnP93Xc0jbyz3ZXUVxFNn3InSZAvngx5quh8//0Nqqz/mlQ9UXmgViqqQLxjqU4xz2smjU36RhYos6ApEuLHNQNJQ+YlUwxjh/0R/mGzEM9//0bBM00WnbijBXixCEiOJV6nE92LfTrflfTYTA8qztdXYv79Pcntmu+rnN6Q9Fj2kLrO+RttxMoQv/viucHb/9yTzyfkZ2KuteSBketh9GMmqbAp+1ijj+8wrNO6RjNrUWSKsCo6kjKmthRCCSoprxXCeEta5QwQ33ZwepJ1Q993TOdiEKrKJNF14oucPBM2KrMTtHFFa/qMJCjv4oXN6uEWpbK4kvdaZgZJ3NNW97hScGAwtlGVj1T3V0uOR7EnBjMNz9AY+xblZ2JM7t68J9F6+iKhLsVaXIx6oijGskaMJIOKp5k8uCELy0eRVwmMTbQbBWPY091J9OWgR+9aejUnkWs2WE5Rox6zMhmNpB3DZqSd0hRuc0ArGbjyvtBoeJ9mNEmCacrUbwjWUKepc5RIOqB9ylwLGA1UWunM9MU9C0WndkPyvbApTRoxsb4i7EMMuc/0pU7eqliqwuBCouSLFVlW43sDaunQVx9JN/+0/ewhWP9TSv0PIvrSgzOC3MIxS8jE5KTHjD64ZuqfUScStLIzqS0f5X3BUHZsVD/HMwI+Mx7ZjsUrFU9l/f0HnigDziWgJKlvOcen35eMJYuMZ2p0vUKdbfnwQSww2yjw09PLzuHFM+JlyvobsajGekPvOKTlmL4Xhqy1bJIoh9Ij0USf0zDE6R/xBymBRIEpaoRRNaxuZ+S9iPBeWUvO5i67pEWT5QBxtMYwJ5xdXFAG4tC31I50tWf+/DMGijBk6vD03mr3/hbj1QsuJ2KDaZ5DczTZp3vco1QBOO5w9Q793MKVoB1tqJOWAYrVMbiUkGTVpCtKdMPBnkgVjSzCNsYUVY3dioMxzCNKs8e0dRwJKLAp6JWaTRfh2rK/zamTcdjd401fsbA6+lIs9ntP4aVj0y0UColSzB2d3NUZOg7PhH3mIXe4Wd/zx/Ca/o0ALlwuTW5KhXrsMZNjYOgtx7KlUAeYMsILw+9QgzHWxZjBQHjHXtdz24wIg5xM3pP9y/bV//i/MLx/jzlQGT2RNFVaSaJf8U11Tb8Sz7dHLeYoB60mkSwygb0lVGtu377h63PRt7odk99l4MwpXYkOtXOaUMVzhvy41dbZNbXygdoeczEWazvQTKzFkrDaY37EM52PRHT8fpNQP/poc+gNSTlmefzDkwDz3iEJhAHYahX3mx94fdywCCSJAg5bNcV6UlHtRNSTzw3SukJ76NjLouFE+Wcurr6AJ6+IK+HszMznVIOYLtToOmHkzl8orB88BsOLk/5+/uXnAMS/r0DpuRmPGUjg2t+OF2zcmtfdG7pCOBrG8hmTdc3qy4LhVuydy6zj/7re8VBd00oCgYlzydDw+DAM+J8NGW1XzymH31G0FXYr1p0/+JJ+tmX1Z43No5ifqLMpztZMjMVJf9f5nqOMLFVnhFr1JMeQP++EfRs7Jl1p0rQOqkQI63pF0KqcXVwSPP8RCDXlqWmi2tBI1YN8aDG2a3A0ikTed5sD9OlTusOWRs6ZMWxpB0fKVKWVNlSLDLaHUwrI8QuXUSu+I+h1dD/AVCJsQ6zZooZ4e81suOBMqiTorsMu+h3+0ERFHNCKmeBvaspzA0sWy+/XO1zjinKgEkWCarDwDbJeRzu6qD9SkDUKleFg+BbemSi5mTURVnQaCqpOQJ1H5LnkLY5yTNXEUG10uTMUtUGJK7rkiK9JKsqqI+eAoaqkEuA2MkIczeXK0BmNxbhv+gzfqbGcgNKS+AHDhLpHmSq4MkDq8dD1jLYziEtJlTg8O+nvT9vPHoJHrSTTxABbKQzPLxn7c2zJpRhuOuJYI+iHHLZiwRa2oLUxx58xl1Rqe47c/fkDL5cjPEm/400MXKvnQp/y9JUAQMw6j73e0hgbhtKiKHVPqcfY2Wcokrllv/tnPuw+nPS31XqMRkFXJfuIojEwIFNjHFMsxDKPGI9SvCcT+qMItd989z2f/1uVM3eJK+c3bCeYbs5w4mEnwvD++Y8P7B5ygounjANZwlG95ToKserPWSAGPUkVmjyiTxIUOWG6dTrUab4n300Yz0RdUtZWWDb0RYccJvSyo25L8m2I6srJ9yyMgcYuUkkl1dD2GDJzdMzO4UzChfMWYq1naBlYcpHkioXe5XgTD1NyGipWA8aSC83idx9+EHN/+9fcgADc7RgtlySpQlQL4+E4Fvt6gDk552IsNkAUhlSmgaW5TP5eeKmZnrNLVzSPdwxlVNYZKWGsUac7dFVI7ly+cFGVms3r7zifyFrM6Qy7qwmTiOGPmLlkw27dYZYJx+bjnt5goHN5FtDaHq0mjMchbni7Czk0GZqUpVEnJtNLj0ObMG/P5NrJKfMVfp3RSy7adbfjoGWo5YDWEE7FyD9HHTds9zH6QBxapuIyaAsUFM7Pn4txTyOq2uOLl1+Q9KcX9U4oDsHxfcyDZqO4e8pQOqCbEa++dpn8D1/RSf7YoFmRTgKyZoNtCXBLrkOllpz96ktu/iQi2m4bYQ2uuG+2TBDzvVgOGBotxqzBlrV4zsFnpJ/RGBXHRwHIOLQlujlBM04JtPVKHJSDVwlZusHrE4pcfGv50uNyPGD3u1sCxNh9sRhivfIpoj+xl0TOwUXDeeVT9BNKWU86m1wxdYb0ecXvCmF7XvUu3vKS998+kryVEmbPZiyy/wnn7D1/lsCLLk6IbwyK5WlN7nV2j6eKCK8nYKfv8SyLhSu+4xh3mEuHKut5kDV2G63h2WRKMzQ5KGIdXy5tcmvIQ76mk+VEw+UYdf4Z7vE9pSyRUAyPs+fP6JtzEmkH7x8i6octfa2yWIpDZd2uOLw/zbrUWYFXiz1bajXHIuW47zlKpibLMXF9h4c6YjF4BoA9rjCaCxZXTwkkEf5xdcPLqYfmquwPom/F/R2lVbMKCyIJXNquc+ha9PPxX7I8/dsVqWmjBI/YvviGh87jvD7db61uwcSmktmbvrIZj3VMzSeWpNpKbzEIelxVwzHF71aP9/SJyqGqsFvhMZ/NbPqsIHd0egk+6pUxeVdRHVd0E2ErdLunoiJbP9B24nmmOabsO1Ilx/XktYM/5efaJ2DMp/apfWqf2qf2r7b9bCQ4HKWMZGgUeBZl2vLV5Qt8Q3hP7/sQfTRiOBzxrSG8GWc4xal80rGG4QvPc36A+vMzHL3HyEQqbBo2OE7Ay6XKhbwQHZ0/ZXd7z75e0mYiP2wrR96vD7jBkEsZGdTb3zPTTb7jr1Oij+s9Rwdqye6e9R2q1pKXNaUkPHZnQ554T7HVnEZ6CH7xJavdDZYWMpAVm4ae0UZDtmXJ5UimJkuFKA1xk54ns1cAvLpcc29vmIwbtrGITrO9wqEsUY2aL8fC064fHk/GV8sOzIMOyxaekt1ohFlH4PnoiuiH2mVYikJYbTBl2svuFVyrIzdVklSMk2dmqJ1HHj4QHWX0OQXXtNH9hm0s0nfx4Y5W0UmSFYUmxqRV4PzZJcv5jFQSXr/vf3+6HoI5canjqxnDVyL6qNcaSWPyVPHIbTEf6+sSx2xRacha4VXWaoa+mNJEI3pNwq13FarZY/lnf7nrOzYa04WP2Tjkcn5ny2es3t/RqQXWVKzH60ynfPPIOjNou49LKT3e5PStgvUU3F6kuO6UB9DHHLOU4VxEDI+FyjxruA4/4F6K77IHQ4aOSbnp+e2NEMF9fvEZRlFjWS3bB+GRP+zWzCYLskLFkfyF+jEjLxdczCacLaUM123C+ybGe+KQP5xGKu8+CLKAh9stTVHTNxa9nB/TbAgji7PLBYom0mir5kiWtRjdggfJzZgdYwYLl9uHkN6WhfvNLctEAeMMz3sOQM+QOActVMl/J9KVrTHAv7So4lv2GxFtmVlDH/l029M7qz/GItJ8eqxRfY8n/RWtVFa57h9p3rylbHu+OBep1Cd/OyBON2ySIelWvNMZe1junFeFz+i5yIbkesj08il6XVKsJDxePZBpFl/MFP5JikPriktUvyXqa7yD+N/6ScGkH/Dw4ZQ71DiayNJO0u6BQTqkcDWcRpYnjVSUTqGzYxQZ4fmTAVl55DbaMpIlS6NgQKntMAYOw6NIa18XJeV2x5PzMzRZZ2orKnnXYTuXeK5kQ3qTkxQqz2yDqQSk6DOf8uvTGuJ+VVClku+48+j7Iavkjl7aAPNZQPu2QzdKGlWyF9UjLN8gzmKGI3F3aLgNsacwqnW2j5IIRGvZGwVVH2JrYn16gUKbpezjR9qDjI0GAW3d0dzpvH8Q61M7P6eqT7lv9dEAXQnQVWmTm462MKjMDssTe3vgNTiGwkBpWG+FrVyaJr6lcCgylpKpZ9TqpE5G4AbkEszzYbUjLgJ0tUWVUldJ3pLsQyrD+0vdoaIZtIpOHhd0kkRcK/9/1Anmqk2KmKDDpmKqauzWCdpMGJQn2pJwE2L3LpeZ+IA2CdDcDDdWyEqRl76sdUZ2y+FQ4ku5Gd/QyUc+I0shk0ip9jHkvooxDx2ZJWVPnAmK8ZRdEvO5RKpOxyZ+ftr10fKMeB1yGIr7EEtfsurW2GrDyBYHrXXQidSGvCopH8U7HCdnaCr02wb/TPxuE52RbA/oRomjik2l5x1D/wl11bCLxcA+u/wl/8evOx7dS+4l6KfSNMbTJUPdw3RljdVHqKeMKKYoE1yZbmvilr63sW2dqJGIN1uhLzM2qUJ2FAfKi8UFV8GASMkwJL2abXQ4HrT1EU1eCKdRj7ucsL7NiDIxxmGT0CQFuqYQS3kYRVHItZaFouFIdof5R+4w0/UD07HKaHLJfCG16cYqi8kTNNy/KGu8WDzBXZQ0sUV1J/XfVIOREvFD0TCeyXTg8xFladHpNYUkJLCqijhb4C4NVrK+ynvc480s3KrG6WWxfLmhokOdTuizU3QdwO6wYWHoLIJnjALxzjiM+MXLKXN1RrUUxvhu85bSaJi/eoU2lymzNKXLQ14f92wle47a3WL2KoEbYUjncJ96jKtzPL8j24rfTZUhl/Mlv3nxC840CQ7rHqjqnG/+6bconN5RvJf3pGvNwYnHVGnN13//bwHQpybmKKHK1qQPYi2q+TvGc5soSFmtRBop6x3UomC90TDl3ZSvd9wVOYrxhMAVpNeW3VLdbTmUJRJITH2/JVMLyjfXeDINqZQ99+WRbHcKPFo2Yu3Ecc/2mBK7Op+r4uDV/qyw9Y+cz0rCTjikN3uH63yFe7wjseT6tHxejHzeFzFF+jvxrcqcJHhHq034+5E4fN/rHXqa4rnPmZbCkFdFy7s3O76Pj9S6SK+OjCnfbPZYnK4HJ4VWF/bI8y6IrY7KNBhIOa3rPTDomQ5cnB/V4e2CpjZB66kaMT/fvbOZBQFPf7VkK5GQfbZlak/YVRatvP96uH6kReV8NsKS+AWtzBmNhySpglJJxhjfYTo4laqqtY6ulQj0uUkyr5mPxiSxBJk0HRvumTFEkfJiIy0gsQ4c6hTjVqTSWyUiL2vemz6Z82OddUAUFmwfVNLyR1R/wz7a0GVDDAlw2holXy2fYWsKu7UkR6hSeG6d9HdkLOj16i+Ic3M0JC4P+GHNcCnT6cqBriw5HLfoEnjnj6cUBeimS+mJ+T40Gcewwm4VMqlr6gxnHBWFydgASZjwWJWMhwNMe0gtpeey9ojm2GRZTiUPSyf4+TrBnz0EgwbSvdhMjmGwnDxnfZOS3UnOzelTJpbOZt8yk2nih67l4U5jUO2xGonSPBrk2oyrJy6OlO+52USUzY58ppBKrb0+c6jrIev8NeOxPLQ8l3pgUe8fCFVx2lf2r7CW/w98/9fgjenLM0LH5MWPe1Y1SbKALNZoJLTc1DXyuIRhSC9RS65ec6b4uMaRupD6fIbDfJxh2hZaJCG6G3dCAAAgAElEQVTj7YBWqwjjDN2VmorP5zi9y/GQkCVSXim4YKTDsV7zGIkF40enVENas8dscxyJ3Kx9m8M65Ydty1CisYZTnf06wbUdeilS3BQR2nKObfaoQ3Ew7sOG3tEZuTpRKZF2TU+tO6hBi+uJsbPTC+LmSGdWqBK5qY51psOA5liiyajC49R7ur89cPbZkOamQL0Si/35l+c4ekfaqATyvVmWEN6VHI07Eon4stqYtC/wAhVFavaNPBvfGBCVP4C8x00qmzbtWW1rLOl957bFdJownQZYPwoGKx2zsU2+3XLsPq4i8Y9/+jNfPHlO9O0HzIk4KEpNZeyouCOVTPJmpqbDtmtQagOnEYfgffIeOpOBFRD6Yn1mkUFnNwyVglqiQwe2xyYJ6RKXwwexL5S25dXlE4aWyiEVd3gPD9cUmUUWZ9TtKVfkNpbf1bq4V2OmZwbmNJBjcqSLK+J2jyKdhbTUmTgdQ2VGIy/QVx+OfFuuaKohVSKigxeLgM++OGNQj/j+UUT3c+8pE1zOTYN4JDIVu4c9q3d3zB2V4lasY8+aMfBhKw/Zn7bZl6KgOnzScJVl2NcdlRQxvXEb+OfvOL5aUEhZr+wP/x6VGm1uYkgR2GqwRqme0qUh//hOlKb85mrJh9saX9/xbSURlGbLJlpSEFJL3cm3+ff86ZstlWfgnUv2om8OqM0jg9np+Ga9wjMpa4WnM/JMwkbj9UpqNpLTbV2GA8h1+f3OJdNZi22Y2K64w4uMjruqwb9LsGcSMdr3HDcF+2xHeBDvrosGa+qjHCMWkovTaxqut3ekicMM4UQkqsPbm9MSH7sboC3E/5luwSzW6H0FRx6M2+9vabsIzQXfFVHf6DcTvLdDVv0NhRQWN1KTJDEx7RxFPi++ztCrll6H3pAIcSwUZUro61SPIvMRJD6ddUFORScFjlsa2Jyim7XpDI4hrSH1Lh/vCbwRKBkzS+xjw9AwDJd04IMv+jd356w2EY09xvGkFmGa0Ogx231DJxm3zGDOhdZgjW3CRILSigR9tGAwccnLHxWBYvIaHMtDl86RZX6cTOPH9vOH4GCJYwgvxS+mHPMD282AWDKX+Pd7tiOHq1jh2zuRHqmUIZ5qcuYNOR7E5lxqBX34Pe5ggDIUKc1yfcvMH6LmOTOpjK1ZHVoVko093kqVbifP6cIAr7LZyZTeyKoxrVPqnjxr6bqOo+Td3IYhPTU2HcjfH90WO3DwL0ZUU4EYLW8TmhcO2z+UJB/Ed1x5Ma+eDikTm1SmR85fXeA3FX/a58SupPQyRNpuHPh8JdFc3+UqHw4hI7/g+FYyumzfn/S3KnOcVsXTJRuFY4JVk8Q9uaSccwyVtk9JyxBdKirbixlWl6Pkj5i6ZMFQFSDG0m38RBjKy7Mp3tkZuQauLr7h4d177oqYuuyYSGkd61zhMhiAU7KSXr/LqSHRHYdg+hJzAvNGbIpAD3CNMTOnJp4Kw9ira96uV3SZzlvJIrPZHzCHLl++ekkuuSPD8oDrq2h9gFqJzVPGMZ3zkkk6QhuKcdGKluboEvYlM+lV2y+eU74rsfIK7yPK3ACmH2DOJ3iuAkdxaBmDAd15geI6rKVDe9EZ5GlG1e25WQsD8Lt/fsNXX7yCxkVJRGSQlRvqdMQAnev3stRnvMYZjzCDEaO5MEZPHYMnl0uOWUW9Ex7vbVkzmExxm577zWmk4jli7ZRWhaGnNNUCV+pxngU+H26/5TE6Mp4Lx2/p+Rh0pA8NpiQKHg9bum4MlcLmxxRpr2OXT2nsc27fCnq1OqgpIg1mHV0jDIUzHWIHOvWmQV8IZ8bVFc59m0w7Bcb4X8m03x8binbA6/oDdS0MkXajcXzYMFC/xz8Xgsefdx3qruadPeXVczGv7q7m/0x+i9G1/J08oFabI6r+DqP6iuZLMU7FQ8JNdg+cwRNh0NpVxOBlwH0d0iYC4Da+PPBsYOD0p8ANnZ5albyeqoOtBVhFzFQTRravGj5Uj7TGEE3ykLVJyDZNKNWEyYVw3D67+HcUlcluu8GUgtkj1eE63FCuImqpnXfmjmm3OXmdEMtsZ0WHkrf02y1r+d6WOVl0ig5tF1OGB2EDrL5hN+5QsgE478W3frlkugtobLiS6GVr2/OuK+lTg8FCpCwH4wsOuwOtuUKVAYjuL+jSgof2NVEiZY4GFnqhER/3TCR6WdU1yt0bKm+JLXXxIuOM5Hiabi4qlSaLSCJZEuSbmEqBkxeUoQxWDJuyadhtQs5kHeOqiCjLgmI0wZT8zpbrMbcdHh9jck/W5+QheamDpdJKZ0utNeL1I9EmoqyEvUqVjko32PcaRiadFGKxdv477RMw5lP71D61T+1T+1fbfjYSfPX1kmQrvJ1V3NKEMbPAI5Lih4pj4lyH1LMhjSRcLqMGW1XIy5oAEVXc2Bp2WeGvdNaStT2M33Glj+hTm7FkGll3FSQb2uOaai+8hz/tjpxdPKN1S2aWBF4M94Sc3lPch49s+hpvLLyMm/R7utxEt0yWE+EFair0dsOTsyHpSESHbf6A1XqkakVSCW/kYOuo9kvcgUUYiZTj+i5G/5sFihqzyUQKo+kNfGtO2FrMXonnrR62OKsSzx9w2AnPqI1PL791R8XqoZYRbmv2PD87Z3IeUEkyanX3yBcXZxyPew61vMNTS6xuhVlUKLKusRxmWK5NUVVUivDuriYjirpi5mrUlYgqdmVBoFjoI3EnAnA+muFSoRQtWSfuPvrm5qS/ceeQaRdknU3aSI7AQ4N55nEcg3onCo99XUX1WsJQx5FADq0JGVQd1szhShHj9MfIpEoKni8nrFLxvM31EedwQP+HJ2i16N/gly6L4Alt+sA3hRj3he/hnVnExwnK/TcnfQVoFIMqPVKnPqEsmF0T8Rv1HG9sU8urgt/9v6/plJDKUEgPIvWnlDVxtGEw0Hipiz2QFDplVdPZFzx9JdKIH765xzdqni4WIDPeWjDHmb4in+jkrUiH9l5GWyck3YBVfppe1OUeKMt7ijRA2d+in4sUnKtOiOOOOh4T6SJ993R8wW4X0vQtuozKf3XxlPO+5LvrgqUjgFtTq+bxfUFvbPAzsaaK7Y7fZybXjzAL3gHwxLiiSy45d1pyyaQTba45enMuJAT/p63/RkQv395/4PnB4NwLaD0Rfby/+Z719ppZMOWZKb71+2hMOug5Tx7gQUTM19oNVXOgaSvqz8X/nj0+4/XNhh/uf8v/3oo7zDdBRZhWXGca04kALp39YkL7XzqWrsFI1hOGnw+wo4DUe3vS39pZolfCBhzylCKqKNMDIxkHtNocz93jtQ19Jp43VI8k5ZG0KzB8MRfjqqGqNRLbZinH8/OvP8M0LL59/0AsI6bjY8jUXaCYPpon7FZTKJSdRUvEQBJX20HEx4TAlMamlyQQqZvzcExwtJbZSESkz/Mx9aSnSWKSQmTNVlmMqWvo6oijJB/vehjoCo87hVupJGO0DtfHPZvVnuu1GCvlm5Z2XmJsexp5PTOyTLJ4x/PxAvcrCaLbVPTOaY8P+5D9mxssXUTlXj8hNxSa6A7TE5mE0q04POxRW5NKilIrZc467VBclWgvzoanEwe1t1DtGFXyRW92W5xhj95f0kiwTI1OrxRAgSMzXYatERc1bjvGHEtmqvnlR0b4/2s/ewi22gG9Fwsni4fk0Z7XHzKSXBiiq2VAUKvk7QhHMrLs7u9JNR13PCBzxOTf/vk7RsMJ9WLKWqauouRAFIWcOzrBL2SNmGnzUB9ZRxF/+FbUq12vKoq6w5qruBcivF0aQ+b66WXndlPSqUe2EkAzKAxevpySxB1ZJ5krvAEzx8ZZTlDWYoBTPybvOtyXc7pCbFrdy/n2sKYoWkKp1PCbf/N31FZA6BSgiUNtoA1Q9Ql1tqWUQI6xFxAPjwT7ll4SQ1fR6VAP9QqiHTtZoF1aE4KhRd43aDJdouQRoQOHuKWQyLg4P7Leq+i2Ry7TAJpp88Pqnu3mwMwSB+N//fY7PMfn6vMLtLFYiJ3XYLQ6uuayj8S3xhsLy1Ho65RJJ+Zs0J6mGI/7hjB9S178hkfpGCjhEO1VzeFDgy7BP1r9gavDlL2ypd6L/h0thT56YF49Zy5rJ2/SiPrDkd3oS5xUIlpVhyboOBuoXP1apFcdXaV1CpJtSp6L1J/jB1zMFNZ3DebFx+uAHpMO8yZCHWkEQ7GO53ZNY6kcm5g6E+M5rG1qtcVsCxypuXdunTE1PbxKIUM4Bi/nn6NUGldnz9BU4SyZyZBVZPMf/u8fuLwUzpfvDfn2eg1hRL4XhmeotlT2HHdo8YzqpK8Xvvjb930AZx3n1hSkcctLhyt3xNxMoRMHyIf9eyZjmzx6yxeXYr7P6ohO1Qjf3fyF1i24ctGyHmv6gnUsNQD/WJCpCS8sj9IQa8D+2mI2uUAhRQpukOcWXa0QXJ0SaCc/MtfUDdF0TktAtBdrdnjwGX8+Zp0+ZftGHNqc9yhRR9+5vJVF+6/nG+ZpTa5qXP9n2Q8747E/Mg0W/IfXfwYgUmZUqoJfJzyRfIr3377BOXvK8vMZpXSgyk1JU2+w/NN03Vw3yY5iLh7uHlGGA8ZDFUc6m0ut5VDqkO0wZCqZJuDi4hy3L7mQhB5uDMOqwq16cklen4U5iq0wxCZPRP9U3ULLCnaHitHT5wBU4T19VPLZ+BJ1Iu9FVQX3eIoXeIwqCk86pJsjgW3j0TGqhB1JmxXe9JKB7WNX4orJaSIebq9RhmBLNhvPGJDujlTHd2SSbCSpW9ZJQUGMKYExrRvTRCqeFqNU0iFTK3SvwZ1U9LlIV7fanro5RWN39oh+oZLvxNi7/pCZO8OdKcgSQ7KmQg/GDMc2KMLOHKqavlGwy4JMleolSceZ7xNMAoqjBNC4Jpamk6cppWTl6VsNsg7dyDEluUrdGaRqR2BqlNLBKdWPUB79pP3sIdiEPe8+iEW8e9TYxx7vdgXWQORXDQPqJEYxMoZbkQtvKLntDzixiiE9hq6xeb16oDi+R5GaZnqrc03Jd8BcFnwPr2qKWuHtOuR2IxZA5Fu834S4SY4heSNzJ2a3PY2snImNP9HpJGKyez7BVVv8kUkqxSPtrmcRTOkUn2QlvFnTX9DkLWO1Q3suJsK3GtrAoLy755n0JFRnwPtGZ9t56FNhGPZJR3T7J6osZ5VL5J4/hLwnVBpKqW3mz08P7eHAoe5Kmka8s2tjshpMbYEthStte8pk7qNpR7QrMe6OprAuWrzJAK8V41lnOWEREysFh4PY7NdxweIiJV2bfynsrewJh80d0X7FMRLjXu1a8qnNxDPpcllA3qvwL6JtY1KiqmP05zXGWIx/8NThrNZwgxJVouXi4wJH+8DZuU+TCG/+eXhANb9ETWNuH4W3aGFTznsOf1xj+cLDnRuQ2BPOvM9Yyshi5kIYxxwai5cLYYyUTsedTPD8A/vs4+ivoWHiaA6WpiCvanBGJnZZ8sd379ms3gMQrbZ0ExgUKkMZfTZFw2htERcVO0kt5k1sNMem/k8f2GgCeJIfWob2EFuveKZLeZhQYxNt6OOGseThHI811LIgM3R4dnpRX0jJIbe6pz1uUZ70zKQeJ0bFyijYbFMCKSPzi/kFptHTeAeuZMG3Wjektzv+wf81pdT2sxuDbV5i3YRsdTHG57OE7KjRdw2LJ8I5MqsS200pClA0YUCbwEJLUhLttKTDlOjsz+ZjcvslF1bLn8dij02nPmF6wbz9lrwXRqwdWaRxQnrzPZUq+ESV1Y5MH2Jd1jz4sizDB/dRp+wN/mMmxnPcK1hjh7Uf8e7mP4q5KEv+197G7X9DJffdvniLPgj41dWvT/pbui0DQzgLRtjh+B2zoYcpkdQPm5Inhsr58ksqQwp/HyvMEAYDg6kjSj1Ghs1mF9KoAbVUbHrzn1aMxxrbPMEzxJptBx7hw1vipOFW7u/713cETo8ROGi9WJBVkWMap8Cuqi2ptlLNI/BZ9AFjE4azQH6Dj7LZYY48bMmx27UDAr0nTw3UUOxPR9cwXBt//4yHRti7sFIIRls69TmhITIVE71FK0u67hx/LEV6i46ua2kGBa0EKTVtguqert99fKQvdTxPjJPhTLEDA0NdEu8F8Ua2/0DXjej0Kde3IgORKypn5+e0RslMF1H+oYqJS6jsFscUa6CwTfZRiG2rSAU8jMEI3VHIzSGrnQjMoiZH9WZk6Z5d+CM12x3w348Gf/YQ1NQhB3mn+SHpaK2SigGXkrrKOXOovz1ArtFIWLKzUChag/UhZFyJNIr2BSjXtxzXLb4pjGw0HnAsEvpeI3kvvcXdFCiwtJhYStq0JfjjEkWz8Gvx3nxvsgzOgR/+qr+e3pNteppKeJUz02c6vcKeKGy2MrVmZDw5v2Q80rC+FoO+/3bFMcowgwB7Ieig1vEj0HP+m79hZAgDFXket/d3HGoNu5WMMcqah+0HKBKcM4k+s84x3J7Q0vFlxKq2p0PtYtCEIbr0VMyRR1222HqM4Uh4tGnjO1PsSxdLRofxMaGzIg69wj4Vz920Nd9VIfQ6A1mfWZpDxuMpm8kIS2pAmnZHdziQRgOMkaSl6ipWdUOfKRhSs1A1BsBfo2/byZBtu2V/5zCQSvXZIWEz22LUKrWkiIv9HcWgo7zvGUnjZqUvODZ/5LBOQBWLc6KOqP1n1JMMRypXhx/WfGVVJG3Efh3Kb/NolAeyTcdBZmLm7Mi3CVoZM4o/rqprzz3OfVCdgvVeHFpl1qIfbdZdhqZLj1ev6LYb3v559Ze+DX2X73/7XylXEbpEJX+wSxpdpQpMzLGIyPzZhBcTm04L6CXf7T6+ZzjQqBMNV6LfFVXD9iH9ULM+RCd9jVUJIIoeWZx1ZGHOtZT6ar//Az989z3j4QT/F7Lmqg7Yv0948vKShSYOlao20ep7Ai/BmwljlDQhVbJj2we4km1kcOGSjzfMvCnPp+J55bFE70yqtsSVTEIvjILv6zva+N1Jf6dT8azHek5T7NGcM/43X6zZm+ERe59yeAsXM7Gf3u8U3schk2LKcS0ivLmv4L9SeNjrlFL66XJgYZ4PWetgyNR82s8JNI2h+YL/sv8tAL+eLInP5nTOGusoAG5JaGLqGbU1P+nvyBniygjn5efPOZKS5jE5Yu9NHIdOadF1n4UtVdkblUTRUHAYecJWaIyYBHOa3ufDWhJyxzE9AUvnEm0qKde6knVW0iUp23fCEdp9uEGduqxsjQvJ6qTpCfn2FISGrVJaP/Ld5qzriFKHkSRG9/ye2DtH8RSCsdQjPe6pqjOcxqVfSF7TXUW7O9IuznDXYo2ZVUK7u6DqrllmYr2H/QStes3grMJKJHI1ddh1Gs7rW/y5OFQnzVN08zQd6vsTNPeMS0nUPw5adA2aJqQbiuBFzXPQGo7kRJJFZuDpaGVD1xcopmRc6ltaPNLjgUQ69Lqm8XQ8I97dk8nrI8OyyRQDPXDxlxJI2E4xllc87FR+lBntPpZv/kn7BIz51D61T+1T+9T+1bafl1IazDi7ELGnO7FYFxeYvoUvQ357vyFZTEhUB1dy7P7w+h13u4xXv3oKMj1iJz0716UcNKS6iNKKNqE+aLiLKYlUdzatgj6KaWZLplKRwVMzNtWR+STDm4ko5eKXSyhC+Pd/3V8rP1BaY7I7yVIysam7hNvriKlMufZuTGIsmZUuvgQ8bOyatMtw245eRmXKbEhxt2XXOGiS3HlbtKjBBdH7Bx6klFOYrGl2HZPARkmFN1LjYGgZSnOgl+UPrnkKMzd1A6XRcIcSq6/oaIGDZY9wZCSYRjWr1Z4enbu1AICsthHzsxl537KXgpodA3ZWQJUn1JLXUjUrDqaO485oZRTZtQ1oQwy3+0vkdtxv8NqKh32C44hvGIx8/mUkOBwusFWPKq/o92LOjk8qniku2cCgi2Qt0fFI9bhlpEcQiLFbvd/RpgptVuPLtOHkzOLixRWHJKVXpIL0RUudO5htRBXKNJzbY6s9xcjmzBNjNRupON01zXyBVpzeqQDoSkc5HuEqYFiS69M6EDcp6nqLEYi1+PfPJ9y/y3DHMbut+OZqu4Xfr9hnJee2JLzudcazAJSeX/1CZAfmL57Seh7r2w3NTvRjMFSx9RGTs4CrM6lAYhcM2zFZWKB/RIvGlnydbm6y3RVYXkorwUyPD3vGz65Q6hh7KCWhXJe8aNh8mJBmwjN+Nvdo+iuUoqKSxMNK/Jy2/gbfsfhRYag4aIyqMd7CAxmUWhOb3NVRyiGKKtfKpYZuVMz003RddpAPqzdsNioTa4LviLlO0j226zF4ZtL2Iip79qtv6L+pwW1xHoV33891qnqBZT1yWIvn7a0Vw8mEvlBx5ZpAy/DHLxh/OeXvUpGB8MzPWX7mQp6wkWZsPYzxg5Q+Pj/pr6naSBpKZsaANkt5TDNyKcbKYEKXa+hqRSOBNo/bkFTrmL+44vWNmJ+Lgc3E0ejbnGeSHP2H148c6wLlVczzSvLiqkNSbwjlnlYSjiiuw54p+rHCk9JZiu5ij06L5V1LwZpIIvB1xpXbUah70kTcEyvmE8ZWw5dPXrGciH13cHZs6i1/eLPGKkX0daOu0bsGY9sxWYq7wx0bqqZg6o9YPYo79hEx7XGA2tqYg//G3puE2rpteV6/b351vcpdn/JWL8L3IjRMFTLSjg3tCCpmz5YNQVAQ7dk0G3YVRUSwKYINIRTsJ0gqSkZGpJGvuPWpdrH2qr+6/mzMeY73uu67doV3Zuuwz9p7zXLMMcf4j/9fns/S0FhYGtb0UxTPANG5yfn5qRRYPTRMx5jYU6UzQ4c+ZBgCcpV3nb+8xCpa9NDgXCmVDEjw2sQwCFXZmWa01OKAvtU+gMN8XeA7PQdcjiri0PQ6g2/jjAKtVbbncoHjeaSFwTFXLDI/Ia31w/azl+Czpzckb6VRWNkl24nG4knIZ4p5oGw+Y7HzqNsdRqxi0LnDoFXsRYWnKvXX2pFfFybzeGCqCqUvAhdxbZEbI06jiqz1FbkW0Il73pM+5IHHssqxLYfCVzQ4noknfkKdey6ok7fYKu84WYKocublgFBUXbZvYTct0ZVN6MuJ+/Y3A+vyjsiK0JTsyQt3zt/wlqGwKR9lOCgXPnVW8/3bPY4hPzcdF3RBhqt1GCo0WVg79L7C6zvaUm7a+dlpTPpqGaOPc+pBGtlD3+GKAD9cUI3yZ+s6J9919I4gU0TRD2lKN51RVSXl+0vbCBChQVK8wVA0RedXTzGiJVXZUepyLYzRoLIHNrucrpJOxbOziNh3qcUWX23YvXaacy2GnroXxE8ndEoFWmsdvn+95bP4htqUBiXJ1mhlh/0oyJfy9Pzq+Qv8seb7zMTu3usYduR5Rp5qaOryPQ9mcNWyGzPmpTzIbthhzq7wOg1fgWCCpKGwa6xzB6c5lakCSNs9eW0RzkKyUsZGRNayzl9TN1vqN4rqr5vhuwPao8dgyDkp1i2/vPwT/szUOBSSfePtX79joU+xvZiH30r0rNZbOJcxbX5k4cm+XbozgsmU2BPMFAgoGkOKzKXPC8z6VEXCu5DruNA25GZCPJujqTCS3ViI0GfMG+aBTDFc38z4B29qmsXI6MvLt9GX+GYIw4FMXSr3334FWce6aLnN5eWjmzZxfqAqF9wrR/Wy6DDCM44P98Q3MvTX7CLibcH133py0t/nSjvw1cZkEW4YVw3fL6StEMcD6UJj+atzbs5kTnhf2lzPW373+re8UvGpm9Dm7GyHNX3JXDEVVY2P77gMfkF9kPPkBQOefkbx+sB3Cnjyp8637N4ZFPsQJd7CP3ccudVSJotTJ2P0PXQlAbdtCipjIG1qhNLyW0x08rFk7Fti5RwnI9ztjjwNX1KquuX+TKdbXOMaDoUCxnhWTWX6RNWUXapUWCwbHx8sjyJVaiC6hu4PZPWRxweVU19ekGunDCx1F9Dl0glywyN9bmF5A5tUzcl1wrjNSF/rnEUSQBaEIevhjqJP2d/KvX3uDbTdwF2tYbxR2IPQYtDewuM9owpBxsLiYRXTjgmmYupx9Qat9FkWMaYC1nmdht+dAqWKxsSye0bj/dxXrDYbPL2hU2w7l5qL5fs0dU+vbEA0vaDVbca+pFdkIMGZi9HrjFZDr8Krh8eUpHhAnyzwWlXbOcBYDui2y1QV3x/LlrfrjFUOSvKStgY4VUJ5335eTzC6YPZCGtT09p7PbZ+6H/BDddtbFtaFwAsvPtD5aEbILMwwDZf5XLGlBCEVDYuLC1DafNeD4Le3r2j3HZqSV/KMOY2+ZpckNAoU8NIJCJ2X2O4jzy/kJH0amRjTU0Sg243UyYFrtQ6P6wNmu2Y+iakUr6F/bBiHI7dHE0uBIM6eRaxyG71syDdys3/V7vn13WtsHrGUUfgX/uk/5/bxlqcXEwil0c4fCoIywq1y/Gu5OZpVS6v32LOKVFO0RD+BZnWGGqGPlI2cu6o1aPIj5mLCfqWKU/OGQytYTALsS+mBLYRHGFssnStGNU+FrjPTDeY3MZ4Cy+iWSdPuyIcZmoIQi7GmKXqyMuHMlWs7P59jHL5E6zTOYoUWc04D6Vo9cPnLa54//TM6VZBsNA6HIud3POApXbTkWHMRBawDF3ejPO00I9x3BF5ApBLb5aYmNzLcQODYyrurcvR9y+7LPa+fyg9eizOeOme8Ttf4isIuiZf0VUWATZ789CUYYPL0i8+58T1er6TR2W2+JXBm6GOHwj/g9yGXUcz3s69ZqtzpOjP56u6W5dUFV40ybHlO5FhEE5OZ8kbdtiNKDRwi5ipPag0eQe/iHFpsJQfimGeMloOmpdj2qYNhHt5DxnuqY8K76BHdlZdPU3hY48iTKGajy/UxfpPRNVNmRkC7ly/m/+3LR648DasbWL2TXI99WqLHBW29IlK8jtkjrMSB8F3PL3qp4NKHF4yTkYCYdP/DOYMAACAASURBVCXXcXI2ws2Eozg1E87n0gk9m69pfndBUVe0tYyOTKwnuN3I/d33XF9KR9OZ3BD2OfGbBp7+GoD46gK/mJDpHoMvoxxtPJJYE6bRKzpDrn+VPqddPHA4mlwrgNexA+oDokjZvJU5t/7CYGk1FGJ10l+tO+CrqESxKcmzCrPz6IWSZ8sGXNMiX23Yn8s+TyYa56VP4Nk8n8ub1jJtFp3NKs9IVcnW1RdP0HSffVZwfCNh/lX/FUVbMRMNmQpobDYpL+MJZaujqZwg9pzi8d1Jfwc0hNJYDM0Fr7ev0BKwDdlf7cuQ3sp4Y60w/4l6MQhZlhR0Pbtc8bNiMZ1oTH5b8uuD/Fl6WEPb05cD2kaJclsG52c3sC8IFFlAfQDDOmK7OlFkqHE53P+E4PZuzBnammMn7cbV0xsM0eGaOcdHGXFJWnD0nuKQMihiBVMI8q7HMF0ada+s9gOmWZPZGqVCNB+rR/K6QWQJsaI2bKuRjhFLA9uQa7beHngcXO57k/V7hGxw6mT8sP3sJVi0BtFUejtn4oKZrTH1P2EzKL69L39LPTvnmXnJ9Qu12cNPqZ99Qt9qBKP8XX16yc3nv6RqjgyKGSQFXu4b8shmoiDe2ujhP5h8WkbYkUqcnl1j649Uty6RMh5p8orAPWXdcOwdy3CkDRQN2faWODrnyi94p8AIrWPS1Gs2bx9wQnlpVbHB4jxiqg1stvJCyqoWYzKw3d7zz5xLQ2GbJU2540/++Bm5Moy32gGRxywGcCeKWqlZc7+5pWwt4kgai/J4Kpcyj5fsM5hMpEE19BlauMQ2fV6PEu3UGj3HvmBMBxxX9nd5GaBZPo4p0C3F7lE3pHqN1oZ0im8vzUrQBTPTxVGHzhhskiDnbOHyy0+ll34WWCSjTVHWcFSaXsHpJfjs8pynzQ1e6VIpZ7CpG54tBXWffAAuDaNB2zyifdfRmXIjZrZGZujcGDbrUhqPXV9j3m8YrIBKvJJzl22pD29Iiwm/LOR6V15AEX5Nd2jR1Ryfb1YMVU2S5JjeTytHZ8k9ruthnV9hN9IAsPc5ewbn45x6JX82Oz9jLLYcchuhSHf3zsh8YnJpCx4UCvDlJ0+ZO1dEywDDlJ7lff2KzT/cM725QmhyUkYHKCxYaBiedKB6Z8b40PDYdlT5KaPJcqoQzTrc3Wkk5ZqHfyCt56eXL7CtG0bT5PCt7F89VAzbhmH/hkShI1/tcvTQ5BAWhJpci8W0Y62F2LZGUMq/d3NhYt5f4f3iklARV3+XvqF6W+BZcwI1nUbhUmc15Zvt6dwO79GnPpfhI3//zZFzVTtpnkWY0R3HxxViJ+fk4vqCq+kl756m/Kn/L8qffa7xdb3jqbjlaP9TADwedO6Sb5mOLk/U2QnDG969tpj4Jv4z2TlLS7GiiE3RYaiXAdWWXvOYDqf7QS8FeSbHkVYJ80mA0RxIc+n0vKn29EUB+SPnvdLotGwCw8azOixHsTWZNYd0yyyY4qhLam7NyFqDptzxTrGpHOs9Y5LiXi5xFa2fpxs4jYnlnGN6kRrvns3ulKLQt0c0RcjeHROWQczWrXAe5SPC0XumZy+wvIK7w16N0SUtOmwxZ+Kpmt1wynCoaOKG+luZOsmNmuf+Fe82d1SK5q2bGtjRgPc0JlElYffVA9eGz1E4dErqqrZ22O3pS/Dh8R79xidV6PLKtNF0m+S4x/Mnat5L+i5GczSKQT4KktygNkYqzyFU1GxFkDHxYlyrpFhLu22LGbu7NVW5o1xL2xQGSww7o2p61koMPBsM7PAMIx+oVHTyPYL+97WPwJiP7WP72D62j+0Ptv3sS/ByaWKphKNtttzee+RRRqIITPt0R22nvD3vmDvytn1+/SmNBYMdkN3L8ENvdGhU7I87bmYysX/djtz/nU8w778iUGHTUIxcz87R3CWOot8od29JHjLEZGBQBdxWsMBIT5Od0blDMx5420rvwSgafH0gym95qXj+/EWMTUVvQiakt+TMTMzDgB7Z6I708GdxT/aQ4ZUTrr+QnuGxfsfzG43PnlzQqXzA/JsUISqag8deQXeZCsTWxKxNdLNSYzstPr9YXOE4FonK/2WthkVDXu1wlbJ7aFpgdCSHPV0hxzUs53ijDr5HOJNJ9fw+oby9I4wmDAr27bo6RlPhti12pQR5DYGwdIaZjaZCEn2dog8VnjaCCoeG9am3Zzkh6yYjpiU4qJpIJ6BvHczewezlmlzoJt8dZ2xe/SXJUY7jZnnFzdkVVm0z9yXI4DdNx66f0o0JgQIVIc6p5yMvrmNmn0t4/dwfcNsFm/wtzb3KUS+ectys0BzBTXiaswJ43Kz49tdfIYwW0auaocii/c7lIXgk7pRsUmFzqOfEbsNOESr3qcOLxScsLYdaV0XL2ie4oYYjzmgcOT9P0hf8dbcjzCaMkQJ3GBZX9oKl4aDZMnRTFxqpNWDUHubkFGiST+X4X68qIifBZsJeFYa/vk94PqwoJxETFQ40qgXd+CW6IzAVW9OZ2XPoDpTfrgmeSRDEu8dHdK1noc/xZvL1YQYpF8+vGYMYU4Fe3Okl/2j/NW4Hj5V8MfRWjz0xOPwE7mixl9597TVUxZZnlk1syVfVxbOW1brlUn9Jg/rOJ095+N2a/XmNyJUCSQLFQ00WzTBcOYboRmP8tccQ+AQLOXfGboJmHnFEjqZAUP8ku8fihqI8UCuFlLOrXzAbXlOu1yf9NQObo1JwT7sSkeXUZc5OKZ/kR/DNgnLXEoxybNt2TxTM2KwP+Krswg7PufQEtTUg1NxNJhc8sUb+Om94puqB9XHOys+pSPB8Od64LNF0h1B3qJXCTr7L6cdTBqHAL3hzlPYpno4UtU22gWkt89ObxqIeE24CE03Ji1luQxAKooPL8EzVFJcm1XLKsqjRFQDvuhwwtSML94LZZ7Iffe9gayblYDIoUd08fWCbC/pxYHEhc9GuPhLGpxvidl8TORr3SljAfztgVDmTxuSgy3kak4ImyAjiANNRd0M4o8tSCtF9SAu1fYdlemhFTnKUr+R2hEHXaEYdy1J2a8wpcajIaQYFLprP0d0ptqnhv1P9/Akgzw/bz+sJhlMcRdNTfvctIxnVbcuoy6fn558+odJcnn3+hFTpcrm9ietE7MqcyJODKicetuPwSeJz9R4IaXrMixIWv+DKfi8r4lOOJnZh8LqWm/OrVU3mZPi9hqUUhSfnE3rvdCGiScXxsMJ9Xw/05Dl919LUGkIlTje7DUZtMH0aUyXSoJaVjXcWYWgJwpB97pwFbjwh8nRClf+rhUEcBzy27zCFHIhwdMahpNIGvlOK1LYXs/yjK3YP7wgUdU/kngJ5rpbnCF8jeZALfRY5VKPJ7pChWL4o6hIjFAyioFU5zCEvOeoWBeWH2PrYt1jGgC80toqRpHhMmMfQk7NVYZ+5Z2NYIXHQcsjlZWRWI6ERED27JBLqUDSnBdI3bsOnlwGR65HvZW2W0fYktsvS6cGQne4PI6Heoi0uSVfyO7bHA5blMO8Hvv9aXip663EW17x6l3C5lPOjFzsILYznz3jiyEvFSiYk+VsYGgaVIzAvoDE6GAfc/pRCD6B7vCdP7nCtc4xaHsSlN2V0e/K1SbeWa/3NbYXuQVIKtiry9+yXn2G3An2XMVGakIfSpMl7cpETqXxdq1W8+OIpWdYiDEVcLjTy9IHGPOOJUmk4eh1vv35g6Gu6w49RtwB5Li+BgRr38wuIY6yNnLum2kDckL3qqBw51qfTjDodeX37FkMZlPmlRfeNRZ9DuZLAnWGc47HHbguOyknZvx04/kKDQ4VzIfdF5LZYuodzEeKpXEpbR0wvY6z1qcNZD3LuvvvqlqFvuT53aHvpGK2++S2Bv2AWJKSJvFAe/+GW327+DxbZW6w/+XMAZuEF0/Jrvqp0sgcJPltMn1MWI3Yz8kqx7VSvMnTHY35+QVfJcaXvLPZxg4in2K7sn+898PTZP8+5cVo3Wg01di3PrDs1yPcJFR3FQdqypu0ZBkE2VuzffAvA1JC6gF9+X9AP8py9fD4SXt5gYGIo4oK23uE41/i9zlHJ93SW4JMvbkjf3PKwUoQJTsDEvaDzBrr3FHuWyWR2Or9GI4iVBmrQ6vh2gOh63qmLwihW0ER8kzn8iUKz1tqRoJ+QMFKu5fm8u09phwLL8pkqJYwie40/NfmlM+drBeQx84xulbCx9jRKXcXuljhxxeXVBbpyIkNbZzBOU1H3xy12NMV9I8diNj1Xlkk9DdB3arChiTZAVwxoKo1jjzqNBenQYCLHYQY962NKtd7Qvyeg8Ke4lsmYNqDwCOt1TR2WnMdzWk/hIHTBQdPJm4FxIsfWFClwis7/MNe/93+A5hEG5bWK+QXz7jW5URCq4nH3TKNwTEqt4WYmfzaPOu52Ndexxk5pRs2vRyJNZ5wvaVeSq64VLq6lY7gdgWKWifqem8tLvv7Hb2iQ3tEsdGntmrrTYCYnqUQj+Qkm8/skZ51rlOpiKN0af+kSjxG1yvVU+w4NOOxq1nfS43EuQ3o7pRQhbx5lnshrB94dH3gae7y7k78bX0R8+ybB0AWaUnmgCvDtAHNZEwr5vcMhQfcdjETjbKmg/8GpoS5qi2ybkytgQ76BMZJlDGWlBDXLkr6xiJZL5rH0dvpBxzBc+mEkjCWMullvuc8HGhpcdZE1omXodcQgCAb599o8oy4L7MMBhUjG8AQT1yG2B1zFy+e4L4C//6P+7qoV5DtIVziufEX5hUufdyTlPUJdWnHZsX11S3P3moeD0kXMeurbR7zRwdXk3Pmujs0ZQdmTVIrS6pjzxdkTJmOOp15bm+zA0HrM4hmOmmOKHVYnEIec1j0FmgDML6aE/poie+SzJ/LSsruIKk1oI539e87Jr97wsL4n2WaMvkKpNj44FcXE4lK9GEcKhL9gGvS4sTQEX2UFdtfy7MznSknVOLrN/f13PNYG3lLlnbOe49BRZXc8rk/zw7on/15w6RPFOgdv4CZW4qWigm5HmR0QhdJSO25oNQMDCJUN3X3bMjgtWaHjqpfGLPK5f5tx1Pbc38nLt2sEh2OFORdc6jLyceiO6FlH16csrz31tRlOG/LQ3Z30d9Mo6Zqxw5kJhuOcvSvPU9Mk+CLgm0wjduTL5fBX93z79n/n7ZM5/2otx1/2A6lwOb5e8yaV8/Tm4Ra7aXnmzKjUpX3o7xBri+7GIlWlBYsvWg7nHeOqolV/T/+bDbbjkXunigGLeMqDqpFwuhbv4hzDfCRVtiJ5+5ZivUZrTDSlPepE19Rlha5BnqmXW3rktjd59slzzidyX2QZ/F93rzhWCYYjL/3QBFcbGMOAuXogOPEVs+WcchRkSnZNty006/SlskvTD/3ou4bAzHHnPraiTsybETPsiPuUN69VYXzTYk0KikPO63tFifiYUY4dT6cadhSq3/U5piPpsQFLXhRd0pJoBZ9qA3ee4obOBf7C5cn0Ca2yX2a3+nBWf9hsz0ZrR3pbRdwmEUUv8HvYj3IPiNoH1yLTKoajwndkj9iOQDN9hlHaCkv3qceG7TDioGyKZ6I5Eyx9T7aX8zmGOrNQw9BGEpUHrgabzbHhkFfUnWLd+mnz8KH97CU4EOLU0sgGVk7JgtzNeKHQksHEIREjgop9KT25oFxSPPyW4OKS5xfSaLvWwK5dkWU1w3tobLrGExHl8ZG3gZJMWc6wHlccmwcGJZeR5gOkBmbfoF9LT9s0TCb+Kdoy3x2wTJcr5bm7hk5gNJjulF69UlyrJLFHvFRnVN5DHMCmGhg2f8nbTiK1JvsMYRvc/K0r2rXcKElXM/rQiYrLQKHFLk3sYaBMbeapIml2Wnxn5NNP5vgLebj396eXthvMCPKAppUhuEITOLWGiUuoykFay6GxBK7nM39fH1PW1G1ONJ+yUIb8Tm9oC0FgVExUyHka21TDlirZs1BSNZYpqLsRO3YZG+mhdhXkTY4VD5ypshE/OKVGmu81tOFAXAW4rvQqoxcuujahKgXHgwxDaVmJMQ4kA5yrkpOud6mTDtOymc0UqfZ6wkNeMTo1ldrYcyuA45LRMzneynFE8wZr5jFEM/YHuQes+4LN3Zqobyk3p3MLsLzQqIuSw7t7cl8ammgxYzQchq7HnshDYvoWIRFDo2FHci+Ovka7aenEwPyl3MdPuhdkXYgWmITqBZW1CWlaMuYGDw/yEgi0Ft2c4dk55VbO8d2m4Ku/uWP1ekOvnzpEji7H4NaQmz1l7TENpXELP3tB+zrnzfAKp1IUaZZBtUnwQo1DKg1q+a7msRzwn8TcLGX4Kl0V4Lbc70IKxZATzmzy4UB3r6HN5dN3NrHQ2znnL2KmtvTcH7oVxzc7mu40XPfwjTRsWZAz7V/yRn8g36r6wrKhufuW8GzkrULlVmWAO5li1gv+6i+V7ubwDQ95Quo72K1Cki8zttuYw9xhzOVYDa3FjW4RImcxk2CuWZlzeHuH6HwqlWrYNiv0v4p4ffnqpL+fP/8jBku+rHf3W9JsT5k1aIpnOK0E5TgSBRbP1N43DQ3PnRIvZwiV7jEyG/wSSp2tLi/fFovNIcHWCiJLRs7ypkFPWyzT49P38k9BzNX5hHe7jnN1+a6cDjc+BW4M5ZZGieWGbksz94hDhxtbOnOr5A7uS9rRwH6PQK+2+FmFSBq8Ur0OTTALQacLmr06J6aJUZtoWs5CEfBvIg1r1Agnz3mmeMluvWvCK4Ng7pArTcC2vEBwet7mVwFOr2FfSLvQhwa+DjUtVaVejm3GdAwYdYEWyb1dYzIGE1xHUO2kE7mnJ/Ai/AU0ist4dC8Y9AzKEWOqSM+FTTMMJHlH974GVljotoE/npErDtgsOeXq/WH7CIz52D62j+1j+9j+YNvPvgSPmsAa1I3dZ9hzh3jSfRCoTdetDPPFNaYSHhX1b1gMJV7e817QtzvqMD5iH8wPEhpG5zK0PWIeESolhOYu5/toy7v1PZs7JblUaXge1Pua4pW87jedhpufvlRentlkVoxtSCCL6YFRaziez4NiWgicAcuD8azlyVEVfJsu/nZH43bcqNhS0+YwMfB0QaYU6NtXR7AEttVjW/J1oJsNRgd13xIrcoB21HBEju3AYKoXaHhaW3PcHUj2RxhkXsI0DUZhIIT5QWjXmurUlofr6FiG/JwR9lCP+FpDXkjv1nU6LkKD0AVLkTZbYYvTQZnkGOrVG+ga7SGnr/eUO9kn1xJUlk6BTqU83pDTuP/F4oxnxpy6HfFsGZYZc4vQbsnSnjPFNDKdXNKVFfrVFwwrye969ypjHGE0WzaK3LfYf0/V95jmhJkuv/du18BZxfnTT2k/hFYcSn+KNkbUrexzkh459CV3dweG30MI0Rg6ZqXjWddk6mfl9khXQp2PiPeOcTTHMcGcnnMxkUfCZsqD+S1VdUSzZInM6Grk6wN5UtEpAdCHt1tGkbPvI8xIvtSf+D5G6fJqNLhQ5USPScJm947vsyPXN6f54bmqr7KuHZKba5z6NbtUerLGa5O1M2DkPXkv90Dhh3hujegDzL18kdz2I+0oKOqWdKVCjmPBd9+mjL7B3FagDUae+AvqwOHMli9aYYSE84beKtit5OvIIqALBKI5ZWCpGlnr52UW93FEaeTsR1Xva0857NcMm5S3irl8Niv5zV9uWE51klG+mMc+w97P8acNpZAv0jZ4hunu2CcPLHL5HbvNirn7R5S/y/FeynzdPu8ZylssvWHU5evri+UL4ouYaXyaz+5L44Piym2aYJYat0lJ375XYenxRMi5e8kwyt8XvonnRRjGBZ2qlUxNQYQgTQqMVp6Rki2RbpANDrpSzol0m663aZqaW7WOWrIiwaJF5/YoX9LVek2dn6oyhFOf3pXRi+awJXhMSR2BqcACV33INl4wsSo89RKczwK6PiEtVmjKPNr7gart2K7e4giVE84y/NHlWOakKrw6lDa9G7CqM8qt/OWlF1MLk+/ShOFR5Yn1GrM9fbk6/py562MqwYDG0MmNjqLeYKnStiiYcGhKLGo0VaM8tA1ZVxKNHo3K7ZKVGBcuTnROc5Qn93a/Iekq+s4kVyokhgamC7ptMOpyfTTTYxQm7djSq9wm/mlJ0g/bzxNoDxXpUemhxQ7LFPJ+gSXkH+1mA7vv3nA4toyJPHTrwmbh9dh6w30mDZY5mFgi5CC2CIUq7L0lae+jHzO2Ciyn11uKvz7QWCPdICd6HDPqfQhDxuZOxbkfauzz09qly8szHkqPupSHrO9cjE5n3+Skg2JzoSNybZ7MbR5tedg1a0AzDMrSwOxliKy1DRJRUCa3dAp4MAYmupZjT3xwZV/60iMjZt3f0ijjgdbgnVcYfch7c7caTkNg7dCQlRm6Jy+PC98Cw8SZ2KSK6mef16zqAyMC0SrUZyyIB5OBDK1SCNdmpLYrjKHHV3qCpj5wqHI0MuqN3OzHtkNvGoQYmM5V7WBX4ocBhjAZeqU7qJ2Gm61egl9mR5NcsbQMQUuWdvSOiRFJYymaBvehp7QSaCI17zs8a0FbPXCr8ivmXUNBju0ZMFdsEedz4vYGQ5vyp+fSuB0jjbxpGVsbXQX4Xx17PF0QTU1+Ij0MQLeJSJ2Od29fU9UqxNN2zE2bQ33EMRVDvRFgtpCPGe++l/P07PMLCJ5zOZMFuQBdb9INb/nuy4z7QAGotIYwmjOxIyJLoll7xyDbFugipFVIw75viSbXPCn8D3VjP2z/7J/+bQC+Od5yb2pcuRG/U5IxhV7Tr2y+GWeMCqTyRzO4Ly4Ydu+oVvIsDGLO08WM22ZHnsr1WVxc8IYH9HpEU5RWhtkTnD9jejElVgCzXuvodiaTeoERy9/dDiOXqc+2Og2HLifvVQUKmv4BPRkwn0ujo6cxwrF5d9zQraQz+9bR0S97+u3rD3treqlhXnqYxw2NAsLpqwP+YcmD2DIoAumuTjj673C0iq6T9YRnYs1js+dKBETnck4WruDaPUJ1egkmRYHty/25jGpyMXJ+sSU5yDk5L0xGVyq79I1MARnlQGrq9HXHZCl/t20amtwk1zo8JQpYVYI+bnFajUHV3e0nCeEYMvQaB6Xt1zZHbPFI2rvsFbo9ducY3qkXJ9wQq1XhwaYm13Xs7g6haNmKY0fgeRj+giSR3yl6i6HUKBOfLJHKDU25oCl7NnZCp5ylZFXiRQ2ia3l4L8UmBDcC0k5jcKWjdd/qhOOC1nLoFL1cDWin/jFTf4IVjh9I/ouhJS8Khqz5EG40BjA0g5pAOv9A1mb4oUk1WoQKcDPagjQb0J0WQ12MejFiOgEMYCqAoN5qGDOXbjApejlXAthlBYfKwQ3l594rCP2+9rOX4LuHFYOhwB55iSZ07HhKtZMb9twxGQeDXvTUypDHTU52TDHsyw9oud4Frbgj7ntyJcnRjmt8u6W9iBDfy1xSWWwpWh3dEpzdyE0XtRlm0nKsnpCo2Wyqgj47HViWHxDGgKW0/mgqRseBRlBo8mAL1yCYCjrHwlIvt1ls0TYCe3AxvlAaVIVgKRxmZz6bnfyuJ89DjqWBWw3cK4pyq83RzYIzLyR9qgAPRxsONWMw8C6Xc5WWp7Dt6UIj6T3U4xjPd9C9CNfXSdSral7FTPIO09IJFKWXFU7wbJ9mHBCjggtbOi+SEYYWW+U/F/MZMJLvjlQqB6G3JV0/EEcx+vsDQEnZDoi+QzlyH9hffth2qcHjwx5Tz6hHmetcFBmPNHSJQZxLg7q5bXi827N5eEvZyM25LTWasqSuc9KV9IIf1g0XC4fLy56ikPvCbjXqc6jbhjpScjNZRda2+MGORHmhfVvRi4pjU8Dw0zH/u7sVZTlnF76jVCU35qHlb8RItXkg6JUgsaVj5TXpcUdvyDX8btXgxQ1nYUipBJFv13d0lolpO+Sqvrk9RtimSWvMOY7y0qoeNFbJEb9I+OZOvtSXwQw9b6BO2GanwILjQgEqJhFDp5FaGecKqt5NLHw3wZ4vaabyYJtFTSxu6a0LCiVrdabHTD59yllxzuDIo90L+OJXvyLbrrFaOQd/8ulLgrMpPSnaXCKuLxwb96YiHDz8iXz5RnlLcl7z5e39SX+d59IJGJMYa1Yyc6/QttLlW/k1ud/S39b4inOh1Fz+bFpz1w5MFBvRvt0wyVpezzwMS13Qbzd8V99xuXyKsZeAnCefvWDzmKHVPjdq7ozA5iq6xH33ioVioTLPV9zdz/H/9JToIdGXhIrWr4mWuH7D0vycSuVTh6cv6HPQDQdbOR+Po46tzzi7WDBXjEajmdMeO4SvYZjyZ3PfgbpFdzUKFD1f5SKiCG+q8dkoz22ZzTBCB63z2StBb8s20P1TM9xlOfWFtAHtnUY5drT6DOMg90TaV2jhgnUb0QuFNk73aGPP79qOWJcXeS7uSc0ea+fTK2G/+OUNvrVGbDTic7knRCYoSwv3ukdvpRHQXAPHshAEGIoXdvV4j/kTqgymY6ANA6tS2cCsReQr2nJHo+b4O7vErsGdzxiU4gqiI+tHVl2FpRCopiel9sgzUCxHla6x2R2xnYC2kHtv0Gf4qctRgKUeCLVYkQ0Rox3RKIWMseuAU37W900bx9//VNQ07effkR/bx/axfWwf28f2//M2jr+fRfsjMOZj+9g+to/tY/uDbR8vwY/tY/vYPraP7Q+2fbwEP7aP7WP72D62P9j2s8CY//4v/hfuHmUyuWy3aJpNvb8nfyd/pvcDpr3kocjQe5l0HX2bstUY0wZVHcD96lse3+0xhIVryGSyPtMIwhhEy0yTmdaL2ZTz8yf88lfXaJ38e64teLMvSHZb7HOlJTcJyY8H/u1/51/+UX//y7/4r9jsC0ql32V2Gu+2DwhGxloh/LoKs7DRpjqpkq/xzBmNI+gftlQqDXoQLSY9m3KD78hE8dKAMvoEL12DqQo2u5Iq8D5yvwAAIABJREFUuuJJoLOYSPaNzqyp7I7YcFhePAfg2ZMl/+av/qUf9fff/58ThryHSiZ/hd/jtybjYk6aSFBAWxxgbpJ8taFQ5RuxFqKVR6KJQZrKJL4+ZNRmRNjX7BRo5QqTxK5xxpiikWtWaEeKTcIyuKRX0NVy3VOaOqY3cNGqBPLVjP/m7/4YGv+v/PnfJnJc2nFEKGko3/FA7xnrAk1Bteu6IzJ0DM/EdyT8W7NdukFnbAea92U31YH6mFE2+Qd9xsk8xDM1+t5Bt+S+qPUOx7Co+xrxHhxUOVhNTarVjKpG4r/4H//iR/39t/7Df5f9Noeh52yqWECMAD0roDOxPfmd/egQziz6ogQlgBp6HsZoU/Y9haI0azuoh4SXz3/BVM1dbDpk/UBad9i2/A7d0DBHgX25JF/JJP5e1ByblqKG+we5tv/df/off+jr//A/yX03mi1JWVDmOYNCSLsTA9Ha5Nkd1LLU5/Fdzb5Zk+0PdLVEQzphgGvbLGYRuhJlXpxNyHqX+7vXqGnHskDTGuqsoNzK8a7zkmEouZ77mLEEmnRNz8unz/ns4oZ//e/+mIXl3/vX5AT88a9eMItmlL2GUHqXpmsTTq+oKpO7nQQGxZZNP3ZYjk2hOICjIEToGumhRFfsMHpXku4TfM1AUyjnIHCwdEGva3gKVFOkJXXX0tcCoSi46AX3D1/z9Vdf8V//rz/qLv/t3/vPKHwJnpg0AuHC2/Uji5ksQ6iMDrM10JoO70yONTAdHrdrDo/31IYiVhgHLmcTRrMlN+U5M6yBZHWgYqTPlT6f7jGMOoKeRFH9tabOwtERcUStwHt+UtANa/6D/+Q//1F///H/OTLkcl3fPGQU2ZrOcLGQ+9+b2jw8vCN5taNOlN5p3ZJqPbFu4djy3LVBh2cJWuGgl/J8NkNLcajotaOsMwD0wccaDDKtZ1AKPYGlE9owmCamLcf/i6ef8+z6ml/9nR9DRP+jv/dv8Pnnn+CHiuUmtWmMhtAXDKovu6ala1oMy8RS5TSTiUdRpmi2RuwpIXVzSquPpPmOw0HuH0d4UJcYtoGjOFD3SYlZF+yTkiqX56zXRhZOQNEfSJRyT706ZWj6YfvZS7D0DIZefWSwaBnQbZ3J55KcNxIaVd1x99uCsZWL45pPcQfIuw5f8RyKIGZ27tK6E0JVDzVEOmeRj+Y7bN9JxpQyq9BferTC58WF/FxGjpsb3BmCTg3UnwrcS++kv/v1gTzNcRTkeKuXzNwSYS/oUonaSrIaezFFWBqHUqH+jg985p6Tng10hRL8NEq+vM1I3x5pLuUFYs8uiOoVUSTYb5XOVbbDyAuaxefojkSuHUedc8fBHAwOa4mMcn4CBj3cfkshfFzF5BEZPceuY15VtBtVD6eVBPcGsbul2SmewzxB02zerA8EutIwTDI6t2Zf1KBKCwrDh2PLtnC5UNypXhyzcTuq/i0c5SXgOR1WYbAzDA6Klio8nnLt2dhcLC9px4ZWlVKErknXjHSGj6uMkRCCoTUYxgpdIXCFYaGXOr3QWChWmkPWc1dWYEeYmoLcC4E2mSL6kUoxN4umpV96uKZA2UXqrmIQI0I3ED/BZQjwdPkUfyzwHZ1wLj8zd2084WG2GkUr5zMvWpqiRh8ElaEcqNqlao/YY/8DTkOXYXC5WvoIRYzu4DC1fIqsZFCK8QLB7HLBYjnjYSn3xOq+5Mp02JYFOqdSP6/eynrKwIHDLqPApO7l/rTuS9J9QVkcGBQSdtAN9vsj9liAqRwN08AxBbumw65lWYO/jOnzPclhT60g8t7EYxglp2KpHIim2FL1Fht3QL9V3K6xS+pqvB5Oyd8vz1+qf1l0GeiGgRUs1BgiPDdEtx28nTw7+aZC9wwm0Rl1Lvs2NAaaMGEI8NQahvGINm7ohhbXVbJRTU3eDGg0REvJmOKaJXpfobcdmdK3M00Dz5iymD0HXv2ov6U1IXuUa9HpBkU+0JU+rxWvZT8YOG5F+jYjeFCk95cL+lFQjteYSoDamJusDj1hNAVVxyfaCuH7zByXIpLfMW4SqrSgGqFQLEdO3JNrIXqaYb3nu9U6hu6U1+uwK2mOcp7uHr7EwKIzTNpeXoxRZlIeHjn0t/jqjJF1eHpF23VMYjl311dn5FnDLssoFadw5w7sqxbXGgkVknwYcyzLIjJmWJGCiBc7ejq6toFSrk92mLI+O60TtE2fvh3oM7m3k/WOnp5xZtAryalRWFSWjrYr6BTt5Jk/pbU1tHZEtHL/VISEpqDQelBC0INWUvYjQ9NjKmRp17Y4jsvYlnSZXMeFP4GhQescgi5X6/3TUmvv28dw6Mf2sX1sH9vH9gfbfvYleP8Au628Yb3AIQh8cOZcnskaFOfQ8vD2t7yYOqSP0qPQDxkrXWCMNUYqvRazHMESzMYAO1KF56LBahuq+yNWpVTptRCnqemrI6tMegVNfmRjgCZcNEt6VNtD+YFc+YfN0+D1ocJXr5Qky3Ebi/ncZKtIqodW8LA5ktkF27UkAqiOHdvHWz5Z2LSl7MsdDvvknuMxo0tlnw/mniefXFIOI20pvZFKy7gYXIrhjttcece3Oa9tHXdSsFAMJG15yhJimC2e+YqJIcdi5QFu1dOV9+iqxjLZf4vd2NTNQP0gycePlDyzQ+InS0ZVN3X1TPDu+zvGZOTgSS/zMBhMPYt21NH6TwAQxZpp3aK1CW+VMHBVtwRnLsVvRjJFeOwHpwXSwhqxPEHfm+iZfFUMaGD1+GNLEMrvwDQZtZJ9Av0gX9ZlnnGsS+puYKMKfqv8SNqliM6ksKW3WJcN2uBDAbUSYG77Ej+puVzMGVU4dPuYY1gmZ7FHnf/0Nl4ES5bnE8LIIvKl95pnK/zcxfQ0ok72Ix1LNtl3iLGgSFXM0N5hdgLomCvmmiLPcW0TY334sD6rasfZZIIZOLTq5YYZE5kRQ+/gBfKV9uKPb6g6k/buFrc8rWusFKfu8f6B46GmqowPbB6G4dLpA7t9jqc+F5/PsHoIgnOmZ3JvtZqB0Fq6egTlaa8eHumPGuuHPdV79pZk5OzMoisHBlXHWRsR3izgkK2plCSYv0/RKoHxyamvXCnOSc+ao+sjph6CkHZBRDGW6zOOGvMnMmrUHDv6wSBc3IAja2aL4xHfieiNhkRR+uTVyGz2jMsLn6qRNiVdJzTUuI4gWsqUg6N3dOmOoi8ZRiWyqhmUjY7ftPy/X4Jd39AoGaZsSMnbiHj6jPnT96QUPdvHI6UHpifnSWssDLfFtD0qRbYRR1M628GZ+5RKCiI1I6ZRSMUZUaJsytKk1wROeaCfyXm5XE6p65bjwyOZqu+Nw4rZ7LQSbX38irs3UjFj+/CKQUSYbsRR7bHo3EDYBvthoFX8p4XW43sTDL2nncvX3CPQah2PjoHZyz3bDT3HKmFdwIuZIiS3Y+yLOfWuw9AVw01whu6abF79ho2qT3StkPPVqe0NHRsTPjDaGMKhHQuaXUuvqUifFWLZJo5hYipWL8ubEBgmTV5/iJAM9UCPg4HP0zPJgWu7Jng667sVmdqfVV3j+D5PXwSkvpKT6m3ceELseuzuZXh1HL896e8P28/Tpu0aSlU0na0EY90yag2m0uG7f/sdh1dfctFoeIqgeLA65juDsdnRqlxXutpQUlD7DZNWkm8fHl9jT02aQ8LBlAb3evkrkjIh/eqediMX4ugWEPsE4RlNI/NVHR3Tn5CjOSQt+rin3csJWZg+1sUzNLHGmssQYX/3lnyb0001zFAyfBxefY0Rptz2OUdFsOXZ54ylgWF6HNVTm7JmXEUUloemtWq8E5JDzmWg0bXyZxNPpxjv4GDxRhUov6cJ+mETQ4p/hNGSF4oVOwRaRtaWTFy5mV56M5yx5MvdLbZiAfHSlmKiEWotltKS27zJGdMd1lnELJEGajlM2LcNT4wXTKfSoCaDg1l1PBQmnWLpKB5SnM2M237H+Sidj845DSGUw0Baghc6mEqayLQ6QOAJn1CXhjczBvTRxNY1KjWf6TCwbyoMoWOqfKLlu4TjFKyAXrwPcRhQlWgWjJY6UPWIYbQ0VYGptMnimUOlD7S9IP9Aivbj5kwjDOHw8vIpvlK46H0P0bV89WpDv5XG2LZsPAOOxYiDNAppUTFUNXl6pFBEA8e65Hp2Qbba4k3lfjoMGeluy8UnzxFqTqK5wTYvsV0NX+UJg7MpZdWxKmKWx9NL0NHknj1mGY9JxbHRESpMNnU8gusLnOmMapS/m21LRu9IZ9WYtfycOwtJ64HcFExVtO24ydjlCbu64dxXskmWTRBHCExaT+6fct/DaBKEF+x2KsdUSRWA7CfKhd8zK+27Ebfz0cJAhs2AOqsoNQvhBVgzeQn6Zs82LRnMGF2pIwSdR9dY5Mctbw5KNWU88EfBOUYhPtDhJa1gNj9nNnExArk+h2NF27kI08YO5SU4ihG9HIhCAfyjH/XXWs4pMlW0nnRgTgjnDroamqc3VJMJgQ9moIrU05piGzGENVohO3M8dEQT6BjZrmR+drBq7Kef4jUV3z7IEFy6v2MaGlhOQD8qJ0JzEZqPmFlYClOgizta+1RFwixLYsUydd/3lNkdQ7nFnUhH2/YshtBHNy/Y3Sr6Q8NgdHSSYWCrNF9LNMbRZhwGOlW0r+sRhiOYBRVChXS1yxlhPCf2tP8nBx5rXI8uzfkETTkBnivgJ2TsZsspaCNHRdazr2osoKanfK8/qwvss3NcJ8RUzvFxO+BqHeZoYQXyck2TEissCTSf8EyldiixdRvX1+hape85ahSDhpUZ2IPCmggw9ZC2FWCpNJP9+wvl4f/jEjT7jts3Sh9r9z3ljU2nD3z35hsAbnybZ56DO7YsAmUoypxXRYZbpZiKE/PCH8h2A+vja4T2Sv3tA12m01s6V7FSOOgT7t/8JfX9DqH4SRNfsPds/MmO2HsOwHTeU1TnJ/3d1zljbtAq7r/y/2bvTZolSZJrvc/n2WOOuFNm1tjdVWCDQnmgCLni76a8PeUJhYAADTS6UZVVOdy8Q8wRPrubD1yYZaGASNaGS6Qtr9yIMHczU1U7evSo5qMlJ/w0p66kkY21CuN2Br5FrJqxvhldUTy95d3ze8xM5auMA6095cZt6BQu/d0XM5bjBVUbYgr50ifzMetsw9O2ZfmdXOzBG1HnFdQaI2V8DdVX79ejO95Tts/MAul4DuUjblPiLZdYSn3F0xqqvmLi7xGaygddzYnHJsf3W65UdE89oBsT0mwgn8pnTbpHSA20c0HtymR/UdkMXY42lFiNXH4rFOTZjm+jKVqspFC03cV8dcMEvcNyIoTKGzhmB5oLbcu5k7/rhj4T36d2TTp1Ux30gbboEB00ldwXnRA4bozhaLiG6ifoaGiWDqJnpJ6tYIqZlyQ9jFV/sTA2GVkDWSMosk9j/tezOVUnEOUOajlfy9QRlUNoObRK67Pa5Zi9R2Dn7A8yuKqyM03eUgwdXf3vObF1+oSl21Tqb1lZ8tXLL3l8t8P0pGHbnSpubJtVYNApY2frJbu2xXUtXO9Skm6zk4Fgdt5Dq+N4Ab7qi2m6GnmRoM8Cmkx+9lBtKHcCYht9kPvO1AxEb9LbHu1Y7uPQC0jEwNSWvR8BzvoB92BwLgS1LvdZUzREpmDsGBwUmansUkRVIVJxMV9bdTQZhEVtBkRGTKP0bitcNN3ENT1ErbgCjk2TNzzc7/BVIBMwQxM9tRBst9KQF2XGcrxkn6U0qUIjbA0znhKIAtVth+ycMeRnkrwhr+Ra+KZGmgvEJxRNXOZ4K+nxMrFgdh2SWh69Uk0a2p6+TslT6FQj6C73eaj+hP8wEAXSkGp1TWukxFuXVHW6cTYZp3Rga7gc3snGvdkpI5iAcXPDSOX/cgyMeAbpI10pz4DoJjjjS6fytH0kH+T/TH2Td61OEDtYc9VjMhmRmUeK854H9fyDaRE91ThXFpYp17AYbPLQJhpCRpZq3p3m+IsJ1y9iqq1EfjpxpqtMhOfhqD6GkWYRT23G1YLplzKwDsIRZXWpg+z4NpbhY6kWY7bvMmCQ77Z4KnApqw5DGDTNgKOEe1tMCnOM3tQYqvF335lYWs/Z0uky1cEnqRCiYHM4YSs7GIQ29BUibRClfMddXZBlGZHbU6tcoO9f5jB/PX7TCdb7lFBFqNloSrIpSIs9hjKe4e9bXthjPO/AF9fyUCRPOYO3w5hZ9KqNCr3JMrpjs/uJTS6j71kwYds2uFOf1bWMRk6mQXLM6I2MWpcP4E3uwLewLYvRlepIrSfYxaXhy7IzWd5gqw7fRlNzEjvqtMGPVIfz+d8yxFfY4wZ7kAtmhgs618E1LZ4K+TKrw1uqtWBwdL79WrZvGZsD15MxlhOgK03I45PG75dL1ob3S3TXnRNcU2d55QFqg3Jp+OJgzToLuDfkptKOa/6gfUPT7agMRVppM6aOzsj7Bs2Xz6Cf4Pk+wYk0yJSY7NSk359wsvyXRrvlIKibCM/rSH6UG1sYLXEwYhOUmCphbR9dwlFOFdXoheolZ1/erhbTMYZu0TUFmtJ/7M0Y2x/YJz2R0shy3JBjl5C2RxIVaWuuizkSFGeNU61kjxoNZ9DxHY9zKzf2zB1j0NNkexxbsSMt6CyLsWMQBtJZZulZNjYVGs7lqwXAsnz8rkdravJGwjmO7TEMDp4VsNZUtFweSc8ZXttRqE7jjw9vOR4KZrMxo6n8zVNyYJ3XBNGC006uxTCYXF+POT8fCBTsNdc00uMIP3DQTaWBW5k4uo2rgRdcRqbPD/8CwPH5AXs6YbKMyQ8ymLODkMAcaGt4Kj7eSq+YLy0WLzxOzwq9GGCIXAzdxlNph5vx17jhnKP9wPMHCa/leUdX7tikJwx1S3F7AyvIEY2OrQgUQ9fQdz3iE8SYVpkOL5oylB1lZ2Mp9mVp9gRWTJ5VDLk8T1kD53NGXQ/cBDKALVyNYlNyPLUMjdyLvn1N24/pzZ7Kl+/JNmtavWFz7nEVChWEDnawJHs+UFRyvrpu0hoOtn4J32ZFwXCUztePK5xwTDN02EpU2g4HNMsk1R5RsrhkXsc8HWHM53y7koGqHw40tUbsRtyOpc3Lp2v03uV532Kollix2zO4MUPfMV+qBsyBg1dZmOGMhw9yzSy3QXSXAuVducVXJCjnLkYvR9RtQqvYsZ15pOwM6onFWKl+HQ8l1pcRkXvNR7nMMt1jxktCe8nsWt6q4q5C225ougbhKATieU+7qkFbMFL9OXsmtG6H4TQ0pYLrTwOhf2l7143Gau6AgpwDz0E0A6lp8ZF64tkDdB1t2dMM0r6lu5RoPGUyuaJXqFZ2SgmcJWPXQdTqs33F5vjE8ZCzUqSfalfj2C2r2RSRyLW9zwqqKsOae8wc+X+l92ni3MfxmRjzeXwen8fn8Xn8lx2/eRP0HYdvVduX511HIjLO6xS7l9HyPH3Fy9sQq/TxPnr7Ucfv5lMcI2QTyv+zhgbT6/ljNeF+I3/yT395x8Tt+er333FUXbCNTODELgd8DkdFb+0LRtaYyVczFLeBpBaY3vPFfG134CowCVWdkz84DHVBberY098BkjYv+oEwtqlUq40wbCjGE3qrJj4o6Mf3eBg/M7Qd330rb4LXRc/4ao5xgkzla66+mNCZFqP5jnyjurfbO1bhnL4TpOoVD/4lpPTTT0fieY27U9GoFXK+3jPrx1gq8tJ9ELXBiyagMhU0YFc4r2pGxpIuUzeD5wTdNdH2K0YqIjdHOb8n5CEp0DuZsI9nC8xRwxUL7mt5m1ncOuR9gOUMaBMZfR7KS8hjNhnR9y2LIKZXNzzDM0lq8LwWS7Vhqpoz58OeU15QqpKYIYw4FQ7V0JN3KrHeGgyjsaR/9zIy3mUJY9PDNSxqBWuTx5hOS2eHNIUirqSCYijRrTGG9ek2EhPXJfJd+iqjaFXe1Xaodyla1uOp1FySHnl4/JHY7BkUTOUbOgdqjps1tmq3c3p+4ngoKV4ICl1eP93Fgj/99R23yynBVN1cvAhTlLSHAkOhHH6g4Q8jNL2nVmmCX4+tyi+d0jOB2/H01xLdktHtqzhEc0ekTU2jsD73doxhj7hPUxK1Vi+jAKPvMDQLhf7zZr8hHDys+IrBlfCibQ10VoNn+oSxnN8Lw0RkgjStqZVAcVU3BF5JVV7ON/Dkrdc2DR6bhFC0xKrMJdBc2q6n2FW/IAZNWmA6IUPf4Xpyn/i9yVNV8bjdYqkyD29qs846zNOWWuVTr2YBu97AEhmREoGuS0FwvSDPCvRSCa0TYNk+2nCJYmSioq6U+LphUHQ9E9MkVOcyz030vmBijLnX1fO2PXEQ42kd17Yi1aQpfi8IIoFQXIGxUTE0gpPncDeRz3EWPY5jk58q3qq9t0g1cnGk0RJsU31fVmKpTj2/Hp4usG25QTutwnM0BjuiG+R8Q9Oh9130auBRndmJPSMYzSkcQfqs7jfBhKZt2XRnnhUB0e0q7L1G6+zwVP5PH0osf0UUdnTqLKbZkfuHBcfnHSKXKMLIXZEalyS/rAsZDjqDIhZabcU0iDAth1Td1M20wR01aIlJqTqzJCeNytizCkKOW7lp19sUIyj4IhphqaRtqRsU5YBtRaRnOeeukb818nVaW9qUSgwMukWnj+hUTjAXl0jGr8dvOsEwsDgb8gG2797SJjVCqxkSiXubYoLpXFM3NZ0iWZjdkaY6c25eczuTsMfT6QNVr7Maj/lmKiGE3n6ByCuGKuNQSagqcpY0Aww1uGP5UEWt8dPzPZnoWC5Vi5fnCie8vZhv0PvMvnfwMvnZ7fqI3gZ0vs5U5XCOz2eE6zD9eszzP8vvK7ctr74fo19d83otmUTnuOdb50viwOVrZcistmVi9GSdx0opv/uDBf6CH4sWd/jYHsTGDw0sAWPluJ4/0X/EWxoEekvnyMXXyilu66DZR0wFOWtlz0SLSYgwXPnuXLsiyBqwIdl/VF738TuPjV9zLuRB8buAZhoxN03ERL4Tx9dxMTHCnrZTRtGwiYMrkmdBVct871y7rBPsAZ2e2WTCWbXOqg0NU2tg6EE5qLTYkfU1Xd6RqO4NQ3NEt0fUhU6tDnJntJw+FOhGSqz6E3ohdH2Ob5jYqcrhOGe8tkSPMmpVoNx1HX1aE4Q9vvmJJBDg6lBrBYiKWhFvzklLl9bkxy1VK9fraf8OvThzGCqas8rVmCbh6iVFVfCkakxbPOxYJz3tyFSeZ/DGBI6PbgS0nSriPaS4YcDN9Yw2kfvOyhzsUCNsPazucr6OahkTDiG0FrvDO3xPQnDb9Q1OnNP6AarumF0O59MTE2uMQq/YvLvn5vsF88jgvQoiy/Oem/GM0J8xufuDnN/za867DaIT3M3lXKzIphNn7MMOVxFDzD5mGozwtUs2oGtLZ6Q5PogjoqxpFIxqM9BVA3FogFLyJ3JxvQlbUlIF1ze6QWoaDJMFnsqdjyNLdiIwPYSqPX63fyYcIiYRnJ/kc7mjCf4mpdMHxisZfGSnkqxoMftLIk/Q2OSKuFVrPXbTkAoYBtVdJmuxDZ2i1VF+lr7vcCYOY8dAO8pc3DcjHWvWY2sV+1qmdpaxjtDGDOeBnS1tRdbWuHpNGDm8z1TPT0OAsDgkOkEgHXfS5WjlZc5qvHLRbUVkms14elzTaoIwlEQjbaZhmzZm2HHeyn1cGCbJ0HLc5/Qq57aKFpS9x/v3r0kGGRy/nLjMljGT+RV+I4Ub0s179KFjEkS0KoLalUdmixEGTySN3HiTcUjgXNqGITtTRVPyQp1jYDQZM3kxR3uQAZ6pWQS9R1GDj1zvUtMhLdj5B3JVTxnQE1Ydm+0DmhJ9OImS7lSBH9CrVI1lmpR5yuMxwVQBo7UI8O0R4SwkVR0ttN9uLP/bTnCz3nFWSR39BIOA62iMFUqGkhe77PITdg09MkmslU9YTo7fw/JaUYgFbA8VJ+eJqStvad9/HXDOPB7OHbeB9NinzQ9sjzV97uBNJRW6rnPcpuehXLNP1G80OqPz5cY5tXsWxysS1Yjx+OGRxfgbONvsV/Igu3qGdkwozYDekJtiNBKIQWdkrFhM5Ya1hYHWa/zuyymTUP6fdvR4MWkwXlzRqwOaPDwzCWwMK+Je5dP6RMfbtjRxQdUqhtInDN/hzQbrespLQ26wZ1HTVRWeOSfr5QK2poWIdbRC0KpCWbEbiLsWnxfovozQqsxHd1p89wgqCjSGAZv3+OEMrZOUZL31+fF8D2nNi5nMRZz2LqI/ci73TJQxSsrLEomuNxmNfPangqqRxj2vanrREjguRabavGRnSjpaf0Goms/+pciodj2eP8FVbMNkc8T1bVxT0NWqlU5r0nDAt2waZd3L05m6F7S14FqRCLS6IwwMPK2lcy6ZtwCu1bNfHzEsH12123H3KUeRYlglfSn3k9tq1K5Ae6polSGPgggjmhL2UzRFPOjqnPx0JCpTItVuZjJycUyDbrOhUs7dX43ozyaH3RO6IiTtqpSJrzG4BovpZST9avUFAJv1z1SDyXV4Q68Odq+DKEq0wKE9yt+Y2xqPdk9d71kopSI0i9hY0Gs92sfmu1XPm8czy3nE7iwD1c0xkY1Hq477jTwrWdmxe/0Ga+hx1JpNbkY4foz4RFPS25XMc+2alsVtD+4UzZLeI/YdHMfG6l3CkTyntdHQdgZpb9GrPI+wIG9rjKLB9VWpRlsTmyV5NzAo6r/oNLq6wpiEdJYKDg1ompq2d+g+CjJ0OvQD3fkySTz77oqdatnWP7q4ukNdbxkqpUyFjjOx0BtBaMl3PHQWZd7gmhaapkoTRjrx5AqzP+IPSqTAM7BMB7u1WSiqfolLKlywB+Zqe64PJ5ajK9ybOeIsz5kbWlj+pfBHoHlovhIQCEyOiwbrYHJ/lEF6qI2wwin1ePxLK6ant8/QmGzPHwhULjaaTKgDwXEoqVXJzbuqprpzAAAgAElEQVT9Cm3poBcGjVJN8qwFqTGwS/5dgagQUrlopOl0vfxbU53YbD7BxnZami6hU+3EXC9Et2pmg0GrVJgc08RqdfqRTmjJZzv1LXXlsN/tQPE8Jm4ARUGjQaUEA4Q+4IcenW9h2RKFmMQB++1A35XslBxSaFhUlqDRWhxFQCv0yyDu1+M3nWCm6bzfvAUklfXVF3PuJh1XSO8cerC4vmMU5jhbaYyDNudlcEVdnNDG0siu+oii+QvRZMpzImtG3MBBm81o3zS4rXzBqV5iDA22A4ahOpfXOlbn07YDB6U0MZ/d4UaXjUl/+tdnDKfCbJV0z97FikO8pcVWV8n+2uerL77BGWd8EciXcz25Yf28x57VdO9kpOWK10zDMRMR8MKU0d3yixWjucCzfE6Kkbi2fDankiIrGFS9WjjxKOsD59cnBjXN3Lws6YgnGkaicfbl3JrzmqezwLoZ4fVKVqmsGRWCY1Bgq6/QxgfE2SDL3tOrLsv5oDEeFljrM6M7RQBoOvbVlPi7a3p1E604EuXQugOdqiUb3C11Di+vX7HTlCP78/3FfEWTYwmLwenJVZPNsqrB8dF9nV5F2sKx6TqNQQvRPYkGRN01ZmSi6QGNppSEbI+v5jfyECsWqTfqqdI1I7NEV2zLbH/C1UKmmuC8Vnsg9GlOBugnqvz/Aw71ZuhjqGoToRzZ2azwTAuhtXiqwfP4pcH2HxqKPqNRYaMTXyEMl970WV1LQ1GeN4hqgx/pxLqqdx2ZmH3Kw7snXo0l5F7nBm2zI703sW/kPtk8DmhiyXj1LV1z2WB5qtiWyYPG4PUs2pZcwdq5aHmXPBA3god72Sx1Np0RffUlx01KoIzWd//TDaYzZp+/J91JGnkhctqDzYf1A4Vy+mWS4ccRneaw0uRvVJ3GfoiJyhQRqRud1mHagrq9dIKdpZxbVzObXdMHHkJBa1mb4wchY3tKpSTSDD9is0l4vdng9PI8mQh2Scn5lNEph397NWX+6obHTU6mFKKq5JHJ9TXeMqBQCi/ZAH1ao/cdvWpw15ZHRFUSfaLh3YdEJ1N1y4an0Q0N1/6E/Ye3AGy1lrvRkrqriRcSZbLKlLzc0VsapgpwqjhgGetU65paKZc0Zc/RqBjGMZYtA5zO0RFJQzOeUSg4uZraHPIE0Wh0ir05ub5i/AlmRnU6YagbmW4V1H2I4ya4KoCoRUsuKg6HHY1SubqKJgi3JztNCaZyz47uXrAWObcvbnmby/P58NcHtPcTTpOCRSKNio+Nta6p4p5epUnGjku+38I5R1f1ieJckkSXTkXYPbYnmCqowjNtyi7jdbplaqn0jG+yyQpW899xVmmnD9sSB0H/XOH1Kt3TH/mgGby4mxLfSvuR9g2Z0aMNOrd3MugztYzH85HqfCJTNb/CHUjyZ6zgFhRaUWmXqahfj8/EmM/j8/g8Po/P47/s+M2b4ClP2KtksmPkxPqYq1uHLxfS6zpdCUOP0xl4vowO2q3Bc9yAbiBSmfBt42uegg5n2P/S9TxcRQyug532oG5Qmu/gvrTJDg32ROUcCpM20Qh0h1wJYwu3Z3l1CYHV7554Cvb4Sk9zsXzFyIXQdXms1G9oZ8rjhrk+wVSKKZlx4mpm8eFnnWKsckc59OWOSL/jUQUS196Yx4cfufoqRjNUDkMr2Zfw8G87Dh8TtUXEudJ4fj7ROvK2kX3i5jqb6zQleB8LltMBPZowygtaW1H1nw90UUTMV2wNGVFu3zZMKal9j0rl7vzpNUQW/lc+ZiuhT63sCX2fYDLGU9TttBjw/xBxLHTeqjzHYA5kosI8vsdScHWqXeoZjp0a2gLDqPF6+VK0waARFW7l4CuIzDwcSWsT4U1wPUnLnno+7zKL83Fg6qii2GiC60yYDD7WRM65rQ84VkNXWUQKDnu5+h0TSpaGRdPK77PcijpLKY4lnfbpxHfXWdSFSdfZnA+q7nFoaY2UNC1oVPHwzJ/zYxhhDzorRQQbvfiKPkuohUWr1FHC6I6lVdFkGW4kbzN5P2AWKdZswVEhGkObETUZVpky7eTNuqx8jvsGzeux9Esof1CiqL0DoalRhRZPKqeRCQPbsqjrB0y3U2uWUSQ1UThgq6hfj2YYkY5vWnz/v8i1aI4Nf75/TbnZo/vy7M0jCz+KcHyD6Vh+tigyJsFAZJnUSLSm3Z6ozTHu6LKkw1U5zDgcY5sWXZdjjOWZ3R8FXl3RsadS+el5OEVoFk/PKaUSNH7x9S2r1R2ef2KmoL/JlY/j6QTXJnNF+spzG8M3GLoK3ZJnIPZj2khQpeCrz5atwK0g1C7hxfP+np0iVLhaTddbvM0hzZW4st+irTtqU8fRpK1wqxRDb4iMgdVXEtZejsBONkRBTzxSN/UeSGoCreR1L9d7ehURTVZsCjBDaRdupnesn55Jt1t6pWqV7Uya6BP7t4OykM96zBKc0OLxZDNSkDPBFH1konsGZSL307rumMcjgj/eImylBuUaLI0lT7rG1U6iEld/d80qGPA1G1+V6/hVxlKrKeoTlcr/rZoSU9fQtZw2kvvzqh9TiU/kXMOBUajhaIp8VDUMQ49RGhzUTdhuQ4JwyoBFrW5902hF8ZzhCZNAlWzdp0c8rSf1PVpbIhrHumX2akZVDxSqlldzCxyh8zyUmL4S4HA1nCGkNzVaVf5i6L+tHfqbTjA9aL90C1jc3BCGPZPYw1CwV1rULCOTwRj4UMsHfdpu+Gq1ZLK4ph8pRf44ZNJ9w8lIiHP58K0fYEcj7l5W/Pf/88+ArGFL9IhmbNMreai+99G7gGDssnC/AWQdySlNLuY7xB5tblEqaa3t7shN8Iw/8/lSFR7b4yX1uqKeQd7Kx190HUcRUOSCXsF8+06nGqbEkc+iUQSF1mXqzWmrOZtakoPOu5o3h4yi0Rg0+Q52e5P3TweKvuZZk/CdW106wfWfj4yuPVxVd7OYxhz9nh/ebDBUwv7ffvwXVldf8T/fXmMpebVJALu8JlunLEJpjF0zpd30lN4E25OOPO9Muu2WbKTRKMWH4nTGvJsRTAImin2pC5fO+jdqvWE0kXMx7i8hu9CLmHgDRZH/ogYUtD2ubmI3JppiJHqNL53p+AuCkYSWDqeKV0HAoegwJ9KgXM9MYldnbA2/MLh0bYzZjBCnZ0JLfqHoa2KtxusGnFLldTqX0sqwLYei/nTmO6/OJLmgLfe8eftv8nNWT1nuEOUW62MRbTvgej71OOLuj98DMP3iiuObtxiFhudLxxu2NeOpzf78TIM0vG7Z8+60p+gGtke5J095heGYGNGMRumBvYw1HKcmebxHiMv5ThX12by7gS5H6CYHRQKxZw6O7ZAlNTdXfwOAv5qhuSb5+oSnAkbD0ejtmldXV/iRPHv7aMtXwsNhIFfM0mgcYI9DRrqHq9R2NucHRtozV1dzLCVSsNmkBNoELbx0gp3q+hAFDkMHue3S63I/5XmBKD8wnl+xUKLaleXAJCC+HtGqYOFcwzJwmY2nRL7cn13fcjqluIHDMJLGOFhFeK6LSGt0VbdsWTq+EzOOcwyVY/YNm8BbYdSXOcHWc6gCVWNo6VSGBn3N6qVM2Yhygzm4uFRUSnw8CiwC3UePTVRcTbp+R1EfcH2fm1sZuE3DKdPZDN3VaVQ+cuNp9HWEt4Wdqlt0i5KXNzFj1+WkSUjvtH+H2V+a4cXNiKqVDqBzINRcrpYOtuq4Y48GirBjOr3lZ8VcrdYl7bmn7DoCNeFuaAhth5k94e57OV+r6WiLEyPXYn4r1/r0/g1xMKZ/s8VUwvJ9n+LsGnQLGpWuSPsRN38zu5ivEALfDrHU5QDHpa4Edjyl38v1ybcFbhBhuBOskart3O1pmwO7D2cUYZY8KXHurmkOHULZz+nNNZE7YRY7uO5HmLjCXE0ZBKxbFXzENvNgClWN7StfI/5/dJEwuoqJYnfN5x6+GbA/6Lih/NuXL+8IYp/t67/nQykj7es/foX/8gXWEDP6Rj689iLi7vw77n/6Hzy9l17c0Hq+Xl2zffqZHfJGsu9mNIaH5vvUZ7mI2bnlsDlg1oKqUcW4p4Kfdu8v5ruIQtzIJBCqyFrz2f60xZ7c8eJKOoumiSmnP+BODGZziTfb8wmnqsL++ks2/yA3XnU34JynPJ07WhVYGknKIYyYn2qOqhr1eauTpjWd42MLadzrwKSvanaazuAph/x8STQ57d4gZh6hIfXx7JFAy8e0xgfe3suN+PNxg6EbvAtH3Olyvo1u0mo6SV2gaTLi14ySxThk1OUMI2l4ps2RJohACwElN3ZdsLan/LcvJ7xSxKV1IfiO/8bz9meOB7mZCpV7+vVwRzZ6DYMu8NRhFG2J63gMnUDcK+US20PHZGp4OLa64Q0Jq6sXtIHJsZGGomxzxn6AoQ+ECiGYLb+m3lsUlcBQihn9UNOzJasyTHU77Og5pxpml1AHn66W75Mz2fMH0v2Bx6d3cr5mgDnSSQhZqLzrNllTei7z5QxtodR7HAfhGizvbhkpibRm/UC9qQmubhirQv79/kzU3+GdOtKT3JOT6YLlfIFtm3QqMAr6gWS35pS9pqwuO4r4qryicyvEsaccKr64kXPZVCa9YTAZLbhWNzxnsuBU6jzqNq6STcuSPSKvCPweW5VwdGT87usp48D5RZ/11AkmYcjS8f/dqFYbvHjFH66viPkCgMfljvDujzTapdE7Z/KcaF1Ep2vk5ZlKl2c7aVuMwcLXNN6pnJMpep5OPbWwsWPlyGyN3rK4WQSYqu/ah8Oe9fYDs+sbfNU6LBxH5LrgajVmZMgzsGkT1qdHplqNpyL9gAlV2WKXlyhG1eXMFcrRiJ5+ENytVkzU3tk8muh+QV/rvxRZL6YW2eYtvV7x57/KLh9a+p7vZxZpatIp0Qd3kpOiE9wtsFSwfToLzKWHPXVplEjB+/uEyJpzNnV05biubu4I/cscZi8sDJUTF51JqHvEo5b7Zxl8/ttPP8DNiL/9P77FVe8u9jvWWU6+hkSx0vWRQ+d8QPQdtlK+GkREVtVgevTvVWeaUsO0tpyzJ2wV4K6snioSdF0NyDlOr0NuZ8uL+bZNw2C7CFXgrw0Omu3RGwamSnpejyZQOzRlS/9R4aXocE2TstiTvJHz221S/MFi5tkMilQT3MjuL9PpBM+TNqrza2zD4XTqEW8kAzUp94TagK9Z9Cpnm3yixOfX47dl086CXpcPf3hfc/2/hvTNmmQtHcra6glMgfPya/5uIUkBmp9iNi1mOOdZOTfTymB1RZsu+eFZOsuv5zd01yHazybRS6nhKYTPv/z0jJY94XtSjHk6+w6ynykr+PBGRpBddma0ukzOasWW3aHDUO2A1pnHMEA5G3jOZOQVB2Pm4RXdaAEKRrKaGc7ExvQHTok8ZPvTiN5MKIOOa1XWEQc6aXripAnyBzmXU55x3DwTjxfsatUXUGjUwUtW9j3bRB6ynXNZC3Q+bpknKaOjiviEQ6s/0mgtE0/JCtU6T8eS+HmPfiUPcTlpuQpcroIbtmt5Iy2LMbnXYDQ1tWLR2oGJ5epMopqsktHQ9lAR3Ox5PgiCJwn91d5f8OxbvjGW/KS0Tm/1kj//p/n6kU1WHkjOKZ2CRFzdJTRNOlxaZdurSsONp0Tm4hdlneXE5+7lKx62JdpR3vrSvGYcRnjigKWUMDwSHB2c+QxXCSPnQ0VxKLGdhJHSEhRpzr46IFoX27qUnQJoRU6VJ6TnFEfVb4mq4W1S4CAoFQpV9y7x9YhhFbBVJR1m1uKOHDL7RKZLBxW/uIKhxJ4E3E0lQzp8WjOdX3Pcb3n74eNtdkCYgnfrlFUr91gVHyizgvXuQKUO56/HUy7f59i1IQ7R32yYTT+iFx7HdcX0egbtR9anRVX32HqFpbQc+84gy9fclyljpcoyMiw8S2c2F7ianEuevqffnTBnC/pMOqm2STE6qLQBV0XQlj4HNyRsL1MPw0dx6+FEq4MxdXGVlKBWJoy9gMbUeTrKvdgdTpS5RVHVCEUyuZouCHQP159SqefS+j1FKegOZ6YfBZXbiqu7CZankRrS8Zy3CVm6IzAqbFM5xuOOsjHxukvUpa/HGEo/d6Yv+XIa4sWCgwrIiHOCtiG1M0zFEM5+WhMG0AcOhmKMerZP253RHYfnQgZWcxvWIqYZSoQug91chJinM9VmzVpB8a4V0oUd9SFDVLI0YeT/ge4SdKG0WjQl9Tc4KT/86SduZ1fYymS3hUBsC5L7d6iqBNpNQ2j5jIIp9x9r6UpBTsI4sChSaWeieODpw4518QFaGbj9zYsXJC0YjyEvI/msdtihpwOPzy0fEWbDiUiby/MWeiZurOMa0vZqwmN7LhHiwHwk/UVbOuRJj1ivmfnyBp75JuXTgakOpZKKdLqS0+MjV9djJq2081am4TNw5XtYE8XWX1g8NQey/Y5zJhEiUxuoi5ZT3xPG8tyK7jLo/PX4TIz5PD6Pz+Pz+Dz+y47fvAkGxugXQeEgKHg6tHx5PeWHR5k4//n9hpuVzv/+v33Nt9/LaOy4eeZN+cD29DMHQ8Ej/7jm+6/2bPuWH1XO7eG8pvrgsmkb9upSl71L6Q85m+cD5kh1xp6OiEZjnl5/IC1khLZwYsZLH/4TIrpuCoyk4uEgP+t4J+7ubuk2a15nMvK6/uLvmE0WDJrB24O861jdjnD6Ja3bMb+S6jBJ9Q+kZkeWZ2wdmUsIrYDVzQ27hyO5Es899CX/8PDMSzvj/l9llJrQUmkVq9AApXgeOZd5IP80yNY3lryRaZSUuYs+wO6jhmfpMR73JMkWlEDxN9Ydk8Ch9h0iVYPvkKE5MVWvERYKcrZttEhQPGq8K+VN1I5zuq2DkV/xrAhO2kPHsfkZ022ZxTIsXXxCbk/XSpLqhBAZvVJ98SMXxzEYKodKiWp3jc00XBAGUzLVHXvIDYqww2wsZnO57Rytw+kzyuaMpnQDT+kBR7R4rkauunSfDhvqrqI9ZpRqxxqaRgMMnsso/nQdULnb02uC3BjoFToQLxzig85+c6BWZJTpyCWeTphOfbSZyhNaAdne5VhrWIrYEM+/xJ469Ls92khGlytjQV6V9LnJVDWaTd+/5/3PZxgF+Arm/eF1QtwZjOYvcY1LaLxVwgCtrmF4Br0XYKgSganp0pkphq1jqBtzm0J6fKYNHXljQzbV1YXFtjjQ+jIX+8XIwbR9dp1Po3Rmv5/dYHUmnchRiB638ZLj+jWvXx/xHAlBFa3DpNMguUQxWiFvaV2f486htltaJXo/ZcJktOR8yFDdzzjlHW2noxk2ei/39maXs3185OXXKwJXQq6D7uBaE6xh4O0bedMKo46+CEnIcBSRR+9rIrPn+mqFrfKzr3dn/HguCxD/0wjjazxVQP77Fy/55qsZz+//CU2p3IhooBIuyyAmVHnnYrfF6CLK445+kDfGo1aT6C3X5pxWtUOqbJPpdMqD62KHXwAQZLDfHOhfuPxx9HcAlN0zGAZ6a1Ap2ETTBgb70gy78R16JW3M+w9nPtwXFOuf0cdyrfuqp2hP/I9//H/YmTINI0pB7l+xzgeEUvSxdIeHTUK73dKoxtp5btCVgqRI+Z0SkTfKnqpJ8IyGUAmcUxacc0Elql84DU+7LZr74mK+QWTg9RtsRbTpYx2NAqfVmSpuyKGscNw5whnIC7kWTdZiZg3lqaBVyjLL8Q2256MPLuOx3BeeaeOkLbo5xlC26VAWmLaJ1kEcyvfpTUzAoUpyxgrBa7pPd5n5OH7TCc5vIgylgCCaGr3o2G1LykZCF1Zvobkuojzz03t5iG3nTOUNPG1zCld+/Zu3CYfixCk587MiIywHm3/cZCTbhq6STzW+uuJL7ZaD9gPbNxLmW3gzVje/56cfQFOSPG1kQPOJAt7Iw7m2MJby+7ZPMcJt8WIPSyiBXsNmk2TU7/7KRBXytisft96zOeWcDtLBiyzh3dsP9JqBoyCYrRlwE1hE6cAHRxqURCs4ihrrncdRZXZF3qBrJf3uTG1J/Hr+agR//x/nmw8fmLR/y2Km2hyVGlme0toHSoXpm57Fvii5sl1KpSKTdBZ3nkeZ7ehU0X5dfaDxBC/9GbmCwO/fPnDXvqCa9cxV/8WGiMD16aYmVyhG79wmZkPaVrhKbScIL9/vPis4nhL02iFUmz07t1hpSlI0MFXkBg2GY8nz4Z85Kmdp2SM8y6B1NDQF/dlJwWb3RC5qIqVMFLrPNHlOJQqEgmbXyROhH5I3BtlW1XvGPpXpYZniF5X6/zya4wbRQa/r9Cof5jpjfHfgjcgJx0quzjEwTZ/ZbIY5kvMtvY7aviEvSzQFy7aRwSr+lrPp8LSXjqw+NfSWx/T2JTMljPDBDjj+tME6GeyUY7CqDs3yyB3BKLg00ru1VPN/2hxZUuP7LcNH5ZLuyHikY5nFL9J02T7FxMA4dzSDDPCsYI7ZpvS9oFT9HndCML0ZsIqaj6jxZB6xOaY8vdsTq2V+8WKJ62/48V//Sp0ofC2Ykb1/z+kTAs+lJfedpRvUpx2dHRJPJPTdahalSMizlLZWgsrtBNe0sWOPXCjm4tlm6HPKs86VSk2YjkZXHei1hokmDXnVJJTbDPOFRaSKu1vWxEufURBwPsg94fsGaCbt8bJutPNsTOXc63ZP8nhitlxiK7jW1it2fYV+TsgU6c6dXWN1NX/6v35EGPJ52yDEe0jYTgzmC/m8mX4m6u6w+xllKV/oqdiTnHaY0ZLwVga5IQGhHWKOGtK1eo6xg15fwnVD1/CkulnsqpqmKshTQHXhcUcR5ZCTP0WcMrl34rs7dpsd//L+Hd1Y2qww9Kke31OLnlaTf5uPjozslCvP4Wolg/784R3v3/6EX+QkqgbUGh8Zipq0zFl+8QUAs2iCf6n1gG4O2HqH3UrodzBNxrFHU9Y0+GrOFj464Spm+17VNxd7zuuC9/dHWtWLMPAc7mav+MPX14xmSiLJHCNWMZuqR7+Xn9XmLfdWSxD73AyqJZRrYbkDhVFTqvrhqv10uuTj+E0nuJzccTuRX/D6Yc8u73jevmZqy0V79cdXtF7KthSMU1U8fqjYDAVrToha6Qve/Z5zlnHA4CpSjKrbF/THE9YLi0axyrqkYWvrtLrGi5HcJCtPo+8PvPraYneUm3gchyzvVvCn/zhfL5hyNvfMzyqSCfckqY/ttWipNG4//fQP6FfX/H60IutlfmnSlvxUCNJ2x0875QQREJQ0bUCuukM45Ya15dL1EYViS237liwcswwspirgMCYRwk2JfZ3pXL4Dx57x3/mn/zDfvurxzIZB5TCmtoMfVvz5712w5QJ6kU/6kJJHHXeuurlEKZobE2xrjEAdoG7OLT79qSJ7+CsA30+uiGeyf5vuykPspwuMaE+X59Q36rY913GHCOcBNF+uxQ/icmtUrSDve2LDZasQgv4Mm6GnO7cEivBhj17wrnwgOfdUKsk+iic06ZqqaTiqRPUgYLNe0w+CuepfOLNrWmNDTfFL3qkJTKmc0zYYSqihrQZSYTMKPRhfyjiBpJYXbY/QAlDqQJs8pao65jMDO1DthnydQU84vBWMv71R31+xCKboWsiPa7mw5qOgLzcEouB5K52MTs/VZIEpCnZPcr7W4PBy+ZJGdylVmUM8X6H3DYGpsZheEk3effiY2z3RTzNurkbMFKHAMwwqo6PXB9KDzCeOsbn5JiJPKrYHaQRN+5mBikXfc3qW34dhU2wH7tMThXI+56++Ry8aRJqQd+p2EDoU1cDUHWGN5Z41MHl+PPNme6nTO1L9MVNyitJi7LpkO7lntQFEFzLoBmNVKD3g0Do66SknT6UV9bwJX363RMek/VhUrzs43jVYOakKeoui4Vz0WKlGpjRWz+mOkeOR1ifOytEe2oE2f4D6MieodyX9Se67Q14xihZ86VvcKmduj19SpTk/vveoFfnKNGoeHp5JKSmV4pAvTIZgzFmHsa4iiIPB++OfyYN3zJa/l3PuSwa3hEyQjBQapHtcf7siGhv8kyrkPu00Hk+XJRLVsWD3V3kTLusdZbqhbA1GE3nG9MORBpe3+SNpr9jlr77CMWzMZoNWyvfUdGCGPXpZk97LfXJtB4znFkaf43Vybm/SkmSf0tsnbCHfn6u1pKczXWcwz5SownjMz+8/xbYUDHbMWuWYLXtLU/u0rctJ9aSd+A6u0XJ/qEiV+tXzueSU2wz+jD6XHJLWMsiKI21f46s+gdpcw3cD6uJMro57e8rR9YSuyKhVL9emzOjNnuRhS5FJBM+4jOf/w/htdqhjwUfKa9Qz5Cnj0Zzf38lDvBxVCH3G8+4D8Z38qvR84mRltK1H4yt2l39Fqm+IiopOXdPj8Aq9DSh2R3RdvvR3h5xB6Oi2x3Il/3buC46HNSPPZKbUN2KvY+Z/orbG2iL2gkaxrYIqJhIB0+iWbJDY6dBpmLbDc/NErW4VY1Ex63fktkuk1DIy0+Ru8TvaqqdQ9XT59shwdOiGHXvVaVkL/oYX39c0fzkSK9WPOoA/zl/SRmeOSozWmF1Gey9f+ejzEF1tnCgc8YfoluqLA4871dgyiVj8Ycw3M59a3WYs3WBcJPR2geHLCGjl2JTGijYWOIM05H/7t19j2CZPniBSESrdnlPaM3854pUqf3FxKaoMXTPRlSxNnF1Cdo3W4Y4mtFlPeVAGpdHoiha/GrAU4ltkCaIRNLWgyNQt+vgB/a3FsRPQfRT9PtCmKXY48K+Z3MQ31ybe0OFPDVCaoIHucehKitOJTpf7zLj7HTguWjuQF5+O9DrbRBMtttZjlkpyrh3wTB8j7lkoQySMkvFozO7DmvpnVSMWa9grg9X0ln2pGJSDh5X3xP4U71o+7P3bD7w9Jmhni92jIvykZxZ+SN8LdIVAnOszi66g6lvysLyYq1C3D1MUCM2m0R1Oimm3E3v6s3SNN3YAACAASURBVEZ7ruldKZvlTL7GLzue6keKo4Tv7LNJZQimcUyjiAI7x+XnzZn9uaZz5e396puAwHARfk6Tyci96XW61iJ6ccvhSf7G4bnjeN6y3V7W3ZXqlfdBTFHlZO92v8CD48WYzhzQXIc8kX/zTZ06Mxk7Om4v52H5MZGu0eUF52clV2c23Lxa0OgTzic1t+yJJmkQbsNJNfM1Bp+HtKPb51itWscaRKnTlZdnrdUibKWYfr0ccRPMOGktruqi/mK14p+zisf9A+ZeGs8q9siHI6d+RmtLx9iva6KrAfKUD0qPNqblnEGa5aBuVoswJrxZous2xitp88ZuQO+v2FR7DFWj3GgGxid0emuzo1C3ea0tGIqS1gl484/yXPqvDEqjoe5aPFfe1O36CLue2EgRoXTa61IwwUNYOkEsodTHbMso8bheTcgLJXWHxTlyOSXgfbQzZYPvDtiGhyq5w9MFfKLsrutMdH+M+BiTdz1Zm2L0gkKtRzNUzK2X1FhoH6HzF7csjDkf3m44qbKOXtNIjYHnJ8GXtx8DGhNr8OksjReqHjURHr7rc194lAo2SdoGvS8xJzGGcrRd+gnm0a/GZ2LM5/F5fB6fx+fxX3b8tmJMldIoXUJLa/n6yuXq1ZS/CaUX3xdPbPbvmE4CDNX659sX1zTbe94c31Mm8galX01ZRAE/5mfcUka8Q2zwtE559/OBOFe0Wq3BdTQiuyCeKHrr0SU7P2GYY3wF6R3EI+knOsvnfokrGjRD1riNp9/RGzVP5YlxICOjyrBotAqEwVJFS6Vbc+wqHtePBEtZmpElDcNQYXcJXSxDn2Tf0ZdPDLmDX0k46NWrHLO94f39ibHq3Px3f3jFSX/Ph8ctmlK58ZefaKo7eNydC1CtcA51TOne02cHgpOMMvdLjdXMpjbH6LGMqkPdxystKm9MeZa/ObgW7949gflAqW5Gxv9dYLs+3srkOJK3dzNvMH2HeTQle1IEGmdMGJhYQ01lqALTTySTDQzm0YKka+hUjqRsKpwgJlzYYKqcS5dwLHLKVmNQ0LnbmaT5kXM7YCkKvua0DGVJ1RnUiiziTO9YjiJmgYamcmfhdMmH+w84zpiD6lTeZjm+b5MKHTv5dBcJez7GaNdU2ZqikRBcow80ukV62tHO5Pe3bclxu0GzdJpGvpNJM+J2YVLkHbcK9jpmB4a6Qcv/X/be3NfSZF3z+kV887jGPeZQmVV1TlXrAt06UkuNwAEhECYSwsFBOICDhVBLtENLjdrDQDhg4GFh0H8BLk1Lrb7NveeeoaoyK4c9rL3Gb54DI2IX59ydtzCug3QzrNKu3HvFiuGNd3je56n5+E6nkX7359/jOC5YV7TKrLvtEiXnZGXDZGR5umZkG/Qshgw+4fnboU7Ndu2Rsm55ONh0BpBS5jXPr74gihIKk748nrZ8zHPubj9QGk5Mf7XADRKK3ZbrxPD7ugPZKads+Ylp/+2f/57d9obJsbk0wBAn2eIOLeOUc9qaVGrnEskFIdsn8701JMpTMHHoc45Fz5k542MtqascupAx03ZBhQlWr0CljCaquop97EoR+oqtYZbZv3/gvnJxnznERpB4PpvjkTEee6RtQo1FSp/t2ZdHzgINDEkTn81NRXt8CkKLrYB81PPzgg7vYoCmwTEp8Xc5vPl44P4hp11qTMFQ3eBv9vTinmyj10k4Fpx8wqsznDOT5ltfYs9tnLKnM2ndDw8FCedI2XG51dFrdTXhZQ6Oo7AMH601CAL/6XkQXcVoSAuUjFlej9yfGrjUf+vs8poy9ikLRWFUTm5PewgmVs6c6UqvSf7D95wywb/9b/4d7EKfk/d3v8dZKBarM5rbH/S6Z0e8oaB9aPhYmtT8ueTLxQXzwOPcsAYlLPAepUz+YLz/eCS5CqiNdBZdzWSBZSuUqTHXrc3ttEF1MZYhbrhYLnj38YaaiXMjXOxUmnHmUHRsGm1TLkiwPIt07RBd6XUv7gfqsqAvKypTP1V2jWvbCCcgNSQkh/zhyXz/cPzsI3h7GugNkfXZ1GB7gi8vVwhDBh3j0aZrKnmgkaYRUyoix2aGzelBX+LGdkirkC9nF/SmsXPY1Mim45t0zYWhQPvxzQ3f/9m/YJ5aOIYyqK0OvPZ9hD/8RKPVPTxQL582y3d5yezK4WKum89nUUDRnXNRxJwu9O/e73bU4x4r+hJ3rg1vNQ7sSp8fjh84m0yz/PmKYn/PvJuYRl07DMKS402OG4bYV/owHuo9Y9zADPwrveje1YLk0GD1N3gGabVOnoI3opWgcQswqtoyf0f2HrwPe+xYP/LybIkT+iyXDl8EWgonSTsc6XLmPGdvEGTbg00VnWjzhre/0XXNejmHmcMqlawe32DpExce3+32PHJ6P2S/Z5nMeAU/1WH88mm6Oe86PDExyhHpmRRZ3NEIQXJ9BYaodsomhnrgWG5IA/P4pj7DWGNLEIZaaUpKXDUSrELODOLsfLVilfjMzwImwwTSjzWt5RE99xjMRT5WBc3JwV2kxOnTdB1A0W3JJ904ezIafjY+Q5MxKYdeGco520P1O4IupDc1rMNDxm6xZHbd88I8lkkJD7dbbqqC3dYo1asA4c7okXS9UXgPQiZHMrd8IkMPZQkbWQ/0QYjgaXomMg6eV0NTd/iLA9IAcs6vPRrHI983tK7RV5tssG2EJYlSQ3V3qvCckLFqed8bRqMfB06HDU4QYo+6JnR/e0u1v2OxviS50Gd7HANyp0JkLYVpoBRlhyUsTvXTs9Dl2nQ4nmJmhcQR2KZ23rYV5V4wj12ChXY+1GliHi+Y/CWjMTsXTsDERJXtSQ1Y6jC6lA81ozXgR9ourMIUTyjcMUMYNhO59bFtxbXvE3r6cE+MOFbL+/JpKr9uCmKDjtxv9izWNsM4cmto7UQGH2//GTf5Bs+AucZjzul0x9AMeEZFYbdVKP+ec+85MwymQNY0JUw2BEaL0S1rAgfk1Rmu6fltthk/Wrd0rUfb63thzS5xDp8ASu0HbEs7wtXkEFkSb5kTebr8oVKLPM8Y9hlBqpm0qrahak4kl9/gGhWRUkSUoUX18YBo9IW/uohxxcBuf49S2sHZbn/DpXXJ2ddzRK73Mb0Kef38nCSdcWHktA5FQbl9Wn4IxYBXDhgmQqQMya0DxxwSQxOoph6rA2udYhs/ZfAkKvQQw0hp0KGx0xF6Ack84NTrvV2Inqmv6cqRhSECd5yJvGwIRws56A8uqz2DH/BsHdCYc9GJny8K/uwjmCQJmdF4KuuSsiz5zXfvmflGjPWrJXYf0YkdbaY37O39HUdPgh+gRu0xuK1Li8/X1y8oDVOCN5Ws5ZzZa4dwMtx/7zIOFjh2hxwNo0IQYnc++41NaOocgxP8xGr+h+PCCphEQ23mcj1LeXn+CxzfJTIMMwfX5ZuVz33xgR9MoXy+XDC0FbvtDdJEUWLv8cHvWMxfch3o7ztaHcO1JHArUgPzXlxcsb89sjhf8HL5EgBZC7L2yFgHRAvtCEzi7Ml823JCFhbBXD94x6HD7UamMaazDZ9oa4MteU7Ms9d6U8vcQcUR+yAiz/Tafdjc8d3DHUdlszzXNYK/sCW/uFxx7ByiXBtKb9bT2g393QwMaCU/RpyyDG9uURm2jd4KgT/2qKtjw2H4wOk0sjL1hfP4gsgKcG1FZ2DfzdjjxxNngcsjbmcYdqTLCmGFyE5Hvp1bEl74SKvDMw3UZ15NlreosP6Jpf/UDdTjROQuGc3ldq2Jyu4IkgXC/7SU0n53oNtaJFHMykQ83nJF1jVQVSQGzRg5Nae8ZSp7pJFkIfSxEo/ECxiMJ/sijnGWl+ysit54smfJBdHikq7uuDFnp2p6pqIjloJsr41iXW0JvIFfnHts3KeUf0vjQFSuxF3FdLKlN3UOO1yTNTaNGjmYrEHqC9qhJUlWpAak8ttf/zn5uzeIaE5pmsA/VDVO47NMI4QRHhX1Pek85XKRsrx6PJeCrLpjzCracG02vKUrS+QnaKdaA/hxOodl4pPbPRiD5bhgXc8ZlEU46bn5sxQxWvTlSGz2Swjwuom892kNx67nBTqaKgVVZdbJdXAdl01+j9s/NvIP2LbiYpHgm1aXWtng2GSfqBFHZ1d8e20+ownpho6qbJCPJArtHZ0VYlstgTm03SlneXaN5Rz403/2L/TvSgclL9nXkvy93ovt/p7kPGXpBkxbfX6muqZQBb08MNZmPcWJyv2Cy2cz1KjXL7Yv6OynNWIvbEmf61rizLdom5D1PmAyGoONU9Hsf8AZBa+vNFFJPQYsZUBeZ+yMk2JVFVejzW7zm5+ax5N9jbu0sW1J/b12+u2+IDq3+Orqb7Fca9vmqHu+unjJi2dnvHukUez3VKenqgxLf4YtXSLD4+vbPo4KmZ9LpLl7+YNDPQoWvmJY64ep+i4nubCwm4hmp/fnKlozoDj/ZsU3/6rOzC0uF0yuRRC3ZMqIXBcPjM2R4rglv9WOT6FGnLWF1020hr0H9elM0eP42Udw4UoyU4Q8dQ0vXZ+5WzBM+mdh/5yP+W9I3YTI0h7K2S+f093e4Ygdr15qb+d4amlUS1m1vEy0VNH9h98xPLRM1w6ZSZve7HuWy9eEVsc46QgnTM+xuohhU+E6rwBIdzUXL5+K6qrFBW7j/NTDdLJ9VuGaaTkyCH0QAzujX3oMPxTkUn9ue/eGcVD8SWRxa+Rmjm2NetfCtzWNpyOwwI14PRvIdwXPTQ/KN195vG0iglgwM2g+oQacRhG+PpIX+pFaT08NyflZSCRToqW+iOP2QB0p1Ncpga2NU/qxp5U9g3/OP/+dNgrhVFOulnTznru99vh/FDvezS0uCsk70+vXZ4r1WPHc+YbK0muy237k2fiSTZI+4k6Y+jcQ1Xy4cZgMz2ETPPVORQA0Ib3bsK+NmvX1nCtvTZedUJP+3HlqUzQDvnJJAiOg2ylsmaJCQdmaHsi2R9QVo1BYRtetlxXCGrG9Gb6RbLF6h6I4YqmSaKEvVGJJmPnMFg5e8OnCt28tkLHD+nLFctDf6zjaWNJGzC45ZdoxEqPA62OO5Y7CpP/9eqLdCrKo42CEiy9GydgJxl3HZIRQI8fBzwes1uErgwRuyg4vTGhOkuW5aRupSmx3hLXDYvk0K5C3Gs3nehmOl5I1I/6ZYTQKXKhaHNvF0OJyLN5T5y0nOdEaJPUwNczjhLGxyK3HsxgiUpd0saYY9V70qyVpC/mU8esftIhyIlzWkQWRRBmQkoojeuXi8jSd5EaGhzQOWC49RKaozWPkJzOc1qVtXGJzT9bzF0ylTR1OjCaqGBufhh1S9qQzfd5bpyYKUk5FxoORXauzA0XaUg+QPj6CcQh2gxosaiPQOvQjSRBxbcSI/3AsPZejcQy+XELeNWB1BGadRuUSB+e8emkjTDjjf70ivztxyndcNvqOeuuUb7+9op0mhkdgVW9xGX2J8AY6A7QZ7Ym7rsLb1xgKXObPlnxzteTiqy/Z3+lz/OE4caqfpm/7ocDujHxTYFOKhtnFjPOX2mF+87vvuTx/Sb8IuDjX33eYTyxbnx93NaGJvl5FAQ9Dy5hNSE87kOfzOc/OBL7ncttru50+2Dx7seT5/JrQgOOu0l8yi0aCcM71uaFwqy3y/v7JfG3HxbMSSvPgbHsFtmRpL8hM6tzvQkpVstneERguyoqawXMJnq0JU72e8UIihznL189xTWq6dRxK1UAz0W20Lf3+zQeaYcfkdUwGrTMLLzgTHlZmERpbFspPO8mP4zMw5vP4PD6Pz+Pz+Bs7fjYS/HF3pCjeAhD2FTJ1NBy91WHrbfKOZS+IXEG8N701ac088PhVP+NNq2sQiZr4+vwZgyMRGx1pTQ8t+98/UG3uubjWXsFXzxZ0laTZPdDX2gtqmwPDsWN7ErjKvOizlLl82gt0vnJpihl2Z5gcqopCHBjfWvyw01FUO1/iZgEq3JAKE+3kPtPU4FlnWJHxWop7vC/nCOng5jrUVpZFJktmi4je1f/u+zclTffA1My4HXTqUypBRcvs/AIn1OsSXD31N/7kxS+Y8YKHznCT+jZZYvEqfkG9197tZnzgEpfL3iP8QkfW3z90zB3B3W3FKTeR+mBxNU94u9szM5D+sxcp5Qy2Ckql5zuPntF2FQ+/awl87WWFsc0zx+fG/47lo9Bu+zSF4AYeyIBkspFGgSPwIzqngdjGWRhS6c0DAyPR3EMaaYnUcbG8mMCxmQyUfuoSyvKE0zZIk8ESImDIH8gKyfkr7aUGwqN3KgSSuYk2ZTRHhC6FHJnE03QSwDi53D7csD/uEAYUUk89jv+Mxbfn7AvjyR9zFq5isbrg4WRaKcKB/P6WeSBwOp3iGQ4u5f6Ww8OBwUTWZe+h7gqi5QW2rz9jfzox7CeKLiCx9TolL5fMPRgHG8t6WmPLjJBpEMPZMsIeepbPddbEcWfcbX7Nm5sD7lp7/eMYUg0lqddzNF9/PT/HtT2+y3vefNCRZdE2vHyx5qEqkKZhKuKMfiwRfU/g6YWfRZLZbE1V9JRGsktaDmnkUiZPzcTBpKqdMSLoe6axJzDqMnZvIyYPTs1PyhLNeKIffMJphuc9pvQkfnxO6YZ0hgTcdntUqvDGGnUwac6hYzYKXs+/wI1Nz+5wpB07bDvEMlG+qiYCZ4Y9PQXy/G57YG3pz1guOyYro+0rhOltHOsTF2dz0nnA//07ozhy6OiGlsvOoz43tW3PZ1IRNEdSobNRd8U9v/3t9zx7dcnrX2qVjwdcvhqOnHZHVqZ16mp2jY1Ps4NiZxQ38on7h6fzPdFi+TpCXLqAEljz2U/N+KemI5x7+Mtrhng032FAeS6zOObVQpdmKtdidahp6yOne/05X6winjkO9tLmRfArvY+/PKEAbIk9GFDVYo4rJu7vbxhO2kZPqsP2n9qGsm6YLJfIgHn6/ETV2hwLGwZTilERtjeRtROTIXgP/ZjwIuThtkV1+u/mvQ0KGlfQmZKMu5Sk4ZJsyqlP+uytzlbYo8/tyeE6NncqiHDGgeJY0Zt7Vh7/GioSvTty/fKV/u/DnuNhx9hZpIFekBdjgBW1FFnH0miVVXcHxlbirgVqpy/2xWyNGCe2f/ED/UY/RmXRIlpFunTIf9CPTOBFRJHPsVjRCMPGcNjiui7zixky0CmJoTzwZ3dP6yq9ChgtQWgQdNtWMm57ZlXP0dQXBtGznkfE6zm/QG9E6458v7tDZQP2XH+3ufeMOIx5/eXfJn9naOLe3vB6HfDixZy7d0af0D4Ruwsy5ZMaY9mOHUEoCRNFvDSpyfEpOrRvWnw+Ehkj/rYNkFzQ9R29UYJ/kXhYw4Q4txGR/tk3zhovdrFeDByNRph18DiUYJ2tcAwRbXSMcdQ9oSexcsOokI78GPYU379nZup6Z2evqA6/w+8gNt/BzZ82SCvhMtktMggJzGNkqYxDOTBfrkkMirLIO/qZzdR2lIM+xB0Sq9vhBeFPQAZHTvh2yOgn1EZyqGt6WukThZLJGN++bPCjCN9F09EAU+BiWx2ebeHJT6tItHXNYuGxuy+5v9N7KM8jLq8WDMc9i5Oe22b3ljhMSS/WzF1TD3EkQirG3ZFHrrb94Q4lBPEAwlDYSRWRle8ZZU/o6prL3F9zu8tgKCmUYSqqHYQMERx4f7d5MtfIsOVbysefBXz5/BWmnEjdVxyylomWaDL1FafB9gXR8oLaOKWTsLEXz1monPXlKwAO7ZHEdqize2pTR7ejjNQJaZrsJ1YeOVp4qiOdnzEYjb2qvEcoxXL1FL34/tb0NS4klhVgSUFvUIqx5RN6CY2noDf0WHnOh/0Nq/gZL00tNhwirMTGHVy2xvmgLpDDyOz6Ge5Wn0F7f2LKHexoiXPS5y7rJeBjRRLL1JxG4dMWLmX5dL670+Yn7byh9blazzluf/uTM1cXFaIfUeGS2NZ3alOMXMUBv9/W1IYNahkv2DYDw75kl2gn/9ja4EGPzZ1B6kYzi95PmY0nSsPq9GZzJEpcIn/ivdE3vTk11OJpOlTkLpi7GH3p8+3rfw3VZ3zI9Lr/K9YLsBzCl19zMHX8H2/e4aU2YhwolCFuSFLSmc9SPWO41MxCSgg4ZdjbgvOVfnj82Tl2Z/Pn9z9wmej9saSiqiaqTlBJfSbyrmc+f6oikRUlh90RJzSUlYSMXUb+9oAbGMzHNGGNAWIaeTCk4mPe0B0V+c0eTKrbWibYlsPt3YbwXM8vdi6xZAN1+VPHgqglfSAZcwd/MKw80qYXFQ+7Hmnp92Iq/hqMMYtFilR6gyzVMgQzirFmZtg9SALaycGxLKrOwHkngdXNcCePaHwDwO7jD+x+c4cVC2yDNLv/8UfUYo1dv6ap9WEq7jekV3PW6Zrf/15Dd9MmIVzEPGwErjSHIpqxMDp6fzhm4RnKKZlMTVA1FaJ/gOCSc6lrDr9+91ua++/54m+9ZHmpuR7vy78giBPqBQwG+eR7AQtrDt3A736rD8DYZyTLmNN7wdE01KZ1Rz97xj47sIr0RlymEYM6YikIDdHdZFo0/nD4I3ShIDXSMl/1F9wgGZ2Ih1IbAJnaPGwDqg9v+KXhvzy79pHzDqeEydZG+zrMsIdXONUNatRrc5I1yXDJ1fya++dG0ufoIXubzD7x8lpHGkEsqPsY/65hO+hG6dXyKfAo8BeMVYtoCx6O2nEZozkqDci6HblpoLdTixSf1u1pK4PoHRpsxyaJE6LAPCplQdV2NGWJYx7VRggGXxH6CcogOuPYJ7I9etEjW/27tlDsmoq5N8dyP0F0CiTzJRwdukCRG1i1H1zx+sUVNAmxZ1grdgO2Jbi0Uz4ahKOzipjqLak9pzbHvVYOk8w5W35N8Xixmpy6qBnFRG4a3t3FOalj0caKV8bgN3lB1R1xZIHk6aVsJ32eLv2XrP2Yq+Ul21st37PZ3CPKCl8JPM+w6NQ1fTMR4JKZO/V93fJ3LlKeXz0ja4wWIxP22OHImNY4goU4cX4hCN0lxe1bvY/zGcqW9KLlxS/0udgPA4dDRmg/rWEOBhux2xRIKVnPAyJDiWhNgqmfWMwvcI1QanOsGLMcazHSmxrepAYS12VMIFam9WNwWSwVbafojSpLm3Woseb9jyWVQdb2XYfnTWCPLNzHFpYdZeVyPN4+me9vP35PnGq1mrvjkrlvke1GMLRp4dyn3hX0XYVqHyUTTtzXgm0jkZOuY8bpisIRXDyLfgJoSFeizmaUfUx5Y2qs+TOGJGCcAs56/fcG5eH7KcPkcsq1c3CfFdSnp5mBh/HE0iS7pnHFOHjs9ycMOJbl+Zp+6HCloDA1cTeCeHJQ65jBRNZJFFN7DaJWSNN2Vt19T+DkpC+/Rppoaeb7WK5iuXEJjCQWbUhdDwhLYs/177r5wFQ8jayGOqKrJcqw9/izmNgOaYcPtJVBm84SRmWz2x+43RkEct3R54LEtpCuXk9vDJickc4pwdj8rHvg7oc7xLyh7QxbV/6B40PLWHaYY0afn0C0pJOLMkK7kfvXQId2Hz/y5vYtAHPH4fzrS7KDZDLph9tNh1vUXJz7LI3kxTIMaVMtajgaheL8zZHEaTiPltya4rQcZnASzCo4c3Wx9083v2XX9eyTjuMb7Qb/eLvly29eIeM5wje6bgn4nxDOtKYOP1yzNzRE59dzwuUFjhfTm0W/sm2i1YzrWcT+RnsjZZUzyyzC0KNojddSZoypwt8VnEptoBaNT10OqGZi2hmE0plFefzAzc2G8JXuzYnHZwSpRFk9wrB0WNnTg+OkKbYvGY1oqdXbLEKBd4R3JiKx8p5IHLjNBiqhH6hndUGb+CT+itTRa/xQ9Rx39+yEQnaP0GAL5Y6MvmJlgCeDbdE5NvHMRxjU3+mgcDY39JaNutdpnyZOgD+eczLZOI4DtmQ0zpHn+di2ZKpKhkB7bRLo5Igb+HQG9akeBiwFD5sf2Zu+qKwcsAT0fY0yToIrFE6wQuQ5meH8S6VNPyhAIaQ+FzL0ka3F2IwI+fTBBri6WLDpJiIpWIw66nWngOLUMxx/YGEUyS8XL1HKpqwCZKu/s7VTSFxGe+RRezcN5hQi4uUq5XjSRmz/UONcPOOh3LNRJqOxq3GEz+I8xlWGn1VKepXjDDlZ/TSLURtpqtqpGFXPh7sbSmPx7o8FvSjpy4byzvROpinLqxnpckb9mJq0PNJEMKoRDoaBJUxxDzu8CVqTDvRai5kXo4aJo8mGhDYUY07ST3TSAJdmK6qPt7jtU+knjGFpRoVnhQz9wN7MI7A6/DTCqnweGd6F4xPOlygnxjO8uEMgcByXi8U5H9FRytqzEVbHWOes5wYY1c6x3YKpHfEMjD4JQsahpty1NCZjUO8mOpWD/ZQx5uPvv8f39Pxm4hVWbZO6E2Ju5MS8nP5U8uFDizIit+HyjPzhFjk/59Jo6AVRQHa4o/R9Ykc7m4e7hiXnFI2iMuAjLnwu4pRkHmDb+jO8xKFMrxhsH0zLhTV2uN7T8/v73Y7XBvAUHLeUv71hFAN2oF/GOPmCbLcnU/cErv7733z1t0nPrigODR/MIzg7i8haG6vveX2h/9776cSgFJZbY/xMRheK+zucJkeYXr9Dfo8TplRWiNrr/d5sPzLnKWG97QpiO/yJ/eZ0t2UROqz8kMbVdsFTNm1dMjgDlUELjaeR+XrOs3iNZ7hDrc6n7hSryyWjAbccq5LOUgxtgyWMbmnsc+4MqNkMWeo9O51qRmGj7B7HN5SN7mcppc/j8/g8Po/P4/P45PjZSLBiglG/k2cXMyQS2fdsDev5VLtcBw6+PxEaoIrwPPLqnuKmYLzTXvWxz6jbhDMrpTMs+IE/ME0do3Rw1zoKWH0l6YqJP/3nv6duTaSBy7GeWMcRjuG0m+PRRk9h8bJxONkF5880f18vHcR9ibzySSLjzq9mdKPFm9++J9/rN9DbLgAAIABJREFUlGPiCs5epMQvvyD8rf4ev/7hn3J/U9HXCeqgl+nusGOubCbxgbrS0dsicellT7K0MRgIPtZblkXF2VpyZpgbSBZP5vvFfE7WzTiZ/rrnzwVW5nMzliyNp3SPQtgB7n1PabgK33XvkM2c2/DEhanr5U3J5uED4ZnLwchG3W4heO3jvd9QmLRC4CWo8kTfTNy81y0CqxcL7HIgXVn0CwMWqeb85UjQti0WTkDjNDSxSTkrmwkHSygcoxriSAdn6FBjy6MTNgQRXhjSVwW1IRhse0XsSjzHY3ysaw0TL1cRvRv+xCpf9CXVIDjzPGoTgXSnhrrK6a2epXgKkgLwPcli5eNWDr4hKc8OJ6q7d0yZoDZ8rmngIVuLfnOgN5JOTeEQ+IKi74lNDSQ5S5mFId3Q4hgC9aS3sEOH3dHiy6Xei7pyacaWNu+YYhO5OD1xdMZk+4T7TyjLP3K+Ow7b04kwGHFMBn2Wekh3hhcEDIaVR7iSNLlkGSwRFzpiblRI6Ac4o0000+s0dgO3ciRxPYJzfQab7IDjVny8eaAyDCfV/Q5xM9B5NkWn74qtjuRdi9U+TdcFRsh3tVxhRyGizomNxz81DtV9y+xMwGMqTETEy4RosaQx0fbx5kTuxbjqFUGnz7arJkRREsYWlwsdccztc06FZGoaOlOLdT2PjfIYBklnVCQ+3Gwo9jtO1dP5bm7f8vJbHbl92L2l3ZX86u/+XS6k4auUGSpJeNP8iGVq717rsXOPXH79JbGGjVCWR9yppasmDr2O5pYXlwQXc9r7EyvD5TtLfSwlWUQRuSGQroOYmRC4w8jJyJ3dv/+B8vQ0Pf5hc0SZPtH2h++wVY+3nPHitQbeHHtFNQuI0zW7nT6LUnZcXtochCQ1afPzsxnWZsuuOLA1pO8z90BRC2StsCNTj9x1bG82HNs7aA23qw1VmfGmvcEZ9Joc3k/84B6fzHc99/Fcj+Je/7+yyVjKBKt1CEzSLopG8nrkwpK4iY5KH2yF3ZUUg0dtCPiVP2FXivy4Q9g6mjuPBFEIRV+gHH0HVq3PKF26ZmJrWGHE6LNMQu52N+ze6f1pq7+GlFLYDowzbQCqVpA0klXyHN/klrMj3EwV8WDroiUg7g8cWo+qzqiMztdUnfO23zPbgnINq0S8pG9sPt559J4mfHbiNf/y1/8Hp7sPKMP639geURXjuA6p6RuLpSD6RIN06EqkZeO6OsbPNgOHumX35w84pg4zi32ymxt2EjCUTvvKY5oSfLvnPtcPyNBfkr8rGKuOMtMHahVfYPkpD12Pa6jUjlWB5bgk0YzEMNVEZFSVoB0G7kza7Nn5UzmaKvkScdwSBXqz7jfnbIqCuvbYHk1qYCwor0KSKWBt9Pr2bYsrPIZxjhr1z07FLZ0ascuWptcGxVJb9jczprZnttbr/tb+Dd3bCk96uMZQNod3yLM1Y+jhWPqirOMl8P6P5vuwz7lOHaxO0RlqKhmBK2csL1+SGnBU2VSUQN3UjOaBr+qWyeqYRpfRUJM5vcNJdSS2R2tSn14QcsobUs/CC3Sap+xbHGnR+JKmlebvlTSTg+tBPXwaHTqNFlPRcO4uGAdD2l1N5PcV0ooQRtMsdD3qqSNMHBYG+TYNEZ5vIzxFZqib2k3P8+cxwzDw/Vt9Th6yexw7ou1qHKO8MTQD0m6YBzOujRSMG/oI0SGlYjs+NXrnM30H5ouYeRpiezMaU3i7vLbxTzvazqExv3vmOHz5y2uqcsDydDmha2pexzFx4HAyj1uZDaSJIFjEeLFez8POx+bEOLMRB712N7cnlq7DdJ4wTgbg1TQ8WybUztPSgzCAEjkq3LYhDVI8g+5rvAYlbezRJTS55KrruXJS6mqkMynDYZioyjvsvuX5TNuKxaTYVQ3HvMB7JFBP1thtS+9bPOISG8tlmgRK5TjGLqxOHlbmUfZPjZ6/BH8ylI3OgrOLGbMoJDKfkVUdmzZHTZLJIDe/376jLu4JlwGB8VIcAp69COknm5sfdfp7iB3S1RwRh8hA708oPJ6tIyokp62+A97UklsDyt5THTSSvC0n3E8QUnsEGB0ACifAFSll2zEzwJvDJGizkbK/47gzOU1v5PR/dvgLgXmz2TaCfCqpq1u+22tA1syyWUmH4bKh2ej7VFgCgYdludybmt96GbDPGz583FBOes+yo43tPmVoGrKKg3fLYEgkFr2H3XjUZUdlkP7NzCKazRnlwGhQyUW1Z2wtJkp2BlOwjC+ZuprNpkD6OojwjzaunLhcBzgmJdz6A/t9TTC3wNX3pzodCaixpYNtADS2/Pl06M8+gvZsztrYl7YvqPd70i+/IDYISgbJ6U3Nu+1AaYRSH+oHxqlDNh0/vtW1tOy8JvWfkfcpB3PAJD7WJLk/KAoMyqoa+P13Ryy1Qtr6YJ95ay5/+SVfXc+wDXx/bHr6T7AsfDzcEg4ujeGXLMuO4DqmeNdT3xmNscritrRIgoHaQNqHFn58eM+bU4Zl60fl7JfPaTcHunzgyy90QT32LBbehDes6NCf7w0C95kLjY81PYKIHOKZQroTjaGDyu+/fzLf68ojC1OyWtc6vaTDGhxSbJ4bQ7G3I4J6Rn5uMTMNyn0GqpFc+hZDoC/8STX8qHJG8YrI1Fyc7oB1OHKSJ6xO79nsQiCcljhwwMDNx71Ctjfke4vY1g7O1ZUDf0n66XTICaSkGSSYvZiEw9BPqFFwMAw0dt3TjlB0gqnQD0itRobSAbtjMlvRuCMCl3JscaQ2gpYDZaMIPB/LNMD6vsU4Ksqs4WScCpeR1PdxOpdPx4EQDZJikBz7A/XRAHQOO9wgZrVYMpV6blk+cjyVDIeOi5Wehx253O9KpkhwLPQlisqQprBwrf+XNu3moSSdB0gnITLZCU8KIuear79YkZp2AFv2bI47qnZLnz0t1J+f6VrK2LcMTUXoLogMelVOCmfoiFJBqPT+vLi44tyP+K665co4ZNJdsR4VjuVRK+2Ri3Tk2eUKGQzklWlPUjV12TBXktIYbS9rwe1R1UBTmQi8qHDOYi4/4XAGllHWGAXn3poocmkNnN1TumG+mzoiE7n63UA/jLj+QGwi9/XzkD4LaPMjuTknQoDrR8S9zTg8ZgdiPDdlciTxaNbYs6iFIs8bJlPvD+yAcb3g0pbw9o/nm8QDykSbSdBghRdM0uFh0g/Zh2yLlA9YroO70rZs3kd46RUWHobUinrYoYSH7YTw3NgZJJMl8VyX3jaOf1fy8Wgji4z9Y/2vv4CxJstKDkaFpmOA2dOs1vr8Ct/VmQV/4dL2H2lzOB11xNP+WcPk9oTuGYVxloQc2Zze8bJ7SW/qkJvv/y+6oUJQ0Rhlmq/XPuk6xj761ErPLRzPGB0f4QeMhhHm3bt7CndOdq+4N58he/snB+gPR78/kDOxjvScYxESKJdqqpCGRaavHRB7rEWCbx7S8xlMMUTNyKVvKPa8mObuhO00jEYc1RpyovkC35XExnEpVY4X9Aw4TAZ7UT4cOdQFaTjj0vCdVp8gKvnD8bOPoI9EGB2tm/f3pOuQQw6u0lQ7wSlgSlJoLGwDU3faM/r6yPbYE8xcszkrlvMrin6AQacLOpVRIXiWxuSm2H17qPD8aywJnrl4s6sljn3BaKX0o74UR5FT3T9NefTtCSu06Y1HHgCROOPrl2fcGLQldk+qLOoEIiOxYa0kdm9z7Fsik9KJsXntr2kcjzjVP7NlQ27lkB9YWCa9Go7E1jmu3TIZ1JKKAqhb5mufdWIil+kpwu677DuKo8TydFRxKlMkHlUXcjJe4FlYsk1Dvho6WgOrDruYcDHSDjmVMe4vPZ9y9Gje/UuEOWAyTgjPC9zbmvDCCGqOCadxoKtznMa0JYw+B3WiDxpi86Sow9PitxSCYbQQnFAmdTF4DkEckhU5BiuDJzsENW7ZU7QGMTraVGOJHXkMJtLwmpTWmWgHH8d4a9XUIkXLEUhMO4QSE6qz6NqS7hG4oiItsOoLmu4pjRPAMQfpWPSdxWBAJgMWq6tLltGSDdoAum3PnBWOJWgN8jmOIuxozdZuiR65DwfJw+GeurxDmIL9i1cv6WuFZdV4lr50njPieBObIqNotCPozgL2h5zd7khdPBV9bXrTcmAJxNTDaY9rqNSKbsS1R1Jrxty0l7i9QzvuWEvIGz2XizDFci2qbEtqoOpjc489CrJdR7nRBnSaSjw/ZDbtkHOdoaiCHbvugFQSqzNaiW2Hmiys9ClhcmrI56MkoKNgqc6wjDyOJcB1E1JfcGGAJ2OpcBdzuskiMwr3nmuxXKQUNvRGDskLJY5yUINDvzOAl8hDCoUnHuhPej1lkHIRn9OqiPJB26PDNqMfeur6qVn7Iv2C2cL0vwVnePMZ01TQfTS0hn1FaC+YnHs6Q50Xp2fYzgN3m4z81vSP1pO2IXFPYlDJows/frxnUhWxyV7YXkrTFMS2jSqMPFt4wMkE2S6nMPZS2Scc+6mTIbyY3NIZE7ub4wQu1ljy7mAybjd3hKKi849Ert6f1i/Z5AO1ClHTg5nvwHb7kXl6RqP0HfhxO1J0HaJruJg9csdWNElMIl/CTH9ueSyI8BkCYGdEDpI1gXwauiZuiGp7pLGBk+0weQ6h7TGavXUsie0FNJuKx2+cREu22w2hIwmMvun+eGQeBswTl8Vcz+/i7JKmaQkqG9s4m34NnTPgulCYEkvkK4SV0EmL1Giy2s1nxpjP4/P4PD6Pz+Pz+OT42UiwZs7qStcbzoecII55eR5Qmn6jumto9z1h4lIOhkGjUwxYMClEpPuNnq9WHIeBuw81c4MeaScL5SqEP6Mz3oM8wdXqEhnMEY6ORNxI0Uqfj/dbZoGJpkaX0Jk9mW967bCcLpkMV1z8paJSHiJzmH9ruAl3Pd9tT3gixDcCuk5vo6Qi6UPmJrc2vN3QzlJE5BAakIoQA+k00QQWrhEHFr1EFSWjMxAYDyWWPcFMEuDiDNpzXYdP+wTFQ0E+ZDQmqoweBkQc88oesI2yxP5UMUxb3sc2fW8Eiecl8jZAWRNb0yh7FUjOVMvWAQsd9XrrM9SxJktKMCm9W/GAJyOCs4aV4Ujc1D0vZgHnakKZSLCMn9aB5FCBHTEhcUPT+yQs2qlCtTGRUfmwBkUrYbkM8Tq9F21TItuJcegYDSy/H1o8y8GTAltpr9oPBYFwdP3QNN97jcs41fRKEplasRRwLDNEMyDFp7lDpzbHVT59J5hM+vrFco5tD7TVHcpUmBLX4a5tmKcuoelhPJxOeFGLM1lI0+zcMyDUQOdOWI9nLA7Iuw1Cjdimh22yRopjSdNa3HRGuHkJbd8jmgHRP/U9k7mR78m2TKWAMMYz0fHzRQxRiqTEH/T+LIOBgIL3RcvcMIukzpJACpJ1gDDp5buPBwIxkA4D90ZFISNkoSYaL8FDe8u1dHFHST2GWCa9Olo1i3BJ1zyNtJXZ68hJKIuRh6FnaRAQVdvTjg3n4TmeuSfOOOE6MaQeHdp++J3DZLX4sYU9mbJBV+INDkoKOsM2MwnBJHt8x6Mz0eYuPzDh4Qmb7SPHZt+zLwqG/hN9YZ4iN0Cr/rhDRYofXUFn0pJDs6MNJZQVRxO5ke3IugPHciA13832Wsq6Jss8Vtc6k6KakNYecOnpTFRWeDsCtSJzYTAKIdSKfKwYHUlq2szGwGUqntbYLBlj1fr32nRiGaxxpgTftAcUXUIzHGhrH9vT+7U/dmzeP6Ayi2am93rt2Kxmc1zXQRaGbWl0ye86hBh4JANqBoFn1dRpRG1io2MBrZ/gedesFial6aVk1dNMRlWekL5ka+p/aYIW1R5anFDbah8PIQVN1lCZvQhEAsLH9ixy03sss4K6aml6cOeGV7nzQHmcppIwM5P2OlTX8LAvaQxBilIdkwdW33AYzd9z/qqCiR4//wieBtxX+iKuL66wKHHdkPZBb37TCJq+5t22J3G0Ib/rOsYKstZHHLSB/r7a4deCG6fCN2mA56HHaT8xbUsw+oQzJ6U8lQS2YrkyjDF1jixa4l8+o7039aBYkURP9QTDYsCb1Thr/Rnz+BlxC7/b3+MbxoOaiYGPxHXE2iCUDnWDjCSq72havTmZGzHLoO3fsTWMDsvoK+zYY+257A3TxtiekIFk4fuExqhO6ojvSjx6ClMTnE9vn8x3/QKKjeLc1+tUMaKWFtPo8/JCr/t56dCpCdUNdHMD0JkiqnmCXZx4bgiAuyTkTy7nHMRHuNcprnApkc4L7O0N+WOTcdawDs6wL9dEvSYzEMMVy7riIS4JDP2Q2z8tJh/LI869g+27xAahVbUtXT4ROxOdQaS1Y4/gwKEKaY0kkx8KEuFQTGAZaRNhKywkOJJhMnpgyiOfWrKiY2HYQQ5jTlX1KCGx1eND49C0GWIskY9M4H9p3L3fgC1p6wJpUM5T4NG2g65ZmLqr5wekkWBqepZnRtdvEdNLDzUM+KvHXjfNTuJ4r4g8YxSOA9GLBVlfs8v1vYiCkIX3HNUN5IayqbGOnIYWL4r5YvnU6F1cagBAmayYVE8QRUxmb+3AI5r5uPYZgXGOLBGhmo6FN+Aa+ru+yAn8Cnuwte4dEPUtVmyxtj2c5rHemVJNPVUPk+knU2ONm4RkVsS5p43GF22JF83Z3uyezDc3Si35vMfqFPvDLSeD/HZtB3+mGLIjrXnw7UEiiwb7wWV70g9PMI40ZU3RHlEGQIUbMHcs3LEmN2CMsSoYhhYpOwqj6PHjzYbSliyWaw6mbnQoJspu4rh/ysBiIbAPes7v3XfQP6DiCfOr9Pc3yHhAHiaOhparVnd83NWozT2zpf6bQ+WhVAvSY/E7Q1K+/gKhLIauRQQ6DXmRWKzPXlDW8MNBlzss36Ybfbpmwjbao+XU4ndP03X7mwI3fUx9DmxPE+OxoG91b7PtWGx3PaL+SHBl8ANlQXcqcCdB/2DOWD8iI4WyRlqThh+iI/ebG7rRZbHQBPzK8bGnCDeceDD2faxGWjfkenVNY/psHVGSdU9rbK5w8YIZoWGHEUBZ2lRjj3isiS5W+P1E03coZYj6j3e0ZY+cYlrTS932Hfv9gVBaTL4G8zSDwp859M1AaGxT6gkYBJtsw9Y06UfC5rTZEQRgFNtwnE/0uf7BEEr91d30Qvx/CDF9Hp/H5/F5fB6fx//Ph1Lqr4SIfq4Jfh6fx+fxeXwef2PH50fw8/g8Po/P4/P4Gzs+P4Kfx+fxeXwen8ff2PGzwJi//799pDKkuFEqqesBO2rolS5CWqrGsy1Sf4ZrVKXl0DHJhmB2RlHpgujpkDFzXZxIsjGaVm3vskptokYyGTb24yjonQmRg+sabbr6hOO4xOkKt9Rvtrs+A5HwX//7fyyZ8r/+T/+UStVMGMaUUVKpDmFZYHp6/EnQH3ukN2AAaXT5wKHPkI76ieLHnkWUPYhOIk1f2zj0eFYMnotjBPAixyPrCk7bCstU2d1ZiB8nSOEwi/Qf/OI85t/6D/6NP5rv3/t3/x3W6znKkIGX1kjgTFyuvuEkDOtF7PH19bfYQvL2By0HJCKfMq/oGTgzoA2cmLyp2WUdX12YplM/5+5diR8l7I6a/eX08UQ9TPzi22fMjP7bj/cZNjYqv6czvUTn6yX/5H/8X/5ovv/Jf/rfk2VHJg60pqG6FArftWBymaQGDwSeougaHCZmnibkPvZ7qjpj7oWoQAMB1GhjOyPY0EoDbhl6hAxww5HU8ArXrsXYjoi2Qzj6yPp+QOgLfDxWM/0Z//Af/Bd/NN+//0+es7j4FYKBU2doxG42JMuvefhuS7XX67l4/pzRL/j+oeK00+s0n0LG1CU+X7F09Jo0+4GNjAn9C05KF+x760SedVSniW2pAQrP4yOXyZc0yZLI0yjnJNohOxfBA3Gq1+l/+Pfe/DTXf/Af/ut6TVij7D1qKLE8AzQRIePMQ/YOo+GIsAKPZBXS5BPH3IBvhoLJaZjL8CeU79gpXMejVBnSAIEUitFxsKuJ3Pys6RT1oJhZI6lvCK6jJVHYEyYB/80//t//aG3/23+sgR3f/urvUW4dNn1OKDSAxhMz8geBjCu8SKNDT12D1Vyipgc+7PW/u/p2zQzJ+yzWDBBAdQpQ/S1+smI0tGmbN3vOLi8YxA2Br0Ffw3DL7WbLF9acyy9NX3B2Iq/vOFYF/+i/+qPp8p/95/8xH74zyizTyC+/fI3lOswMcbt/4VM1DXYzMigjTxYIPJEy9RNM+j5OwqV4eKAdByKDwJyffcUwVFTjiGWUSfy+ZzWzGJRDN2mwVZz6bPb33Ly7Izf3rO8Hrudr/tF/9z//0Xz/o//yHxIt/h/23mtJkiRLz/yMczPn4UEykhRrihnMQHC7j7X3+xQrsq+xT7AQgQhmMYtudPdUF0sWkcGcGudme6GaherxQt3gclIvPT3S1dSOHj3n6H/+X3zHNTyybINlWNynwn+GZoTtWPgGXC6EH7Q9n64ucCaLH9H1zThy5piMmsK7vwrbztMR2zJYnttUDwKQtk9GDMXADnQKRYLIlAqlVkhqBVWiWRvXoMxT/s//43//m/n+3/+Xxa/PvyIuxFyO+4a77R1e01OVH7Uiffzzc4q2R5O9t9vjBnew8M8vUQqxp2rLIt5kHMeeqS327fGoUrkqWdIQybbVtu1RdROn2TFIIpGXs0tMZ+Bxc0eRCTtryv+FZvmxe2Ii6bbGceTFuY/a6oySrcXUVUbF4GKmIBHoHDb3YIDaHqk68RKNCiaOTR0neFLcdWwUxoeWvi9pJTw+XJ8zDj65mvER9G6bDeF0iqaWIJvqR9Xg6eFULiUrS/bxI30lpUXcgNFQKKoSxxX3ogfdpIwTrKmLI3npBl2j0yyWri0oSwD6Bm30wGnopYRRWSKoxZSerpINxb0Cno5ueHSS21TTTbKyIdQaso9o08UpU3yeJVh9T+mJQ0HdNPi/WpIpW97citYK3ddYBOfYgU3aiM/eP2REPphhyFZqBypDwl8e3rO9iblbi3aQ1QuPomiZU2FKNGtHjUNLdrxnW0tHGWfU/kBNxcOD2Cjfv9+fzHdQdnhey1hCF0h6qGOJoqj09OgSptyOA8PQUjYNnlSWcLWGRlPoFIWxEQ6vzSsqfSTQB3BlK0WtYhoFqmaRK/LAyxUOSg+mS2RKy1AU8qRg0AY05ZTLECA1VVytwXJfYB4FMs6eOaiKTa6bvN2Id2O+BKN+hWUdf6T6M9cR/3h2Te3fw62wu3ezCO9wT2rEZHfCobqtyhyD88DiN1LvctDPMKefE4QWSBaVyd6gW7bs65oiOYWYO75A3zX7jGbUafQVwyDW7qh3aPEMjJFMCkbb+shQaDSjxVFSwmm6jquaFEaN60g1EM2gK1pKIySIhGNU+xxjVOizDFe2cGSHjEqvWI0GibTZRVgT1j2ef4pm9WXgcdidoUQ5wbuKrJWN99qAomtUnUMuhYtHJ2RwIprUI5VtUp8N/8AhSyjzA3Yt+H4Xz0eOG5UkM9CkCoD/2RyvDxlcjWQnOSc7m8aqaZcmaSERiZpNa5pERgW8/pv5Gq3FKhDzM4MeTYNZFLG6kKws/oLB7qHq6CVRh6tOaNsYRhtLBngzO+Dx4R0PjUkoqRjPrpZUqkKcVuhSuLhtn7AcD6XsmMrArS1jyqJHwaCXyPne0DHcUzKC9UuF8FzQMA5FycoyaHYx4VI86/xsRj/2XEx9LiyJaE4HHg41enf4UczbaEaicE2nZCwW0lcoA76TYyU6qi+VNdwpnTphGDrmEyl/1Vkcm4TooNFJoWXfWHMjVXX+dpxzc7AZWiksrSq0+jVF1qLItctrk+FgoA0hR0XYVKKa9FaEZaw5lGJfHG4bdPs5nuuzLYQfyh5v0a4mOC64Esw5WjFxnlL4z2kPmfxdlVeGQ6Sv0SRNXqKdttP9dHwqh34an8an8Wl8Gv9mxy/rCVbfsZqLiG8ahUyjijfv3pIlIiWfnE1htDkqFpakQtKaFPoO07G4kKrFjlmjKQeuJgprVURe9QGO+5jquMdyZXOu1REn97RlxmQqorGBDvVYYM+uaDTZ/FiqpDdvT+abjwqbEmqZCSrtE8uzz7DPLFrZZBzHKSUakapRSDofdRzQrSm1ZtIPsn+lKDFDlarV0aS+VmuoVL2KXzcYo4hkGseibKDTSyZLEWnquka937LLWjypSJ3vT7tNppaCHVa4kov1GIz4qoGnB1wGItPMRoXi0HBoD7xNRE/P7fEWt/b5UovYS6233rPQu5ZOj/nuVpQVvr0f+erVOdF4jiX72jzL4Hxxhm7pvH4r2fzTR8ydhqqm5LJHyvyZhlh10HHdjqqp8QbJHWp3ZNrI0A00kgTb7lQ6vabRGmpJG2bbJg41qCa+I9b4UFeMdcHgBigfldX1HnPsUTHoGll290wmg8Ui9Khz8W7j/J6yael7hf9Zl4/r/haz0NgOe3gSdtyGE0KvwLZ1Fl+J3jxlP6GNXMLKwChFxLtuPSq9JH3ysGYi+j4rF2Tllqfbe1JZavl3138PfUejQSmblqerKXW7YLN7jyqVVPS5zVkx0FoBrvFRUeQvP861kLyWiQNNZdA1JquVJA92fTq1B3RaVWSg4+jwbVLiqjbuSpQc67Jk7FVKRwFZ5nNQyB0TzRqoDEn/tynp2GKrIQdJHWg4HWtjTlyM6LKBflf29O1Ao58usLb4O2kTO97d5bj6Gb3s11xqR6oRlJ2DuhL9vO5hoJ97vH94wHUEF+/7m4xqorLbzJkEIpu5+2FANUNM9cB6+h8BGKoNitXQBArIstd1PmIc/xHd6nl2JlUP4oQhe0s2XfCvM8H1iwuGZ+Jv15FCPzYEhkEr+WktV2hfulfXhKEo6TWdRZq6qFVBIDNrUFh//lvcvqftJCH3MELX8WIx4yjf41imjKOB6foUsSzz5RVRPqCpI0hmoos8AAAgAElEQVRlkqLPoDlF72fdgZkUB5/6E4a+YqvFlI+C5m2v1szDSyxUMkknqasDWmjR6yWtpFjMs5aqTpgvVD4q8la2QqS4HMsEO5SK7BOLwy6m2Bd4UuRA6RWc0MBrNDayZ1M3M5KHdyfzPZ/8O7JdwaOkOpy4lyhOQWvHTDRhi10LGjal6hIg6DP7JKSwLPaFR5yICtaHImdinVPXA30n1jM3PD53zwh9i6IQPMyNOsU012AqlFIIWcGlqSI8b0JXiuxwGZxSQP50/DJ3aLbFrcThMV2aQEOZvCZPBvmZy3wW0nUV7Sibh2lYdiFxW9OqYuHKJKUacxx/QiAd/oPSsO8rcEZWsnnYurAxdZX7JOV8LRbpWI202wfMOqEqhEPNyoF9cVoOHcIp+qaisiSHZ+0yYGAYU0ZTPIfWG7i2TjsqKLo8uIeeUbMZApUqFZ8NpkrRmmwfjgyylKhZHo45ElcNmim+N9U8erWjaDoMSRQbWVOwQmxTxXSEczd+pqTUuQoaJqu5YED3gen815y7Ad5cbMTshxq1rvDtgM+fvQJgn+a4bcPdXULViZr+i/lLbCPhN5dXvP0gHOX2uEGtFUxbA8lKoTYJFiOmNuXyXGyAsGwoqntSS+e55Ip9UE9LjJoBqlJTayOBDBbCxYyq72kUyD4KdNotZgOFaaDKwrZalZjGCE2FGSyk/TQ4hY2hKIyS9UWb+piGjWPrP8p4Ga6BlQ541oAm/7+41LAUC8PiZ8tJAGdmxPvv9uyLHPNSHNpL1WdTBphqhWuKzZHnPtsm49wOWbnC2c0DHac8QzUK8l4Sl8ctpr/gvA5ZScacy8vn3CQ9ep3hykPgUIbQHKluIejFb3x3W6LkJoFhM1yfNu8qU+EUo66gKhXiIUT1hA2EYUQzdORezloX39MWJl2s0lgdmjwYxruB1jJxR8D+KEPVEAQqZu3QS0mfzG8oblvipiYIJC+qusTAYDE1OUrV8+dTmyNHbPNU9WK9lJzC3x5RmgFvCEinsuRuLVCPLXo0oknl8uOFxnZ7YJ+P7NV/Ec+avmJizfHtjC4Vf5soGxzTwk5fcSEDntdGzPG2w9en+DPxu8fbilm7YUyv2UkGq7k+4tmf03WnvqFWNEJPvDPXtaj7nDZvMKUHTJ8OxOmIVbe4tpAr8m2fUs+pfI38I36gGrF9H8sUAStA+n6L3mukfUnXCMfbZj3ZmDPqCe1GJA1K1lB0OXVRoUvmm3AE0zpl5HHutyBloxZfemzzhDK74zCId+hUJcq8pu5rXLkXu77FGF3ebEr2cg3UumMeOCh3OkcpkWX7Pvu8oVMLpvLAL72GsoK0zVk5IphPmiNmqzGqOcNW+IMHNebheHsy3854TpX/wEcVq0YzUTQPV1E4ZFJcYXxgojlU8YFaXh0kVYWi6VjBgD3/HIC+2xK7CnFmMeQyGF+tSOqW+ywnlST6Z+uIwZjQH2qsUHbGm3OyY45tRViKeI5AOfW9Px2/eAjm8RP9XjzV3owoy4Qh2SMFqumLKY17pG5KAnl/ozkdquegtSOjISzn7GrN+dynSUpGSXdmF3vc6Rwf50dHWTUVD9mOwenYVyLrS/uWioSZqdK2IvquxwzdOlXn7oYWzdYwB/Eb7tpjANSmpfuIgjFqhrGiLS0qCfCpqiOuk4ByQSMZLoaiQrPBZGCohZEGdo09P8NJY8pC0ig1GaPjM3Md6D5KpujM5iFdbqPp8lK2d04XuI5YzEIsyZ7eGybNh4zYG/AMSaOl1qi6j8mEF4EIDKqXHZvHd7y7vUOTdxAHUibBC/ylicTi0Hx2zTM7BC1gMhUbqg1ekhwOaK7K3/9a3MMUlw4/fK+SVBmGId7FYuvw//wkUwFQrYa67PA1MKU6gDudMLcddscUTQZcQ9fSTn3CYqTvhANQq5a6Mxm0lryQpNq6jxMM5NWILw9Bq9VQ+hydOfbH+9mhh66m6wK0j9mmZWN6LpqpYdk/3wfbJXCHRWnB7/RL8ZuZQlq15AwYmYjQWZ7hlzr2xWd8bovNqXsTWvvA+//2gC4VE+xoRG80vH7G778SG9bxfZTmnmMHynEh7aRik1ZYikk/ioAkTY48Nj7jiwhb+Rk9wUhs1LpZolsQtha5DLQuTYcnMpwqoo6E3de7mnEScsxjBgmMMUYbo8rJ2x5dSiRpgUnXZCiKjhIIOwsGDXUY6UIfp5fgmxCM0UezXWxbgkAsi4nj44enTrr+SHt1fsXVaspY28zWkg7ta3h62fF2c0ssQRH+7oE4nmBeuAT5V2KNI4W7bzYkQUBTfCdtomHJc5gY/Enefz59fUBpaobG4PxcvJ80z9iULb/zvuXbb4RNfLaImHwx4I7rk/mu3J5cBuqqtUCrO1TdInLEum+rjq7oUB4b3raC9cWcDXT9QN0d8H0RfIxtQXz3luliQdeLdSqTGKVSqBiYSGWafvCxsoamy9F0scaz5YgzeuRxTSWzvMYP0H6G8ajOUkwpt/L48MimuKeIKzzJljJ1vmJKiIUnhP+AsckZIhXXmdFLmsQ+MrgII9qsZCHBMtWxQAsmmNacUAZQ1TgwHh/R3JGdLgPNqmRzt+Wl51BKcODAhpHTO0FDc9G1l7gSzaZZIXqgkjYufS8z4Q3cs+U2zfE7Cd7TDPREpXUUdgfxvaSpyL79gALMLkXQE+kthdHR9AaOJQ43pQvA9+jUDrcWa+AbHV/v75lWCuu1dEjdzwfJH8cvHoJhZKEH0tk1BX1folsqK0ekrXoLx4cdvRqg6h/5Cy2yuuXb9490pvhsOVuzWlxgTDx2mVjAJocyzRjVGvdcXuLvMoZmR1VpfPNnQTWUawkLb86+atBK8bedGdF3p8ANZZehaj4zKfg6PZ8z1inRwudCUnrFiUKaNrSVxlMhta+CNaYzMpmco0gAxWO7ZR5EhE7A3BLLNJgqQwuFYWG6UknDCfFUA89W0WTA3LcKjhZwHDd0EpVYd6fAmM4weGz2vKx+A4CxOTLWJUObs6lEhnetnhHYKpprkLmi7LPzSo76nkkwosnMbchHDu33OKg4iO+9VExMf8QYaxaROATieM8q8FC0GfdSGJaHHu+oYp2tGGQW0PanQUaV59R9jdF3rHwZeQUqZp8QhiqzQLzHrmvJyxo10CgHYYjFU07bwTh2pHvxbKVd4hoRM9+ilcz9ed9gNxrmbGSspNNqLALPoyNnlAejrQ4oVsvYDxzTn6+Hfr9NaNQWI5zyQQJZattmzGsmVYIx+1I8l2bz+dUXtJWKEwq+2za5oX6sCJYLYjnfpMh5tZ5wPr3ClOtpHW95Zk9x9F/xNHwPwGUf0QQZnRFRPolnWC1ijPpAOIuYGKflmUrqQiqDAmioz2YYqQgWjhMFL64wpj5GIWxx55jkZUekBpgym9MWLlabEG9TukZE+OvIwrTB7x0a62OU0pM5GVNLY5SUawvfwutCOm+kkURRD32Dn5jMnVMn/T4Va6KEc5z9nllwRvmNsMVvjj8wzXOqw4b9jQBaveZLbD+lORY8n4lDyvWeYdUbDK1nOrkW69mfky4eMLqRWHKAvtl5uJTUrolqiYPny8jmztb5Zl/ieVJEumwJkoBVdBpwTp0lnnTuE8uirSYMPkyk2HKtt3TKHn0wMCSlV7J/pB4UQtf8McMzVJcqhqd6QyVR6G7V0VQVphOgSNRjb/YspnMO+5YmE47BOLOYtSZqqBPIK5t0GDHzUzds6Ra2InyGWtQoBdjTKbopDoAWl6TWeMwemKSS0s2GqgtQwxd0EtGcJTnm2RmeE3BzkNlcXDLzG1YWIMuIT8k9ZV+Q9C2334hMfaxS3EAnwcCRwXE2Bqj2qT0MqolxHrGU1yR3ZcfTtiF+2jJ4onx6JEFNdIqJx2CJ4HihT7maXZE+3vGUCJ/qTR1W5shitfyxO8FRdTQzwKQh+iiR5Nl4kYmjDFCIdc91g0nqEj+kBLLUb321PJnvT8cnYMyn8Wl8Gp/Gp/FvdvwygXb6FmJxX7X6wqXNai4CF8MTqezuGNN2KsNwoDREyhkGc/K0p6gMtI/Zj6GzfRvjTFrKREQtyeOB/W6LF+rMh4/CqzmeObC+GDHm4rSvNB9b8dnsM1opWju1e+6r0/O7r3ssu0KV/W9UNYHvslBbWgm8yNUGe1TQdB1HRnyKBlZrMeQHKtkPpI8xdd/SVRqxrP0HvU3ajUx8k/EjuMEzUbGwdRVDTqnc5Oz3O7IxQ5EACsP4255GgLpXqBUHdRDRaLRaEikOjB2XjQAUOKqKOo0wHQ9FAkrWrcHjzmI3TPAlaMezFe7uUopB4fpCROR5F7OudMJwjXZ8C4A/fYY66DwlNeVeEj43HZ4T0RsK+lq827Q/JSGulBarGwk0UBQRoalpRWE0mKOKPX7MHgN6yybuepBlH9MHvajZbBpSSXZrDA6KAaFrUVYi6g9UjcExaPORSF5oR7MZjqWTbLZI8QK6QSM7VCiWiVHlJ3MF+MN371kuJnSdxY1UGjg7Dnz1j39H+XSkllnQbxdryvMV1vaBQs6jySKM62teuBlGJkvO1Zavzq45C5bEEhSRRxHsci7yJ3pPQNofu2/ps4qhVdCk7t6FbxFcZIRVCNapHpsny/V3mg6KxbnZoYayRUTpsKYuVq3QSm1LM4G27tFHDUUSbZeHnFFp8S0dS+oOUtaUSQszhUkrntcxDGLTQTMMOlXMr+gVWgv0uOZeEtXboUJdZtTKaWZV7aUIsq3wFBe06QcKec+za0f++O6Rw+MTF9efifkWFQwOxsSjkS1RK+Wazqs4WC2RBLdMp8/4fD/ljz/8E10i3pnj95R3Fu4rlQ9bUQEavXNctWMwDcxIZJZ+UVL1No/e6R3m8ixglFcdSjMK1ZI6YZuI6tLF+oz5sxXp4X+0E8V5gqK2zKNr3uxkBatMiRyPYxLTSYbmuh0Jl1P6bc33d+Iubj2bUjnQxhYHWXHquwFd3WNrDoPUaLTqktY4VUGJzBwKsRcvLqdoiwV6azGYoiy7TR8pNYWxVdlIwVtnZ4BpsMsztoV4hvB8Rq/PqfOSRr7/AwnxrmXfwlYSfusJeK2CrReopvALgadhhFf0uosuq3qrMWQz257aQ9yya2ueZBvb213JzSalax/RSymC2/e4toc3nZDKXkTP6tnbe5aXPr+eyftjXcWrz4kcjcdBZK/7rMZWQVFXvOvE/NbeAoyGPhnR5NVbPyrMztZ4RUAjK3j6/wQz8HH84iGYxQrmtdiw3egzn48cDUc0jwJWMEEbLHTXxJDAk1a32NU+uj0QSEHZ3puQ6w5tBZ0UvM3oaYIaS4faFX9rs8ZwI9SioJR15JU+gm6QjT2mXDgjr7Gyu5P5mo5NnqeAWBBNHfA6iDuDuhIb27JUkrij0wccVzjZWm8x1Yo2ucdppFKFOVIXOV2nMFbie4o3Z+a56LbKKJnRqVv8eYTKSC3LV6pm0/clo+rSKKJs1P+MEOXzF1Pm0QXGIEUiWwfbW1O2OYaswWcaLPop0cQjP0ppmdbkd19ccB47pKlAjM70kKgbWUcuoRTV3ec7mn3Fy6mLdSk+OzM8DG/Fd+8PhI9iUyRjQu55dHpJo0nQ0+r0MlnHBTVDd21KGbhYbYNpWsSHHY28J9L0nqfCAE3jYxxkYdLmNV070ivC4empQqt17Mb6R+HN0TNRK4XOyX/sH1X7gbTKqMqKj7PS1IK6qnGaAPc0vgBgcuUwqkvqhydsRdynrr54gdMtsO2eVBEHgPXbSwLN4r/8cKR4EBP+zPRYBuBrS54CYYuXxxmeuiVYT6jfS+BJktFmJU7oczWId+EOHnvlgrotqKSU1sozqDgDuwf9dMLaKGzMaBWG0IbORNclYvSY4GojvaFTHaX4rNGhOjpmEKJLJGBZfcCxeyzdhEbYT6X0YOQEgwsSRWiEIROtZ1Qblq5Yl01t4dgjnWnSSyXuzgwJXI3Rm/OvxzAIJ7siJylbdm6FcZT9ZUPDoGWM5y+xXony8mpv86ejymfD/kex2Pf1hvnaw7vJef/xTthNcVc2s/El+V7sp6VW80YpsfMORfZ+pbXCJLrAOEswUuFks7Ak0kv2H04D5KJr6SVRh2dNmNhLipsj5b1Y40y5R+0N8kPKm3sB/Ei7Gl3r2TBSVOLAe7p5S2EbxL2BYot3Zts5/lCRfchJn4RfCg4xu84kGUoWUppqOV9Rpw5V/UQgQS9jO+Dpp0FGO7b0H8kNAng+fUWtadwexNqtzSsUY6BxFMqp2BVVrNLoc+6TmvlLAaLzgjO+SVvUNKCXQDDX0YibI35kEq3kHfh9z3EoMYcQ/ektAErQ4VsqY1Uyyh7oea/zZJ9e7VS9RlO2fP1aXAl0pk+eJNSGB604tAprxvnlr/HXI09vxZ666WO0Ukdf2kwmwhZfF9+yB15dfcXkpUAS//WbB0rT49hUNPJKQAtzuvzIV2fnLDzxHGX8RJ9D83zK+Sj2Svx0enX20/GLh6Bel6iSucUwIB0NXr+9ZRLK+r3jo3khi+WaD0dhsHna893ue6xDzzQSL2I5XTDTXerWYiNRNQc6khQyb8C8lcrDikJAxHafsH0SEVUZ6UR2y3g8km+EAXimRV9uTuY7WYXsb2PMRmyoMSww3AClalDlwWhbOtHaZFBUSuko6lzHNEzqUsW3pEGZGkNeEvkGliHuazTHQtFHiqJA7aQWYZWSahq24fOQiMV2OhMzslAbg0wVDkQzT+VSnsqM50uPWja8p48x24uQ9u6Ju048w2xpsrwsGAuduTxRTHtGrlXsdvf8aiXq3UrVMn12wdXMZKrI5lnHpj7smfUuM3k3ZylgjT1XiymWL753UC55Oh55uK3xPHn/pZw2mA7jiK66PB1qfHkfktk9ummRqRZNJjeH3WAOI5Z3TaYKu2gKCyUYcDsHXSK+Rk+n0UzyrMfyxPvRQxv9OOKZDp0Mtp72JZ7fU1QltaRMiY8lBi6qp2CGP4/+CrWQyzOX78eSNJXvBoUyT3lQRmrJvqH8J4WzZwHauyO+LlhkVq+uUXc+jp9wlQrHe9QKlN7Eep+wasWzZkA7P0dvdtzL+1R/sWAy8Xkd32KI5SSIVlRFxaHeEHSnDBaWZEdRixKdinp0MWrhPI3EotZuCa7PiKTDq0cFpXfpFJAEL3RFwGxuEy0CNq9Fi4DldvjtlM62cAZhg5k5oLgabmRSSdkk1StIehvD0jm/kq0+8wjH1DlbnGZWq5UkFWCFqf8zBxZMJs8A+Gxpsxl82u+23PxZBDzus4DrVzb9zYELyXCSlxlD2aNGOnYu9vv+nc1k8R6ltpnXYo9vWoXLVzZkGfNLkQlZms9Y/YHu1kLzxDPog4XWl1SP5cl866ygkvfzbfmE5rYYykghNefevR1Qqpa6qznsxHusVIN5OCHmhm4Ua+d1Gck2p9UXmLLyoWYZu52KEh+ZyhYb34P8YJLrI0u5zywvxNNHXr/Z4+Qf7X3OOjw9BG9vEiaBeC5XvcL0DF4/7Dhm4jeDiUusaEz0KbmsNqR9TNk57IcOdS9cuzW3qbIJabHBlSConBek3RtSP8SSNpuZLdMioHiXkT1JYFDbYegepjbSJCIjWwQlS/8U3Xx5eUbz+gkFUflqm5H5PCQFclnBK3LI2oQLa87BE+t+HqoEXknZ56SVCD5Gv2XhjGzVW67OhU1dTX0ebo+0rYcpAYhp/MSvL8/4/RfX3L8Th+o4ghkF+LrGIPUTDf1/IRNczkrm8oI1bRSSoiRLD0w8cQhOA4e8Hnn99J6dlBwblBA/uGBoYgyJWjKHkO8/7FAGl43UXMt3Je7sgqFuiB/Eb0RWjeWPrKIF5lYYe9+lPGY5c3Su/I/ikS1df4qw21YVxgidZIIJsTEUiyop6S3heJTOw+xbdHNEG2ULBxlaGxBO1zhT4dymvkO6f6RMKmpJcfR4e4tm2njeDEUit+KiZOkHxGlNJfW6sjpGHV20aIEqNdYiGeX8dJTlyP6Q0hw+soAoeEWJ44FmihJPbRqsL35H8eY1lie+9+zsjNtmx+EGlop4Luf6HKtp+Wo5QTVFUGFfrAmSBEc7R5cHedzC7qnkdd7gzASa8cq9As1mNGq2D2KNo+q0HKoYGnXXUg8ltryMz8ea/k4lN8AYxWduN2BPF4xKTZeLufRjhdpPKPuMYy5sIOpMFgub3FBwHNmuUhtoYYxtrFA94RyKtqTNMrpCox2ETVVliuqZKH1Dkf08MKbc7+g9HbVeMz0Tfzf77QXGTcuf7z9Q1RL1GVe0RsnFq4jFTKA+ly8UXny+hPcJx1FsTrtrWagm9Qzat5JtRiuYBjnVB522kxnZMWfrwLvbRybPhMOfuj7lzb9Q5QPKz0T+x1rY86BHtFXKZOHgSMq50n5D9rTAZo0mxZm9KqauCw6tSfYRbRr6RJbHzNBIEU6rPmi8L2Papmd1KXuzWNMPOqkS/qhPmPYdfamRFDscX5bnpwEWI517utdySRHXOjck+itmfYzji4O3qqdU2wl5vaVuxNpdrSZUdU85N8hl+c76nU20P/J0c6AsbuRv1jTObzjmr7mX4LfXZceysun9I/NUOMWnasv7u2/539zn1IM4aH2vpVJVkulp5D+WHr7kROzakq7SUdoeVxURRK1UPBw3LDSPuWzjOjwltNqInto0sn/2tkhYzmdo+T2hLX536AaOm3uq/SNfLlbyBxvci4jzWuXZyxcAnE3nNPuOaHLG4Au7mHsa0+X1yXyns4aJvNZp64ohP9APPaHsuWs9Fy3vuKt1PryTICVjirt8hvd4oO6F43//Gor8nrvbikETz1CpJs6gMf3gkcQyS3tzy2ZaYx9i1rLHdBFY0FZcKgqKLttrqo5pc7rf9oXDbdKjdfJdrEZ0X6fa5MTvxN7uAoV3myP1JMaVveFd0KCvBqbBgiyTNIamRn8YyPWU1hFzHnoTdQ5q21NXwg8+JjFWN6W5/8D7P/wZgGeLS17g8z6+w0X43sl4moD8dHwCxnwan8an8Wl8Gv9mxy9mgiZHqlJElEVSoxow9SJsWQpK9wes4BLjqcOUwZfm2ZjOyFgO9HuRjn4oSpbhBSkuh7fvAVhpDkpn8HT7FhzZKF2MZMuY1dzHmwiQwebwiLXQ8OuaQUYAiptRN6eMJvG2oUwT5nOp2tx0/OW2pCtjIhnd1tYdihMRmA3do5i0ng8oc51ovoSP5btsxzI0SEyF3b2IUPSxxFN0VK1gNhPAlekzk7HTedw+8DHZi7/ZkOBiaz0f+yZK2T/007E0lpRpxSh70zTDwfZsvC5C9r/iGD3pfUpXtFDLNpQ1/Mdnzwie7vg2kxfb+xjNhcG2f2xk10MHuzM4Cxe8fy959PKSrrFRlIEsk2UN/cA+66gdi9GVZMTWaXwUaCOD0aPXFb0jovku7uicBj+c0Ms2FM1wmDoq2dCLNQCS2kTFxjMVKlc8R9VUoM3wbBNH9pmm4wYrV1G0jEAyxqDVfIif6PZ7Jqr4njIMUKfU9AzqzzNCPBQDZbbjPFnivRIZxMvB5O5MxXqt8PD+LQBnz1+SPORwlvFc3vNcDS9YRh6L3x/4w41kEDEfUIyY9umP3Etb7MaR2fCCYqXRSwDEt90H2qNL3upMGwEs2373hifFYPf0wIvotFw3CcXvbvc7XKshzR4ptrKRvSow1JyqbtFkWUr1HHR94Do0mdiialCaBfOyJN0cmWhizhul53IeUjxUzGW/1FNzwPUN+s6n8+S9/WHB5Nrj9usjhWzP8RKFg95jDKd3QEYo9p8an/OrFyVl9opC3rvHyYa6e2TX5lyvxJ3OnbqD/YjTGVivRLn135sTIs+hPOuYVQJAExk+h+yOcjxSmKJSkWtb+v2Gi4PKH0dx56RZe/bKmne6xsValLXN45TZy4bh/rRcZ68XKJWwWU9RsNIGk4TzQLS6MCqoKiT3GXc3X4u1e6j46vPfohgKR5ml+G2OWpo0eUPhiypMUw/ss5axbmkkA0tthYxjSm+G3O7FPaHvdUxsG8cNSKTr1RSbi4sp/3qodU4rFdG32wpHzwk1jbSVBA9vMtzJNeNdw/4HsU+mVx557OI1JtlGgkyGkSD8DDVryO4F04rnmFiWzy49YMv2l3Y3Y9i8I8fkywtxj+sBduSy8CzyvcjUlf6I6p4Cecp9TJk5BCvht92ph6qV7BY53VHMxWrAdA1udhvWsq2nd3wmcwV/ZfHMFVc7x8MR69KGoeJtK84LazbDDS7I4wzNknYxW/PhX+64ebPBl6VPv0u4eOYR2A7GVpZDv/g5rtP/MX7xECy2HeqlWODA1NHskFAzaXfC8R7ej9S2gmMYTO5lCWUJvRPwcFugRjJtHkeUuYrRNlzG4icbV6PfHJkMLnNFvNihvkdPPNKuY+ZLtJg60pUjffPAo+zXspcKo3LawDv4I2Wt0UnCVqUeKPqOGeCast+ka7E0D62oqVSZpts9Sp8wtj6tBKSEakrUq0wmEy494cg+3N+DB3YYoUpaN10L6LMMPSsZ5Z1gZhd4ukKp5SiFeBH14nSpJ8sXuN3AoywvBLmHOTP44vlLelc8X/L6iYf9HXZaMx9luW3ziNmlGE5K+QcBxvg6/5pnZ5fMlyqKpMGY5zMse8GodhzvxUbcPhZsApfeXTOGMjBIStLbGGvhoXfynckG35+OfmyxPR2z6Uly8S7u7mP8uYMeOiiyYRW1pu9HfDtikP1/quKiLG2C4hn6g1i7rk6Yny2xdRjkvWhZzWjdGs3RqfbCzgpFodtvONx/wJAUZlrTo6oj3pnDyCnoCGBtrjA3OtlsxrU8FLquwnFmXL/8iv2D+P/VzTui33+Grxz5Jhbv69LS+NPtf+ZslrCvRFnKn2sktct+k/AkUcS+YZH7KoGpIoG6mA8h2/yCmWMzJuK5NrVJbbjMf+thDIuTubqXoiQWKRpjf4961DF9cRasYYsAACAASURBVPjMzEta9rj2gD3KclidMul1pm5AZ4pD1Wtt7qsPKFmDLRGjq7WNa0wpnIrpuXjf/ujy+Nji2x4P8nUragtVydnSppasOYo3Uscx2vXZyXy/1MThkbwMaRKXbsxxTQlOuFxwscl5f3NDW4kDKs1srOUFkTNib8T93+NDQvzVnGdFj3ou/r/BHajSJ4jOmbpiL37OF+TKLW7zQC8DxuG24OXyHD+0mehiTdSvUobYQrVOy82L8ILRlQTSTcnYFljqSJlLtK2qYBgmHzbv+Pb1nwCo7k1M10ftDuxyydTiqASeQ902BL5kXDILWhyK2uX4IOy9XcYUNIRhALU4LO9uOnrbpkZlKrEWDQN1eRpwKkrHcJA4BrdF37U4rUN2Jx16o1GdOfSlifMgr5jqhukSuqKgv5d0cEqBcXHBRa8xUUSp1hhVirscI7CZrYWNtaVCpH7OcXgkEecO+nZE7Tz2y57+SdrYvMIcT4OMl7/6nA/HGl2q3zTGgKJoXDiXHFdiY3z93f+H7+osrxeoowjmDlqKOl1xaG4o5R1oq+ScLzW6YqS6F34wzneoMwv3syXIq7DCNajufIa2hoUk5D5Arfg45owhEAmN1pyfzPen4xcPwcgbUaUygFYOROE5i4X3I1XXXVaSJC26ZWBkwtj7Xc9gT7CzAl8eeHl3x5v/+obnL58RSpBBbY4kacrMGzkzhBFPzy6pspikvGM6E4eg5bnkasdgn/FrGbW++fAHYmmoPx2mbqHrJjvJYxqoKVeLCAYoJQJT7TLmzjmGYWJJ7If5uGOfJTzdJwytMLLoMuIxqfG7Cl2V8Nshwx/mFOl7TAlrbrUj6jFm8/BXeplZTWZnVFVHb/REX0rnNnt5Mt+ziznDsWZylA3gC5PCn6HOPOyJ2Oz3twVLvebqbIUvIb/J/i/okcNl6PLwK5Hh5A8Jo+NRJi7PVi8AKB9b3rQHXk5C3C+EIdzd/nf++Ncdr14sWEr2jTeNycFT0a2RspYtItWpPeiGgeUpVG1Hv5MBiZ6hYEI10CGMs3YdmkbBn3ksJAL3caMwWiHtqKP5UtbKs4iiOX7XUsoG7cl6Tpon6MMD+0wEFQojSp4TuAOWXHfdccAzsPXwZ5t3AT5bz6HzMXWTVmaV/+n/fc3qKma+XPAPr0QG1agx4Qsbr/kNmrwD33cNTVaxrw8szgWZwUOy4e5PGYbj8fFaT0l87C9UvvnmgKKKwz18MaEzQ/pHA0UCogJ/Rrl/4tq6wjg73XaeRGmu5rDfmHgvKua6OIyCTmOzS9ANl9GUgIpaZZgo3B521FKpotInONuaeaCTlMIp2P6arEhI05z38kDWmg31PKRXLCpJ2ZXfZcRmQdl76DKjK/M9wcJDl1WZn45yLv6vl57HY3dLG2f8l624l9GLV2xqCGYao5RXMvSvaLQddbKm1sTcPhwqoh/uCBsPz5HEAE8KNzudXXfP+UQ2/H9m8F+PB9oJPPtC2vvL5yjxB8buGl9SEzJqaOsZr+IF8J//Zr7n51d8eBLZjGWEFLuBw36PHQkHXZPSGQbqZMXl9e8B6NYjg9qRHvYguU2DcEqrqXjrKf5K2F2djNitirkw2OTiDjR7dNEBT53TjSLDaYOeTdEQTRx6RTyv7c0xtNMgbuX5+K6Ym0lH6C4xG4f+Sdj/oRlxSpvADSgbKXP0usfJ94ymz68k4Gm/g+SfvqUzTNS9mNt0OWHe9Whjx2UofO9k+R/YlzcEvc5EVmoUM8fc6wxOhyLlz6r8hu7u8WS++mjzfO7x162sEqZ3/HDzLY9NQ6qJA3TfbtG6lperryhd4Xy7seGpSCkDFf1R+JTZfElajGRljy4Dxge1wzmUPHMUvr+RPqpb8atX59x0CUMs/vb5VxEqJnnbs5gKn2evnp3M92/m/kv/2LsVtZQzCVUwipKLiyuUQSycVqb0qc38bMa3R0ndZGo0xcChV+klAEJNFC7cCXZcsxwlU0LVUmgVz5drJhLeZhhT7ooDl+oCXZYuxm6gaism6zUXlohkjt9/R2C7wN+WROtxRusdCHJx0JrtiKpYOKZCX4nPqkYhLnZcWCPFnQh5Qs3FdVW2x4LJVBhe2JU0TU5W54yKMIDdoSJpMooix1OE4Ya2w+7uHY1SYTnCQfmhxXGoycoDzvgCgHI8Rdjlm0f2DDyTF9GqZTMWOQ+HA9nHEoprs55FfHV1QdWIzKW8t/BUhfu4o5cSRLOZy2ScwTBiTST5uDFQfKjZFBqmpFxbrS+IDn+h6mLefi8Cl7uiZ28ZnF87aJ1wUIPsb/zpUNUe3daxgimeJebXBhaW11N1GVkt3kfRVjSjycrtWF5JdNcqQlF0DnsFX2o7WpaBbtboWU4QiM/iNIeygFHFcGU2Gsdofkf/1BFI2anR0NEtCy+wQP35q+324Ujt33PlfcnD9+Jdv3664fHwki8vzghcYRPGtcV0ZqOpLf1WBDKPqkG4VCg7j0LW+h8fjjxUO54rn9FLwJP291/w318P/PlPd9hr8fx14mCfRRxp4SjWWIs1avOcg3Lk7GPK+JPRSOSeqsyZRCZN/0DWC5vps5ZE04mcEbcU+0JrEspyYOJHVLYMNosEb/GcId/gdRLSX9UcCrj79hFFBiSWUbOar1DWAc2tzLbVjL5rqVQN9mIvp16BO/01vXpqu9adBCx8vsX2Z8T7Gu9Oksorf8XTfdSZz1YCyPpmh75dc3XekB5EZvn8Rcjh9TdCTkkS3OdNQrDteeyOjNeC0SeMWrKuo/trgyZRhW7usLh6getAo4k1brYDi0lAw+l8S6UDKZ2Vtluqp1taf6QdxUG2T2reFRC3JuYzqVmYlhyOCYYS4QRijYtIYVDvsOaXpL54j/unB6aBytOHlLwV6zJVOwzPJtN2WDLaVr2eie6CrzCT4JsgNDEnp/YQfRky5OLwSHcdbPY8n/0DS3ldEXYKE/cFk6vP8GMBSNr7I+1RYTZCcCH2iZXuWLQWddJi6eL9TzodNJ/ltcOl7D22xoDNJqB1DRjF+584HqnR4PhrdEm+nrz/Dls/BUqVu3vaokKXIK0+7Xm/z3msG8aplIVb+ZQj3N/HICtjrxYTFG3JsT+Q1rKXO67Z5hrD0UIwKkOWFZRGiDNXuEvEvrUajbrRmNomkStsaqEGkD+hFSqd5N7llPzqb8YnYMyn8Wl8Gp/Gp/FvdvxiJrjZbvjsUkYjsYHSqHz/T1ts2Yenlg77dAvJgHYnCUxDB7WtqfKUXnLmfe6e88X5FfeHJ7ayl8LsMrxQw9ntOMYyc9N8BvWIpoLZiXrcYjLFmE4pTZ9UFRFfsF7x+dkF8P3fzNearpjXBc+ltEzg5rT3TyiNhi8bPDWtwku3tGVJ24qo0rc94m7E98wfm672WcKg6mCYP3IYup5H1jWEU49IkjY7aEwuzhi1GelBRNVpldDmGZ3mkxWSfWF+2nKgGj1h2vKmkGUAu8GOIt7mGZEmhXzNGZUK7/o7nr4ThNaRUXOsdlTVli9lpvXPuz+yqTY4/hXFIHpmuixgde7RJT27jeDOdDSXlbfkIa35/v0fxXseTJQoZHn+nHor5jLUp+ANR4WmblnoOp5ssrXMDitY0PQDeiPLOqOOFRkoY0/kiAxvfXmOE6xo84F7+bz+VEXvwUyObI+iVKXtn/CClr7VcUOx7hu9wT3qZEZJLVtCDNXENDXMseCQ/DyBdl0/EPsLtHSP7Ohgfv6M/CHm9ZnCVxJQkr2r6coHtLZl6gubODN+g2KcMQkv+eH1XwF4H9fsP+wJghlRKHpg7XJCd/iaH+6+ZiVLkHepQfz6EcaeRLLZvNBnnP96xuP7v7LbntpCOxeZkKlDmzlM+nOSJ5G97uuC5cRm3ObsDRnWjh15ccfC//ekd2I9N3VPa35Hfd9jLUR2oaQTlNJicf4FhSZVCebgRhOsomIeiUjb0VXepHcE6shBsvyEly8YxyVMT+9U4r8KkEU1tRhXDzysdNSpbKp/H3E+fIDaRfsXKXhrWKy/9GgVj+hj61Qz4UH9ElXXufnnt+JdGGf83XwgSgLO1EB+5qNuA57KjFb2dr4KlniKQVnu6DSxnutgws32L+zj0/K4O+TcjSIr3d8caIeUKHrJYSPW8837gk2c8FQeCKX6TWoMVEPFuApINfG36d07hsBj4XeUpcg+Kr9CrwvUsCGQkmn+yuTq+nPaBipN+IAP7zQezA1/9/sFmi+ysrRPqcZTBpZQH0GSe3//PuVF07BPM2R1mTNrgXa0eNi9ZvggfNuXizUP+y3vkgfCTPzmF8o1L748Y/vt19xLjt023rC6nqN/c89tLvZTEPocFJXdmyfOFrLVyVyhTVbUQ8joi/9POVuxrE597+MPj3zYHIgledPW6HCWU8ZtimWL55hdmbxpP1AmORdn8t2qBkMworQT7sqPVZgM9U6HBHwJrFPMgOurz0n6klYSF2w+7JmN5v/P3ns1SZIsWXqfc+7BMyNZ8aZ37uwdsgQY7OyIAPuC/4oXPO0TRCDAyhLsnbm8u6u6aLKIDO6cOx7MqrdnotD4AdP2GJIZ4W6mZqqmevQc/FJhNBO/cb9+wDjA3J0S/0E84+qzY7KHH4+fdIJWrf/QoK7jM7DGvH0XozyIzXTyxMN1AtRNxMyUjb1dSFYveNxPyGRD9UlT4l+/47HRcCGZ7H+7jakeduyqDYrskcIVDqavthiFZFnPW1TTwtk0xPLeOhg8QXVnRwvR4tK1Bo0nFrE6pOimgba75sr9qHCtoDkNq0WCIftHGlshuVnTB2M6icBc5hFZXqEWKqbsp5vMR8zwwdTZSxqlXbFidjbBNj3cUKaRtncY6DhND1JfLP+EU3l0OSQuGyo5n0pToCsdidJiycbRU6WkPozY9AWGJ4KPRm/JNg1xvqO/F5OitR31Zk/pDNlJ2ZMir+iaEnWX8jYSz2ErQxR/wO6+5k9vxSGb5RBeWSz9iL1kd7iyj9G3VRuhJBV7q0aRxWnPdRmOW1A81rIBeJd1aL2ObieUEkCTHJYYuofnaTilVJY/2FCnWGpHKJMS4XxOqns8LD+wk8/XqQbTyycoZoEu01KW1uNZCn2ckB5nvwBwL19gOTZJMcaVtuj5BvmzmqLLuJfUUgMvpUvu2G8PPPnsr8X6RxFZmfLIGeNqwlm+e3XDokk4O1O5lqCd5tv/nWxo8+xKJ5cpyC4bURcFt+/fMgqkHb8oMZZLcm2DWR+nv3xL1N3K9g15vSE65LQS9RpaGma/oMoKMjlPSZZRGRbVdskfXwpbcQdjrPkZe2XHYSFs4Dx0aZsR7sRhIlmdztyevOtZbDbUSNWDVmVkToi6nMm5eD7XtxjOx4TOJ5yglGoKogT0mlNlzDQUKffFX8H6g4d73/D134g9Vm96kl1PWlbokmw/90P8ZoZ3aZNJ1hv3jc7eXqINU15Je3J/f4di5gyqDkcCzS7+OiSY1Ew/NIylHNCJH0Gs0PXHqfxNErPYSuqzTiGLe5SHJbHE16XNDkyT4cWAzV7YndaVjE5tmKgoMug9LE1Kr+D9/garEyf+F48vsdMOvTSpLYkVsC2MkU2ZKJQS0Na4JuVmze1dSK2IPeA6Oc6TY7yAZysoMgg48X287i9YvetRCvEcwfQRp94IPd7wWIL0MlSuDznPx2NmkjXqTNW5auAh8Hk2Fc7g3cOWNtqTRdcMZa+0VWtkBsyjBXUse3GNGYfRjuzdluBKnAfhdEj1CRqyrBhgORat7NHslz6j0WN2vEMbid9Y30cMz3zydIEk1qFpBoxGFr53iiN5J0+CK27tN+xutpx8LgFTA4tdqeJUBgMp7xeXBfvdjq7uWciLVFAcmPQWk6HPjUSr99knAA4/Gj/pBC9PJ8wHItrR2zlNXaHVIY3k9dSNKfqhxEkq4q2MZowKX1eZeSGdZDgJlAKqLZrj0UmmFbdT8KwJhh9imGLDauaUqVqSWUMOmXAaim2Q3+7pdZW2klItkwLPPT5IkjLBKnZEjTzAlZrzPkaz92gyogg0g7u1RpzmPH0kblG60pL5Cu2gp63EAo/tPaqqsKVnYsjv2ymkygPm9JxIRpWKkrHb1Oj+AL2K5XsEmN4UvxuQyNrh9/fJ0fNaE4f4+sBQNuPfxx3dMGFUuKQ7MU+vzBUP4ZqhXcBafP/EH/Hl0GevDfn+WhSpFS9hPu3J43vuv5PCo/MLRhcei1JBjcRzfCh1DorH9LzlJBGH7N3rDXra4BYbGlXM+0dVkB+PKM2Y+CZqG//wdyY6ZRrRdA1aK9ZEazqi5TtszsmlvlLt1URtxSLO2ZXCMZYl5EUF+wWOKwzWcGxarWS9XXO9FDdau82phibm0MaXvLWXYx/P0Xj/ek/fHDtsANqW7vrA519/TamJOW6DHK2Y8+bhA1Ergqi7TOXfjGZoYcl3N+KgDE8+R9ET3gY1xk5KEKk1zpOnjM6f0v3xLQC/bd4z3M7BHlC2IliqxgnnI49pf4o/kg35aoM+WXLuXDCQyh/wn3541EoGCze7NYf1e0LVxJGkBy5r7LohDULSpbCBQ9nQVxZ3yx23O/HMw+kzklXH0NWxSuG4lxkMJw3RboslVRQenFPyKEFvS1TJRbpMUgJfYWhOyGSNUTVNdm3N69UxGjAfSvFUz0Abh/xS70lt4cgdB8LiNae2j60J8oFbO+deT/njt1sm848EAh32pcp5NaYyxNzVv2hQmo673RZ9J5DPiVNwYrWsLk54MhWBhoWFHweEJw1zRxINlDUZBrvimO3IjGM6CbSyHIfOGVCUEY4k4BjPQ0amCsqAs0CA2eq3r0n3e4oZqJKwz9YK0mSHc2YTbcRabDd3oOV4NhgSmVprAYpq09vga1IqrYahco6l9hQHsX+misNIO0azzs6+4OGlvFjkI+JNTlqEnLsiy9U0Y9I7jbk7JCnFPNW5wS9PZ0zDAa5sfTCyiDS+od6v6Cwx74PJAF/VcR6dosuAIdgciE2P+Oxv2Ujks3o6Y3P9gW/id2jvxBn9b/+XASeXx839B6XHD2x+cfUlAJMw4W16g+Y1PMRCRSKnZRqeoc+ecLsXQeS3rx441Db//m8ecTkS57GrnLBeXeNYIRNDOO7ruy23i9/RaxOmEnFuqgOapiXUFBxJIhAOLMa2yvm8J5e1bINPyNj9aPykE3zxxWeMpVOIvteJupLB7JJbMefEbctIs7g8u+QghUerrIMopz/E9JIeK/EKhv4Qo9fYbsRkui2cBB6mNcSTIINdsUSNK0aGS50L773YJRiOw0MboRvyamzXGO0xhL+rUqJtwmwqIg8z0NlECU6Z8WgueTKjiMVyhzP6DGcse1WynKjqoGxQUmEUlmYzHBkoNCRSyNJUMxzbZzAZ44ylGOVqT17X1F1PlUp2mMGI98stu8hDncu+O/M4RZPc3vLyjy8ZTYRRnTgm5mjA4fCWTqYMXbskq0y0dY4nwTVZlbA3dBrdQ3ekJl7acPHZUzImvP9eGFjy6j252qHWMa9ysWGLMsAZ/wonsPm7WBjTN8aAzmi5enzK3hYGO/OOe+/6oiK3NHR3iDISB6rS1+xLDacoWUjGHKMLabWezb4mz8R6r5MJiqLRoFPJG1hU10TFgcPNmok8jOzBkMsTl5Y9nSaVuzVIIw2lrnEke8lmk3IXNzxkD6w3x31sACo6aqeiZQ+4Mu03P3mGq97y7j6iLaQiORX/4e43DIMaRxVIvsfNLU8/v6QsciqpBel+9Rd8ruxYbSJevxOH2GA0IV7p3MVbxo/EGr/47Ir9dysmn5/hS0DB1+OKdWnRA89Gx9suk7eUzeaGsFI4C1o+RBK0Uu54Np8SrRf88e6dmLvcILADGk0j/gjcujvQ1wdCGi4kfN9QWpbJmqTYMRyISDsOHQahhtmrxDJQtcYWlqMRmBatKxXoFQfd8H+gZfvxOEhx8UeDA+aZz76AqzOJZnQdNvctanNOshVB2j/8/SuacMRk+gW6Iw6sSpswnbg0O50rV6SXa3+Jm1XE756RyNs2o3fszYCzXcnpv5c6nsqIwixJbZvPz2WrTzpittijnx7zChtGx+hc7M9oGxNaHpVuQy9Tic9m5F3Dq/w9A3mzXDVzgjOdQ12hS9BXaDssmz2KrqPKYOHNh3uqwGV8okIqzq1hYHObRSR1y8SXt9y2wULlEKnUtdjfdabi/cPxWfb4icf+rXTu0Z54e4eKyfIjKttfYvgeg7Qjr8X6m1WFa4+gqEhl2Wn7cEvagKLt8XVh72E/JtMbfN/F2og9dl2v0MsdAzPgTpa77n73wHK3oewznKEwAtV0CYbnR8/bdDVRmeLLJYvXGV0T83Q2JpMi58H8hMWHLZsPN+wlg1fTdOyMA9v1DZdShKF7+MAjPUB5dIGvCFv0FR+9jHnz6jv+271YC/d8xNDymbZDZJcdbjXkaq6QGS2uIdP6J59uofo4fgbG/Dx+Hj+Pn8fP45/t+GlRXS/BkpD5UjPZrCOWr19zvRc3recLg8L3cU8vGAcigr6Or4m2CWbg40o47/4+w3hkUaoqmS4iuWxdstM2GGWGN5cwf2/Icn3Htj3w5o1oqP02jmDoskhiLi5ljeRqjPEJBpZdrqKWKYediBQGzgjb8ZkOLxk/FnWNfrnF7xc4wzF7CdzZb/YcigrPbEllD5Pb7Hh++oLRuOcgU8p1luFNDQ5pRCdz80UPq0OC5TpcjEQEqTsN5gPoRkYlG8j1TxBSp03CmZNjB+IHRuMpRu1zbVX4MxG9OBOFKM+4L3dcWKLm0ikKNw8lu+j1R01M4jxivbjGneTsZa8busufdjeU9xvu5G2pUzRmdsfh9ob5czHv/+bzz1ltX+FmGZpsuXC04/Rt2/Z0TUWTZlSaeP+HogSlwgsHaDKCXMclWZVDV2JIZp/69Ru0YAS6TicVwyvVIt0v0Gl+EM8cdTmq66NVJa5s2Nd8Daup0WuL5GNP3PqA0hVorYrafrooWJo6oZ0RVT2Xobi5ZevvaIp7rs5mPCTiu+y24PvlHVHscxqISLufjdn+H7/l6399yqt3O7n+MW+7jFW0oZhJkvJM5+3vf0Pkg3IibLJIdPyxymQ+4W/+TNzytX1EcfdbnFXCbX+cyl/L/kdVV9DRWDUVqpT6qlSLh6rlZp/+wKBvj31aQ6OKFcpO7MeyScjWJUHQo17IVh/bYpGnKKbJSpJDJPkdu6TDVhsahM26Ws/FXz5Dd3RsSZiQ6xpZU6DYx6nxO9k7e261PLpOqUc18ULMXTB4zK4yiZP/RPZGpDn7OGZDyWkY4vvCaB/lNaWREb+LOZVtBHmeo2w8/se/dPn1Tsznt39/x6F7YHjisP9OpgP7e579suTcsUmtj3uxQLm8IK+Pn7dMgY2wMa0ssSyd1rAZyEvCaHxKN4R4ZbOoRXbFmk5puyFus6HJxc2qacBtbNxhQIuY985WUIMOW5+hS97iri6xpwH7OxVNSjg5ls1+uyBNUhTJuLTrC07PjnmFm/iANRDpweGFQdlofHi1ppai5NfVH/lydEY1mTGSJAX7rGXXLvjMm1LK/btK99ihh+dMUGVNeLfdEisbgiZgcCYm4M8un3Jzd89NnnJ/I9715YclO9/gTi0Ynwm7OyRQfUJa68MixiMhk3Nvqg1qFhG2Hr7M6iV9gKHqNIsFlWwL0buCeTlG+eMd3Uys7eFty8B2mZg76kw832Nrxrddy7ev3rB9I/byL/QBvZ/TD0KUg7hZmtMAQ21pix5TnuUnzk/fBH/SCW7XDS9vBQps8XDFeh3yuz+8R1eFwWq+iT+ZsO5sctmM8e79NW0c0ZUhk4lUyw5trncxyUNBL1N6azXmPtbR1Jy9Kq/GlsFim5NkEd/dCEPcKioOJjd1zoVES6GBrR87wcNujVV0RFIOiL7EGuio+uwHtpn32wX7Q0Zc7Sgy8bttVTO6mFK2DpqUA4rKMeuDim7p/MDKVeTsHtZoNqg78R76yOfx1YzRJGC5EjWH/NBT2jqealHLPqlYpj9+PHqnZXpxydXjLwBwzs6gUvm8/orCEGmk5Tcf0JUGYx7SroRzu9u8ZDf0qIDQEhvbGgxJfdCdiJmkjauqnjfrlLIJqUOxKQ7Vhuub/8CT4Gsqqap9OehpuhmHxTvGqjhQRqfHDaZ6mWC1HZuko1OFIyvLAj00MTSXwpcUXLXCYhOh9B62JB+oHJ0+X1CnHftK1I/zvMAxHKahg6/KnqvDLZlqMbA9BgMpr6OEdKqJPjBQJOFzhYo/mOF1sIuPgRAAoybAuhpy4qn0gUjBOesV04sndO+/ISq/A6DWn/Bvf/kvYHxKIpt9/bqlbZbc7xz+5ZmsS6R3KHc6m8U7mlLMT97X1KWJE0wwCpG68RKNKy3n0aRnPJH6hCnkL3vyEXzlHh8inWSqaV2Tw6HFrvZsS8m200es3n9ge3NPJOshq1dj1G5PbXdYlqC5apYHCk3ndtnjSCmsxrDxjYIojonXYp6cPKMuWpRJx3gqnjmYDtjuXlFvDQxbvO8B0D3oJfnCP5pbqRagaF+gBTuKziG6FmfANPsD3TJj9/IN3V6kwqxHX/K3wRhDOedkOpTPVuJcl9x5CiNFHJ7OXcV/27xCr2xUhHMYpyqPnzzhqyen5FKazLBW7BcubhuBJHg4G/jUeU63Pa5hpqsbaCVxu6qRtw1XoU8gA9fSDonqBsUacb+QJQZLZzw7oV6BNRCOZn6qMFcc1KRh8UEgmg0PntsXhI3OciHmYFOVnBonnE5LHEWshaXoaIqFooAp1VBGI4vT2TGDUGedoXtibbr5BU3S8eH9ilxiCIO0wC53OL7B4ONx10VUiUE1gl72LI8mQ8K5S5arJFLhIukObLsIJ3MgkUjL4sA324xlEfH7a0mErmusOp2SjlZWHKoW+vb47B16Pts4pssFCt3WW85ObBzHYKSL8+j9zR+xGRmSNgAAIABJREFU/ZCvn/45BwkMKvqSeTjGT3WKtTgrvMzGV01Cy2cpz4oo0ej2BpfeI579mVizx36GZQW4bYsuA2FFSemyDj23ySQxS+R/ulzycfykE+z7AUsZLd9EKWXlk5sWtiN+sB6esSDkT4mC3wjD8x+dkKxqdnWNbstctacRbW6p2oztTqxiHbpsoz1hOCXOhJGkWcN+V4HesJWggMz0mF/62IbF6IkwFm9k8+fh18D/9o+edzKYMbnqeXYirGKgFmDkREVKJTdKUzd0fU1dRRzij02hI9q8Isu3ZEjDU2zWB4tdlfPRp55aLd7EILl7oJdNsabb09gBRVeiSgdiT0I+v/qSN692KJKWqf2EKsOwCkGvaeRtcagNsa0Bvu+QKyJ6ai2FJ5ef8XL5mj9Fotbh6D75uqCbVIS2OAAPwQ2HfcTZ43OUUwlLX/ks24TALHDVJ2JOMPndf36JaTU8fiJuKa1mUuw23Ns6H7VYz6zj6FRTI9Sqw9Rc4o/UdDSEzpCyrdAlYnQ8dchpSOoe3ZOtJGpHVqR0xFRSC/JQRGjGOXWv00twQ6JolGmC56gYnogMU6tDizWaQsFxPzaVQ1bG5GVLlB9DzAGCsY62NNm2JV9LvbHuScZ5tSE1Yi52wj7TR1vS6oyqq7mQ2nmeecNdqGIcDALZHHzut8SPZnxh/zteyraE93+64fzrp1wFc+a/FHNMWLC733PoCn7397JW3ixI6oboQ8bEOEYKG/J2FBoOeu+RxjsUU2zevjBoDZXM3VOtpU5gGbNZ7nHcKegSJR1lYDvEhsPta7E+W1PM59hUqUxx+3h7/5KBbmI1F2S6mLupvkPZQaxrPH8qwHDlIRMtKYfjIOPRExEEjJ2Ib+/XBOmaairmeLUqWdcxjXZCFQqD+ruLJ3T9CO2pwf8km5jffFOwi/b8izLkffUSAH8U8mR0RnfXkWhSi/FfPeV02hP6DZtW2M6ibuk3Eb+7zfjX/4NYs0718bYxZvAJlY48pYqEE1gVJVrfM/pS5f5BrO26esC5tMlWa3JJMXgfpTS/eoJGy3Qk94MGiaMxnDiEMrAqVjdYPbihjbIXazbXJ/iWSb8ucHSJC3B8jM4iOtwyCeTN37DZSv3CHw/XHrDNxZm1zjJKz+fx16cgv9/d65iFx/0mRh2Ic+zF15f0SU5cPRA4AhilnpmkVUtTr4h3ElSl77jeJVS5yZ9yEaTfrq+pEsGrXEhtx84bE4x6nInC86/FXpx9NuLqxbEeZvh0wO4fbonk3DEJ0CnJeoNWojOfTaYMFQPPnPGhlByo2xUXwwH72w26bG25GM1oe9DXDpfywvW+1vFKi//1b/+OXN76poVKVH5gl8fcy4AxKyO8ucHYVkg3Iii/aW/5xdET//fxk07wfP6U5a24kRifXXG3cAkVhS4Sm3hTr+hVh/aQEH5ERW32xFnPxWhC2kki611E2pjoqsZWEy8Qtgb3rYnqj9jXwhBVp2OrmZxPJoSSbsq1G9bFPSeDIeFETP70aobrfAK4oeq0nULwscCqgV6XqKFFLI19dvo53qMDh4POWDrLulep2wzPsvlyIpyKFWikRUuYBT+gUsdugO4ktJOAMhbvltcqyuqBOHXwTfEbJ9Mrem3Ind+jZcJoW+U4GjHLPY2lcliIOR44Dvag58O7Vwx9cWCpQYF5CZ5uMtvK3rxG4Ta7h7gjnYnIq6pKbrf3hKsJj+d/AUBEwthSqbYtlczGDkdnnA+vsS5dTPlMWZJwUCqqbsn6IA7jeXp8c9WqHNUMsY2eSIak5jhkNpmwK0tq2denFAaOo5D3KZ2UzSE0OBu42F2DOxGpc/W6ZWT0BIOW81PxgLs4gxI6s8cZiu/Ldg37rCBUFEzJmIJtU6UHFFOF7DjAACjVFMXO6T7YRIawO78boJkuhnlPNxSHjOs8pVMLjO/hXnklvt7yuHA9qmLH61txGEeZj/nMZKCPefpURsNxhe33OFZFINt/rN7g6b98gt7H/O5WRNVB1FPYAV4Tsy2Oncp9Jd4reah4FGoEzildJhltfKBxGSiPuVPEIdM2KqdnNrUGC4k3j5M9M/McTzNJl8IxFvaQihIrMziRWoTb3ibSWrSqIF7cSxvQOTECzn/5AtcRTvDKcXm518i/fzh63kKVwaI+oR/H3G5PeSG5LqvHcy6cW66/L5ma4rv8oCZIErZ3Hou5mHfDaOm7gt7UGOUSMeoHhHXM9V9ZWJKA/2ScsEru+Wa3YCzJvEcDi2ZY0Xk5Z7nUxXwwSRWI82PC5DLekUpE80NRMGh0Hh4KkOLAndOxe7djF70nlyw6X724RH1I6NWaUJZThp+d0roOTq+xt8W+ff3qDWpg41QKk5EEkFQmA9uhcGoOe7HettEzez6ldMofJKbqqCROj4Mif+ygSkSz7rdomkFfQVNLiSy9Qo0VdBViyR37snzNhXVBqri8iiW71C5lYFYYWsg7iY7ttJ6061nkGtsHMVcP+ZZVlfKLyznnoUD5rrsaJWiZnQ959qVk+Xl0wenjIf90ZFuFyflTkpV4PrSaaeiSdxa/nMnMQlejhi6TK5e5THX/x81/YfW6QK10PnwveZufW5heS1DNfkCt+O4Z/XmJrvfossVKMSyatOVyYFHbUpg87cn1EQYzMlteGorj0s6Px8/AmJ/Hz+Pn8fP4efyzHf8/N8EnLGci4tu/XhBh4o496qlIDQS6R7qr+W65wi0lybSeYDkq20pDlUTWhtOS73O6VgGZkvnyPORy8JTaGtHLdNZ6v+Ohi0hjhX0j+9Aqnc700MnY5lLJ2fjvBegfj4doQa9GlO3HlGbHdh9xaTikexENTBwXpx+SdxGxJAefeC6laeM0Hs5oKt9DZeQ3NPcPbBDQ4oeHBZ1d4Q9HhCfiJlo8HEjzmkFn4zoiIs2ygqjYkO43yLYu8va4l+3xiyu2y5i3a9noGVck5ZrkYcte9rjMvprz9PwRzqnD/EqkJP6f3/wG5bc2E99mJIltg4lLVzec+DNiqRa9jtbYVUVuKMxD8WyHwwc2hy3jD0velCK1eGgTdNti7tp0B3GzPB89OXpexW7oXZORa9MY4ibohwG2MaaLE5RctnBoOcu4xupbnEDcPnw/5OnnJ3RdTbsQkbE3sEiTmsDz0WVLhq+rtEWHp6jovfhsHuq4cYzlOJzKILRMcjq7R61NytmnIz2t13FGDrvTlPRjzcAZ8rs//Bd+e/+BoSSt/tXVY3R3yDfJSwrE+uuGRnmwyfKIu1b0A6TrGdbSIdv/Zx7Wwj7dMziZPMNqTaLFbwBwzBnjWYjSpDiRuGmRBjwJYQN8MTyut97cSTakPsEOBmRJzMNS1tg0Fcfcc+H7DCcCnp6/fMuyygktm8emsM+tpWL4p1xeetSxmPdV1lHvh7yPXtGo4vtCd8g4VHGGBqtWRt/tiPbUos1U9mtxA1mkNYe6JemP95ovWwb6dMWwmqIWf+B1L0mmb3O2lYJ+ULGfiD1Wlybv0fDSDEVC14PRn7Gsfs27P96yb8SznQ5muM4BmxL1Qtjn/gDFasDI+Jb2TNxIrMEIh462yzhsxbsq6R85UU3K++OsS5cVHGQGy9QDPCuki6D6AciSUqgNbaJh6xIsVE9otxGd03Ii5cm8yMC7OMVTNG5vZalIc9BLhbu7NZW8dURKRjXx8AZTFDnHfQFoHY/P5uxlatKuCgbz45vV0HOxpYj2OltSuh3qVUCnCzs2FYt8VVDoNY0vMzBdyaJr6GuPvBHfn5URkzpgPLQZ/kLYTuDZ+PGGTWaiX4tbfrLck+glqZ/RyTqpGyj0moIS5DS1vDGbGfvs2G2USUqn73GkWLA9aLHCR6yj98RSvCBvGi4Mn7k/ZxOLTNPzixeUKahrj+BUgveShJe/ec3qVcRoJn9g9oAxneCMPFKpyrGMMkxUBoH9g4B7qx0IsoatkmIkUsbNPpaq+vH4SSeoWgbToaxp6SXz+ZCgCkgk/Y7iaQwCg2xoYxbis0PV0LY6bQ3Oc3ENHms2N9xyNT2HsTCm8cQn3WWs8gOufEZ/YGO4Dvs0ppFptGBsMHx8hhWtuZTG4ocKw8EnislqTd4rRI34javBGNqcPk/BEdfv680Do9Fz1pueToJ0jJM56/2Kng6hogXr7Za+2FFlKVHx0cg0urSjM3uGkgS6VSu6vsQdeeiSCinJVGJNJfbGJEuRlqg+UZs9nZtomJjSycZ9wSFVCQcuu0KkWppvW4JBQtT5hDLd9ovnFcm7lMB3aR1hTMWuJDd6UqMnvRYHr7YvwLEILYeqFwdAmsW4oUKRrDkEYm03DyXesKZ7pDKwxIPqg+MUo2952LaCZxuolvhfFY+40zCNgFT2cXplwOnUptU7LocS4WlpuLVPZXZ4MmVkeSZ1ZaLXPaYugRzVgXA4JNTHPzR3l01Jr+gMfQtP1pOcYkPfljRWyyMpo/JPh/NgYow8RqsUZS4O3mJ9z2/evWJ323AnU85FkPPsiUVZNlxKKrW0Nlnt7rFcjdPqrwC4sSKGlcM6K9nf/AMA54//mqFjcf96RSBTMkUXYOh7PG+EI4kB1HpLc9hhjxr0+THNWyEZevTOpuo1Qv2URxdPAAjdHf2+YrGIMAbCxlx3hFtEnLsX3MuDfGq7HPQBy1uFaCXSoR0+pdYwsRpUSWbQaRq9dU5hNpgyOCydOTPzhFUJU9WWfzcmqxP2/TG67vtXIlh6VM44eZLSOANGgXQAy5RJ+4RrY0MbCtveaxW7b9d0gxnRe2Enxe6/kmsJ48dD2nvhBBNeEphXWH7Nhey5u8t1IvctaXRGGEngkpmzaDaceA6xPKCNYE6TdZTD43To2bMzou/EvlDMKfEmoawL3LGwHUedYNUZdm8gSX5QVYWobRhZFntZX9qV1wx7lX2WUr4VcxAtOrBLzKxiMBKOZu4O0LUJleGiS0L7vtpTPqywHRvdEfvCC3oCjpXarw8VeiPJErQK+pjZ1Yi1RGAPTkKscxV1+4AucRarBPbFLXFn0EgpLc1oMZQO9cTFkmjjYHjgIVryAZN+KC8qpkmopmSzHuNC2JNveaDmjIYqV4/l/qxzOnfGPx39zQHDzNDmwj4rpWcTlaxXLYns99UKm9opubmOWf5enItmf4EXhrypXjF2hK0MPHj5X1ui+nv6XJyzV55D0EzJ445QIonjPEdPDVITvFDMwcCxsHWb7D6jlzgM0/7pdOhPOkFDs2hl6e3xixl7K0Cz5nzzVrzU9iFB1SrMMMeQsjyn5imWe0KXGRQHCUkennJ5OsayIZNFzSUR2SzAs21sXyysp9Sc34v2BENCsMdTB1XTiEc1sSImbpt1tPYnNuZ6xRduQCoRnp0Xki0/kOYljidlc5I9eePRaxGNjKruVms2yZrMO2HaSaZ5TcEbjLECF+Ne3Fxy1aGvde4WK4pU/P5wPqaNW/ZlQ6tJUVkc+s7lUCREsiWk0Y6jaVsJmZxZdFLEdPVyiX96xuOzp7x9EHN3G3/H+FZh8PgFAwnL15orXvyqYnoyZJsIPlFLiynsjj7p2Mjc/9kkwNwXGHpIdCecoEHFLBhiBA5OIObEiJf0vQKNyuBEOJmHT8il2IaBrxt4/hCtl7fIrKBaxrSOQa/JNodBgG46tFWPKx1ZvNuziArcefgDL+qu8lHKjiIrsOUtRc8KlNLBu3J/EIdI92tKs0VzBziSlkodmLSpQZ5m6Nmn0V936R0njkq17SEWt7RvIx0jnuBbHrX8v/J6z/vqgav5I/RYHFivkwq9veCxYdBKfcaZocJE5YUy5quT/1ms/8jntM6oxz6hJ5zHXhtyKGqabEEtWYRC1SQJLU4dkxPzuArx+qWopTx/blHUGubARa/FgVrTYcwtdMXAqiVw51GFrbfUroNZSA271sRtVPBTDEOy6us5OBpm+wR1LGzRKHSsAXQYmDJyn57phIGKQ0hgyaDMVCk3Acr6mIY/acQ82YFLu+14agQcNsL+Q3qyJx0v1HOcQtjsh+83dLqN0Vh88+v/CEBTnfL5ScBuEDN9K35zfGrhPT1l5Oi8OQhHfmls0I0RWb9nm4hA+KY1cUKbJKl4JqV6UjvhtLZolc+Bv/9Hz9ug/lCz1SuNZRZh2EPmg49zHGE0JlVbUbriN6wyZpkeWGYlhlRHaMYQbfbEbUuXiflM7g/UTcKj51cCiADkkc50BvtoS7mTAWO7p6oKvCbClWeP4bjsJaHEPxqVSS5bK9zLnj7fcGKPMJ+KeVdp6cqYuo9xpCTYRTvmbh3hrXPWkXBupavjeA6rNmUVieDgfX6gKFuSsYMt0ctqHuJnOi+en/L8C0FVNvbhOjkQZxGxROUOgyG9dowO7X0YBSd0smapOSqrJOfS1fEnQlj5UCYURUvxaku+kWjgWcryQ06yrwmknNbiIeHZpUfrDfniXNQn7dkJ231GYLRcOSIjVg1LViMV1cjpJK90U+tkhcFwHFIYYr1Hn/AVPx4/6QQDb8boRCxEbi2JVjmZskGX3JxFc08fDNGMhqE8AEbjp5hGwHZVkUhPvG72aFVDvtwyCqVn94cQaiSrexRJmFBRYw0aLu2AXjqUri9RtRpUnd6RtFyOQl8fR9P36y0XFyYHCdq4fqhxvRGq49HJaDlJO1BaqoGPWdvy+0zUpia3NCKJjCpUHdcfYqYHOkW2IdQ9pdqy7xJcXc5Lo9CYOrlm0kuuv9H0DKM28GoP+0HerD6xDroWo+YNtURL1l2OZoRssy1qLYu6WUOtW+i1yf21aFepFgf0riAvIwrJ+KHQ42ktxTbHQsroHHactS6drdBZMgWl2eQDhXW6QjFERNebCetqyzQdUUo0Z/FwzLc30Gxcw8V2DaroI4G4S6TH5HmF3koRS12HqsDooZHyKD0tpg5O09AUnXy3Dksz2eUJqXQMSmnRew1K1tPHH3HZPYMemrpAl6luzWhRLYUq7smKT2ulNKlJfRoQ2Aa1pKZ6Olb50DU4qU8oA5SZ1fAo/Cs6paKVWPAnVc3k8gJFV1msRcpo+OQp+kPB29GK2VA4o6en56xXS+Zqil6Lw/Og2mjjPcnBopcQdLe4YzBumSlj9tfHjCbXUuvN8kIm7ojJPsMypGL4cIKrmmxTk1jSTfXjkNDyMG2ds0iK2dYdid7TlyXPRnNpUzaWpqArLXYgHF5aNnhDG7Nt8SWVVm97uOEAY/IlrS8BWHudru9xL47Rln0l1iHsTHQjZKcl9HPhyA4fLJyywe4HjCWpevrMRF8t2T80bGS/4l96U8LBE5zuW9q/Fp+dvvgcpS9xO4VH+a8A+Lb8vxk4DcPRLzBlmaCc2pzGOYd1wptG3MjUyGB47qNxDDRhWaBLXtx9UqOoQ2bDGc5cvKuxLyiVgqfTS1Ipu1VkCnZhkpdbto5oh2grF3toMp9fkSni4B04HrrmM5nMySpJE7hTKFqHIs2JJZl1EFgMzRSrN9AQtlflOzrzWLT45qFHk7d+p9bZVzkv4z1D+Vm1z6g9l8xqQBVBbzj/Aq+IuK8q3t6t5FrnOPuGWlH4qIU7DA2UqUarR5iGsE+zr/Cvhpz/+YBwIpxHka+pmx2V1VE2Yt6TqmIbHQO7LDtBH1t0UpS80FSUQEXZmeiS9WWea2yjCnfgEEtR9G5RM7VVNMNnaIt32+/2eONLLKPGlh0Gdtpzbg5pioTHF/KsMAf4fUnRakQf5b9WBanyhi444/MLAWaq6p9ukfgZGPPz+Hn8PH4eP49/tuMnb4IpDcFQ3Bb0rETVa4r9EleqPnz2pUuLiep7GJqo0TV9hueaFOqB0hZXaMvrMC2DIFQIJZG1+yjB78eovsVIfmbpNo7X4Fkepewt+fDhWw5VhWu6jC6fADC5OiV9OIZtZ8WBKB1yl0opITXm6emQIAyI1iJaUqcz1EZBrWtS2WbhOTahpoGtoHYiirSbjDLuiOMKXfardY6K22eERoci+9XW+xTPNDH0GSMpJVPjUGYa5XZBVojfTT4VnC6XvHxzTyE5Vo12wm5fcrv8ltAT0bdWemR3d9yVOX/4g2ju7vKOX/yrLzkd+DSFZIbPEt69WeG1B3LJlFBnHa7Vcv/qLepAfN8vL59SDFak64gO8WwmOqNRyHRk8sWffaxpHLegmLqG7ljUhwrJb46pOYytIb2+p5WAB9PpUFYtvWbhyhuobfq4FtRFB5l4Xy2rMXUVvzOoZO0s73KyQ4GpPqDICM60VKymxixzIpne19sGIy3okh5f+7QZP/qrz7GbEM9vcVPZh9g2HPoeXW2p11IJo9EYf2mS1j66VP1ognMef/UVzcOe248yT79dMJqNUd/oLOVtxvky47vXO9yxhXMuwRPGlvVbDe3hDlvWXAqnxekN9JHOuDgu1KeJuM0u9y73rzd0tsFTCdIa2Qpbo+RsfMJ3kne1SzpyVgxNn9FX4jazOeQ4hYaia2iyvtLHJU/DU+zTkCwWN3VTSTB6g3KdU5sfieVNgsEVmarRScWR9SGiLhO6+jj9FUrQ233/jpCONrHRemFjo6bDLEwM6z0HmVq8iFz0/Rnv4w+YGwFIyq5KlOWvMbQKELeP1XbD5jbhC99g34h9vLxeEtk6rq+jSoaTi+2Cd8mKE6Xn4Mms0fuEdGhQXh/b7j5tqRKpJNPbKHpNq3sUreTADXxcw8f0bCaSSSqJXDA8FPOSk9FQ2k+NapjQjVBycQaMwhGa0ZCmNlhi/2heRxKX6JrFQPIGB2qP0g5wrApJxYmje4SDY1WG23hHL5mA6g7iuuZm+UeGO5m+duco1RYlVNAvxForVkXx3CB7KGEibNvVhzRFTKtAYInM3ORyyvhkTmhljGRjsBnYPDo7xTdtItk2UsRA12IpAUzlnDoBaXmc1goNA1Vrmcvb174oUBMwpja9lKy7PxyoljFmsiesxHwu42ucakRoDGglYYTZKJCFDEYVmqxZB7VKZlosqhR/IX5ftVxqdUWVVuhSSmYwtKnKOZs6Y6eLc8baH9vvj8dPOsH1uwJPyqr4vYmtm4yCgOm5mBDdsChagz40UQ3xUq7qYmIThj33d+KlhpenuLZGlro8SM09zWix0j2q0eLIVJhmqYzdIWkdk0sm88rW6OMG3dKwpFzTdp+zOByjLcPAwNBNNFM8y3gyJZ8YKIZFaYtDpslaKq/nEBdoEnxT1Q2z2RxzpNHL5tHg1CNbxayiBl82tk7PfErDZmT02JWY9H7qYbk+VaOzT2Vvn1mzbiuSukKX9G6a3Gw/HrlpEscHEu2jgeUQ3RJ3KoYrKdgsl8WmgOw93/5a6P+NBxM66y/Y9gZ7mXLO4wmv7htcp8Ddi9TA2aMz7vcF78sFw73YKO8HFpqmEV6E6IrwZHluYhhb8tTi8CAN7PSYiqy3O7K8olR0OkkWcOgVbNXA7lQ6SbeVPsRg9Qwcj6aXBWtrQK8q2H1NJQ+AqnpArRu0RvvBkZ34J1RFgpEl6I6UdGldWgvM1qGS76tUJYpmYQQ5j2W995+Op/MZA0OlLjL2W/ldDwfe3n2gThu+mD8X719vKA4v0F1PNJ8Dp/me9P6a/asM/1oc0Ie2ZWLqLIpT5hLwUS2GRPk1rBpyxBrPBiH5zUt0S6GW/X+mapAZFZ2yRxteHD2rItO1ilWT2yPcQYAp2Vwa3UGJF6xpsSUReHy4o4hzHmgwpNTRuTsiag8YrsteSoKVdc6DmTEdjdnKWk663aOWPZYFqiW+D7Oj2mzZKtDL3P3Dw4EsUeiVY1sIZC2pr3T2jsPzM4OJKom8uw1KWtFWFcZGpCpv0jG7w5Z+FeObYm8nvy8o3HMaB05SKeu1rOjqnJuLEwxEXdopTYYBOM4G3xdz8ua+5NlsTHmdMJH6h4q3pipMOtlf9+Oh2yOQWbHQ9ahjEy90cCphF5oTUpPTHlp0iWak8bgKZiRthC6pyWaeT925bPKMoSp6ir0nJUoJZZ/TFSI4WO0rOnJM08CQpZukyPHoUfYqpQSRWUMTJTkGoX3z+2959uJzALqywi10BrpGqIrnPZ26KEpAVBYYI/n+Vs9w4DL70kG9F47HCX1QevzTMyrZdzpyfWYTj4lnonTCtk3Xx/NH3FeHHySiFLXBmY9QDxpIVZnlOufd7T8cPe/p12coWY68L2AUM2ZhTVs3LF6LOqET7VgvlnRqQCvLTnq8I7N7kmhJJ+W0bBvMsGWsDigHYj4PO4M4eWD8+BSnE3ac7XacnvjcZLeEsgd2YJ+QDvaoh5ZW1h0z9f9Da02On3SClWbgSXRO2kPoDFAsiyfPhf5V3xk0fQNOSCIRWlPbIo4OXM58Lp6KW4puOlRlSV8YeI4ozpqRQmNWVPGeWIp6zf0TAsfhId4Tyc1DFWFa0LcN5kdnabgY5XEm1w58yrZEP5E5bdfAaX2iZs1B5uVRI9zUIwx9ItlkXSk2VejRdDpJKaMRvaLWfdRBTSORXJ1uATW9av2AmAstlW2r0dU1razF1dWBxaYmKRVyqYuoqMd56d99+BON2WJOxAK+fp0wNg3yvOJ6JxzUJLDZpTEmIYyEs+wG8P7tK6q2IymEgSVFjX8+5Wp2QiyFcSNlSHgGn4/G2JL2Zji0cJyQdF0imZswtAOaoZOWEa++kxHVYnH0vFmRoHQtjlaTteK9XEdB1WraJKeRbS2tdmBgnxH2DslesuWHKapuolJhyjqm3rUMHYfCUdBlLaUlx2w7yrpB98Qam22Mmits6wW+3AC5UWI14Fka7idoyADe3/+fjJMJjOdkiFtFpgwI2yek2opQFTt2avl0vYJjqxyk+HC0OrD89fcY2gnPJDtKZ9bs2jvUUU8ulQGwU670vyQr/y8272UE/eTAQC/ZGDumrXDQz4IZ22jJ9zcllvPy6Fk176MupME0mFFYObuPNXWWJJsVSpNwIrXc7NMBZ15IMLCwQxH0lYbB/qZB1SMU6ZB6xQLdJM8A5zRDAAAgAElEQVR1NIleVUydu6piavSsJWsSWYjJgiooyUxpZ7pB3Gb0xjH69u1OkAD8aq2gdAr6o6/YfRDv3+gp2TKncwNMJPpQT9BKm8nAJ0+Ew9s1KmM0zquEdS6CinWU4eQ94XlB04ia4PDLPer9O4poTfUHMe8j32J9naBWJzzzxR541Qyo9haPPwFC082GiSnOo8btUDE5Hzgkkse1r1SarGeTHyhl61CV7Og6i1ataCWBcB5n1MYI1/WZnYsbrZIfKJINpmFT2eLvGhKMrmdqzhg/ljX6mzvKuEMxOm4/SmIVGbl9zMBy2MPDvfibfdWhmA7nvs3kTAQ8F2ef0aQd3eGeG0nzFgYNVaUQzHRcGRiOry4JJh2Pps+4e/sNAKuqxrU6sBU0iZA/OfFR9BjjwwZrIFmZtJpUV/Aw8aT8V3rY8N33x2dDnt5Bo9JsxLucXe4plj6bhy1RItvnVBPbnBP0NnuJcr189oLl/ZKb+wJV3kqHwyc4vcHtPkHdic9Ovhoyci8IZh5pIt73bvNAVvZ4gwlWK/aF4mWEzZh1vOZDLNbCDn666veTTrDWIallVNXWjD0DzxngWLKny+1Jio5aKTFUCd1VGiajniZQmWrioOx7i33RYBUWiiEMxxs1ZEkFp2NqmeJxVJVWSTCqiqSXvTVVxWQwhd5gdS1JbIcNeXHMD2jaHXpg0UsHpdsuhX5gd3tDIXudnM4iqmIy1UeRoADVMVm1HV6f0CGituU6wzc97NMxVSsOo7e395CB4xiUjYzu4hbfNSlUgdgCSBuNOtVorJR+JA5o4xMwc7dKUE8GlJ1YhumspVMCRoMJZX8r/y9GqVVKo+T/Ze/NYaVbtjyvX8Sex8ydmWf85ju8V91V1VUF3S0aIfAwEGq1gYRHe221hIeDAAkJYXR7SDhICAfMtsHAaa8lDFTDe1Xv3Xu/8Yw573neGBHfrfuUH9fBQu+EmSdP7tgxrFix1n/9/26oJYi8nk8PawhTYi0pZZoDsW/w+vmMjUYz3mwzLNfksb7hXG80z/JI3BHHXivya8CZWfgjJHMXf6HeNYhOQzTH2xLTK+icPQi1KQxjoqlhqqsfk+KW5eM1gtHcMpnKQPWHPUHoQ2XgBOq5r+IZtj3QTiaWrd4tO47kRsPKktiagccfbPJhZCwaaqGcGXf0cB0LyRzDOZWpAjBvH3lMRlYsGFNNkWZbfPVHr0gPc5pIbbDET7DDkPxhotOJ+GJqeX4xo60yWo1g98KAug2VN++pjXXsO8g/kbhvmFYKKGFGAocAv28IY82xuSj445cOluFgf+FQcfROHIIZeTjgTAN3moow/7RhOBy5CGruW+VUiBKKfqBoBJEmVQ6lpG1qunJi1LDwwJ2z6UbevfuOSXvzognYH1KObYdhaiqh8EBkXjGELcZnWTQhmeYOS3Faxzb7fMjKjtlFTPchxZopp8LYhlxcfcva3zGsNUJvJVn0PfW04oN2DOPWxzFDDkOArNQ6eV4dKec5fuWzvlPG1motkouI7d3I7Jn23MKIy71Deh5Qa9X36zrmKjCx5Rdk1rqK/rN2d+fR2AVldcB21Dqvm56H3ZYkNAn1uhg6m1p0vFnOmRyNhj702L6gkS2GBiltHr+jKjJmVwmJBneM855luGIZxTiGDmGnDfv9ntlqxkxLXXVdSF3uTvq73Zck58pmGf1A6420hsOLRIfS+449a3qrp2/V2IlKYIYTcz/AEMrOhksXe5XgnUXYWxWqfemVROaCKBhx+s+lXiZjNdFJl3St1rFhRUTDQNu1NPfqQN4/lhx+uDnpr1NB547Eeu2Ua5O7zYbjeiD9HDUbFoRnNpNhc6XPizhcUt4H2PP3dLmuZW5s4thiv4Vdq/VnJxvylu7DBiPU5NtmwohAWNcMmmJvql06cyDwQpyx1e/x5RKqz+0JGPPUntpTe2pP7fe2/exN8O5xja3zHJMccFyP0JEEWh7HGEfq7SPr/MAoP9fm+SzmLoHZUQxaQbw3sYRHUVYMhfJQhW0xDi19WTPTbCZdVXC721BOJaGvlRCGkHLf4noj+63yjHb3WybztMDUcRKaviPThea7I1jdgd1xwtXF4pPXY9ozbMul0iwixabFHwtc36DQ4A6TEOG4RL4Jmjs0kxIZmMjeZ0S9h1k1MAmGyWYolefe4DC44B4iFqGr3+205OCrVwY37xsiS3m8ZiRp+xTDn+FrIdeP3Y7xWGGOMcw0gKZVoRbRZJw9U2EPuy2Y8iNF9RZTS1h5aUVb71k5BoMufWjMjwzjCpyUVsOKw0iwfDljFvpEtgJCxd6p3E/o99R9y1CZRPpWOlodbTsym9sUWvakn9ZYvcATAaOGgveMTG2JYxg4upBXxD5Gk2PXHYMOjyznNv7kIE2Bp+s9m7pgTAv6fsQN9c1XwmQbmENB05/mWwGiF88QdxOGvIdJ3WbcAoJIYM1j+lH9Vt7NOBOSqE5JdQ7vUtqM8YIobLj/pHKxDq+4Clpqz/xRSuvaFfzW87Adg69M5Wk/phva8cjFAL+4UOGr2KqZByZ/4vfcf0Gw+HMNzXhsOT7sGBxJ0epowPGIyB8RQjCfdF4vd8jrimMH5zrnZDoO0rNphh6Hz6U+HTQTjdHhNGoMUqthdEb2hcEyVr/Xd4LWk5AfMXSBZiEn3NYhn5+O71wzdIy9zcNtwDTYPL5XeyL2PPpsSzT32Wtv3H8/ssskXp4R6Vvkvk8Ihops2xBontiHyaXd9fzNb1JsHdEwHjp82yaar+h36tbkpyOcf8Ui6pk1Kjxmvj7HWG/4y+y0WL4ko87U/9ZHg1EIajvH0cTl22winiZCK6Lx1fsnU4dLh0TStGodX17EBL5FM+Y/ioH3jyOzucXFWUytwUeeOzKKgvr4gb7Q3MPmQBvUUPdoLBzXoWBITm8qnz5+ZKbr2+wk4tjbXCcW68/v0OXU9Y5sl/9ILFL7Hkthc25JWh36PhxLVmPLwy6n1HvsyrsgSSYOZYUdqrlo1jkPuwfqUdBqJq0+vacoBRmDAtsAH+/XfLr/AjerHdBnAze56os1c3j/saFuXQZdJiTdgEm6+JPH9qO6Rf/F9rdY9TmJ+RWc6zz2tmC6uMbxRxxdd1jePOJEFs0045WuE5xbR97fHxFCEs7VZ8GZTdPUJFGNqUO9efll+/C5/byU0t1bpCasnYIF83bA7AeKVINHbI+iLumnEksbLMRIWg9Yzhxfh0PbsmWSI4nd0OnwWJrXhGHCZLnktdacK3b0XUVvmgS65o70QO/1YIXUGrln9gZUp0ZauhLTHqnWyrjfdg3l4Z68Kphq9VkgJlzrltnqnL5Qv9F5A+6dx41VY+pclxm5JLbD5pAh9AZodxmNFAyM1Nrw+oNJxjvyffOjzpbh+gxeSNp2DBqkUhmnQJ5vrxZ4bk8l1DOfdw6NEyHHglu9sMOPLcMczq9z3lyrEMqYVbhzA6MO8a/UM5eDy1U1kX/Y8fao83pBwIvzGaZjss7V2I19iekKnjsJrk6dlM0Ox225ClpGTTQ9C07HNwo9hsplbjV4On5fdR3T1GA6EZ6uuzs0HpM1Ubc1Rq3Wj7QamrJDSg+JMrweGUYrEOOEHWtkZRDQjjZD1SKkBi4FFnY54oUOia6TMiaLqshopUk7fJkR4j/443/A27DmOBS8uFbOwtu3PcgLxOVHvqrVobAbfdx+Yuwngo/qmZvFA+b6A8n1L1ku1EHWVRXCvKR980DXatLmds2fLq4YpEGTK/Tuy8tnOP415tLhMlHz7nWS6z+wuXRs3B8+nPS10CTKfVupBLxZ0uhwG8NI2/0W6xgz1/npsAnZWS1sG+41iEqKHqN7xLU9Rq0D6shbmslgexRgaBYiU1BtCxLL4G6nwrWTMyF+iNlaFqFQ8yMNl8aZ49ina8HV4LNd6tCUBSIZ+aDShHSNRV+tuXj5HE3exMN3Jl37QLUxaI6qH+EYs52dY2DSfC/1+zs4kcE7PyOelHn6OnRxmxklI02n9sBflx+wN0dexS/Z6bDxL88CuuSK5MOpkba7hoPOJRVdj+dcYJkDaFDKzFvihD7SlJga32DKCWm3dIOHYX2WcPKJ4oALeY2nc6fRH0w0dUE7gETtx56R6VjQ9jVS1y2bVkNARTOYyE7XtZUW/tlp6uFvfvuRqlH9ePb1L/Bii01eUKbqEOxci77fs807Ok0MbgwB1s7Hf3GNpTUW7SYjrwPmYUk7aZmn/T1Fu2Bfdnz4DEjalWzWKV1XcdAQbKPKGYRgtAwOj+p/i01JXp7W5Q59zDhZ1BqBapoxbiCoBkGmMQDXwZx+DGn2NbejGqdGxjz2BlexT5So3HvjfmLz0BKEV7x5rUBkYyeZDMnzl6+RGm077hzipCIRNZatwr/uaBE2EF28Yqtz6rL7ch3x5yam6fRG9eMfhfh//+NTe2pP7ak9taf2/4M2TdMpu4puTznBp/bUntpTe2q/t+3pEHxqT+2pPbWn9nvbng7Bp/bUntpTe2q/t+1ngTH/2X/5b9hv3wGwr1piu8U3PUpNRCvaFiNosQKP8kEhHNe7PSMD9gSD0JQ8vmTmRRhyItZahL4MOaQ72rbnM0FD3bYcDwXjONJolYL5zEIYK9q+4HNp4Nd/98+Igjn/y3/1j36nv//5f/1PqATM5irRPIsFdWrzJ1+f01sKBWWYDsftATHM2DSfC94nuu6BsRVEcxU6juyJNrPo7JJiUonYld/x8cNHrCDmTMsmYeQIpGI80cTD+zRgkClLV1Lol3O6if/kH/+L3+nvv/hXDe0uY/IVGKO3JmImxgkKrT4wtgV2DGkzIDUiMbQDpjzHiwCpxjhdVximw2RnoJPOfnJO4jnYy5imVIn93b7FHCssLGpdQL+vGmJ/jmN4GBqkY1gJ//w/+t0w+j/7J/8hy8UCrImhUSi41eUMZzCoG0HgawWOGiyzx2xG0ONk+i6yrcgryajBA1a6oRgr0k2FJu7g6+sroqWNbCrGQYEvDkWFY7u0kfwsR0l53BPUkmqoyDVJ83/zv/2vv9Pf//lfxqyu31CPIZVG7XWdpMlGaA0mTSWXJJfYuJijw7pWQIHbh5SZH+K4LY1mwmnrAce+BAfyRqF9DVewL3K8xqJ31fecGoQ90pUlvqFRuaKkqlLGfIOh2fL/+3/5t339L/7pv6vmLPAwDIci3dJokMFUS9xhxDPgINUm8B0XbwiYTJNo9pksO6PuLNysJteouu10oC08XG/C/8yqb48Yg0SEgKE+K5qGeWvQmgOlLjLu8iNj37DvJP/j//GXvzO2/9O/Ut/J73PGfcW2f8DSOnyVY2ENF4T5LZkmh3849DQ3jwxsGE2t8+aZREwkM5t6qQAQRm9hth33HwssXwF0IheaziawW/pGLYBM9Iivzokzj8VMg1bWEZd/9O/wj14K/uF//Ltr97/7b/93Bk3Kcey/Y2kGbKYZ3pku8N92rMyYzcMjK18j4sOQw8cD631G7qjvOfOBMyOiiU3yO00+bWVU04jhGdRax3FmHujLBhkXPOg66GY98vrMpjNmJJeqcP/6Iuban/Of/vN//Dv9/f7//Df89jdKx9L2ewZckshhqykHh9HHCwR10dLUyvb60RlWJmmlxSSV/XD8BHxBYPb0O7U+y7Gi3A8Mrk24VO/6uG4RhsloGshSfc8zoQtKLEMiG2UDfTHj7KuAP/33/73f6e+//h88huqKUaPwaxK2jymRE+Jr5K+Ve4SL51jDxIMmKinKBqNraUpBvVeqIemY03YWTRdhrzSy1G5o25HyIHmhuQVm4YrSNThLJEuN6M3qGLr3VJ2g3Kl6x8I4rcP8afvZQzArPtCIz8oAJXawwDRLnOGzptdAnpaETY+baKRlk1EdKpzAxpC66PZYIqwdnuPgoCYn6mIcz2Df7ej0wBlC4pyFUE/sJ40YxcX3D8ycBWWhnuu6IzWnaMuPxz2iGxhKvdgfDLq8YSrBNxTc/Oz5gnIHuT3QPKrDfDp7SfYw4MsBz1AjfNvntDk01pa5PkB3tUG+d+jv9vQrjfpsLJ6dLXgsjoxoC+0UxOcRf7O/xdcGZb441eCqsnc4rk2jN7ZZjGRkWEPFMGmZn6ZG9j7GdCB7VKi3Qfi045Hw0OFFmiOy6SmbHGPXY9l6lXS33DYDYRQh9WFk9y6DU3GsKnot1WJPPo1wyCiIeo00NE/59sJgxfXZOa4rOWrou9t0bJyK85lH4iiYclKXTOZA0dVEmvpM2oL7Y0xk2HwOQGzSB+6ODXXek2htv12R4ZytsIMLRo3edSLJaHtcJh7HrUJ6la6H1XVUjoV0vryM3eW3iOCCcT9SdPrgNW1MW1KKmvSoNzsO9irB9hdILZ56ftFgJSH9MWfUoqhOckEYrdjvP1DpovXYmhHHE1exj2tqSL85Ysc2h7uMrtZUesMdYzORzm5g0KhP/pZ5Y9KCzNFiiTGmTOaScFJ7rzB7QtfibJFwrstapIDGlgg7QEhNMbg28K2e4FnCWKs9tf+NiTGOyAlC/T1puEy2y4jE1e+2EC7ebMY6e0edqnfzh5JWeNj9Ka3XRjN5mB8feLD2WKPBttSac84EvONmI9itFWQ0WSSYEfT9wJCocXeNJa8Z2E4NLzSj0za8wsxGulnAC+1oFPYW93zFYnCoNddp6bygbvfIqWan0eBeJjHe/xV3r78+6W9Uj9zs3qr5aQxq38a6miju9B7wBm7SlONog9577gSH8wCLhmvNjdyZKUMvaeSKINEIzMDFT0cmP+J8oQvDdx25LRiwmZlqHjM/ppmbmOnflmuMbstonTLGfLfb86lW6yQse6YuYT/0bDWaNbQMEIK7x3ssbSsvigThZGR9T51pebpVi50aOLFLpQvUq7rG8x2ELKkbtWZ3ombqRszeptdo1rbb0983GK6BaypbvvSP8Lg46W8pf0ld1Qy65GQYHHw7JAjOETv13NQsqLYRtmGjFes4tFuCRUAcD3RarsrZZPSJx4BHWeiC98MWx58TJRbPnylburp0qIyBZ2cvYKvmrC1/YDLO8cySPWr8xmx20t+ftp8vkShvKbT35PstIwbvN3dovmvMuQdmjZiPGBrOu1ya9C5EsUds68NjPWFMFa7MkIUyrq3RUdcN2WMGWlB0tCKcuuJme6Bz1eK0ggVjndIxkukNa28syvaUgeUsiKnbGlvL3Ji9gZ2uGYsjlqYC4qGlHiqGfI+lJ+JMHEmun3N91uGH6lBZTT5/9eGewhFYna5rqjcki5DNruHT95oizEwxTYd5Z5NprZLuUBIKgT9GyFzX7F2c1obNzQHZH3D0zXoQA11ekVdbBl13WeQpXT8xFRnlpDybcrC5cCPCizmJ5lCdvIJst6ZqRxpfGbG8dnAnj6nPEI16r6qtcYIe0g75ubZTzjGNkqGxSU110FrdqfeUbnOay4ihN+kHZcB3E9jHDmlIZKA2SjrmDO1AU3eUnxf2aLD+uCe3cmaaoLeoJlJRkawCbFPDxAMHWzj0ro3w1EIb1jV9VyKMJctI852mI3PP5Xw+5939l0skrPg1VT3SuQNGqzan5cxooxFz0/DyQs1NKObIxsa7mONoD/U4tQzZSGcIclsd7l4U8zAZ1K1HqUtuXjw7w5oJZraNE6g15rkJVVuSS9Ac7SxZMomGaB9RW1e6h397CFaa9aNqDVzTwDf3bHItPLoXDJ5Lt/AJdRnKUPccZEuITalpwrK6QZYGfdegUek4ToPT+jDYdFpZXZwFhN1EO/Xko1orY+8xJUe8oqa0NHGzFeFGFrub7GRst5pJqhhznE3FX9+3nP9C9c27a3h4btLIlE6vu++djGeT4r291+U/MysjXVzSrhs2mqmp8EraTLCi5NZRz/XjZ8RyTh6N5HcqOrCVa74W19jewO6DjobY39NvJbtf/Z2T/pYihFh9b/vRJUxqgmPCUostp/IbxPg9dl+TaY3FetwgDpJyEdDpel9/nJO9O9CPBe2VLiUpZ6xeWlTWOUWlxtMQBc/jnrspoujVOnv1MiKm59MQM3xQ+3Zdldizu5P+tmVG26nvpGZEMR7omgX7VMP+rQz3ELA51LSFnot4SzcrcMeBVnOYNrWDnUmG2kSg9lhjSALf4zi4NLpum1Yw2Rm3H3pGXzu4poqYePLIEKmDxzAaDl+wDWWxpK4/YeixE75HcHFN1EsehC5PkyH7dcuhKbB8re869Kx/fUAGgrZT81NWEbWfMA0W1V5FEvZ3km/+2OYXFzOi52pNWdYVZmJxbHsOkyr1MceEwRKMRQS92lNW8GVGqc/tKSf41J7aU3tqT+33tv3sTXAuO1xHeSPSC/AtgTNkOEsVGojOz/H9HnPsydZKbqbuKi4Sh3gmKCblAdhDR9+0NFnDYqa8p6YpGCxBkkjEZ1Lg5UvuNjscEp4lSmhyP9SIw466bnC1InlXPZBvNyf9FdKilxJbk7N4rsEkXYxacqfV4VPHIXzmEgkbRxf8iu4Nv/x6RnIWIHSB5VnXwKtn7PoZ7+7Us563S/b1PeNmpNPKzcWQcZtm3Lg2S1sxhswWNmnrsAgE40pdxeMvhEOz8h7HHDE0aXfij2xEwXzqMW1d7HzWM6UjdZVh6ZBRX/YMKzDLllb7MdPuyFDsCOZzZKGmtZM9TDWe66Jrp3HrCTOvcemYWjUX++mewRgYEUydurpI+zQEVsmaQ9hy1g2kW3Wb2/cPICvs0caeKWHYPoTDTrDPBYnOB2zTkns7w7Qsylx5/W7UKx7aRfIjKYPnh0ivZqL7kYChNTc01YxDvmehc8XPFiaF05E3I715POkrQFuH7LMNhgxIdeg3lg7uzCX1czod1m+HBjHadOlIq1k6ZN0zO1sgbZe20owctuDhZo20J2bnKtogFjFYI3nbUOlxr0bJsXLpuKDSGloFOQsjxgsMbPM0/FVsdEgzMHFjl7zac7fV68KbMO0M6/GWbavWkysEfWmxjXo6ofboFpBNz+SHGJqFxBm+ZbANuuHITpOgvjZtJrNFjh5TrW4RvTEwtjPcaOKsUN+r5YF6CskOp4wbVzqf/HAY+EHk1GLN3SdlF14YZxhSsAo9dn9XeeNHs0VkAw/BQN3rqMwQUO0gC84YdTTI/G5NeuHS9wsSUxH1e8cHrn5hkT3E4Ktw+HITgt3hnBlkr1QRvHv0MC9Ghun9SX/txMJoX6s14N2SNQFJDLFW4LBsQW+8QRgZZaiv0bkkD29IeofDQT13bEbcV5Ix62nfqRtR0d3Sxr8kGFION+rZU2tx9CL8MaPQKheOCJHJgll6w/CNWgPPDAujPk09HPsGoXPMY1nQHAaK4Zbsgxr3MLHZnA+s+4xeaoksG66miGHu0+vLj2U7RK9izNBmo5leVrhUdsHghuz2Oj3lTaS7itRoWGplkbQaiMYax41xtYj4Yznitg8n/f1484mHbMROVfTi5et/Cykd8BwKS+2Bw03NMR2whI1rKfs5tAsezQdWfUQdqTXQmxb9LKR6v6PSOJCZPSMxBW0KN3fq9+zxPdnahtom8bRQgefQliF+luFqeS6HU/GCn7afPQQPh0+EmmVdULKr3jMbIdGUSdJqGQdBIwxGRz0ocCWri3MuFzE3WtfPtiesKWAcOwJXq2APeyLLpyx8ykoZ3H2W0psWVmIwLNVLLYqJtLHxxohGk2qn5ZqmPWWFeP0s5mOZ4edqgYWTRe/a0K3xNdWO51s424rBqBHPlCFDDDSHliHdchYreRQz8EiaDfVjzbWWiar9jPu/LGmPBt2jMozCmKhkTjyfYa4KPQYBo8gYexM31YoJV6dDPea3NH1PLLUywlAzc1o8xwZHGfakiSidA5sEfH3gCWHiypriIaPR9EhjXTIhaW/XtFoncBIhe6um6gbO0NI3ssUewXYdtqZmkXlssY2UIAqpP2s72qcLx3F9ZC3oI5dOA2gimdCZNg09OrWJ6C2iSwcz7BhdHYYEFpZP0x45aGmTQz7huyAdk2b+OYwS0DUDwuoxtIKJ4/V4jkMrO+400CgMAvpcUMieTJ4eKgBNbeCZl1TS5OXVKwBaw2Tse6KVSatzzGVWkdYlVbZl0qCNxcUcfxaR1T22rz7LuwOmn5NIj0QTINszn3pzTzuA3+pQrYCmsmj7krJVh9vuYcvoSZ6fh5Rf2JSWVvhOywpjNNltDOY6lNzYDhEeu2oi0fNieAs6PwHR4mg5HLqUo20wSRsOn+m7IiopMU0La6H6UuUNndkys3yqUjmbZZuxNTJmnc00V87cWG2pNtmPNGo/bY9/odbnHTWuPSOMWkSnQEWW+Ae06Vum7hl3B6WY8fbTB7buNyTdnpWtaQgzGzd8wYW8ZW+q+TlbDJQPBa/nA75Wc6/mAZuPn4iCBe81MEiYDcPcxp6ucd8qo23HHnLwfmRQ+Wkbgw5r0KTfV9fYcqR0IGk0/WGXkI9H0mL7Y5pEyBXZtGErDaIb9WH6UhL8AIHcUQyaSWcosO9usN/8Au8z2KrJMbHATgjPNKDNMlgFc9avC0qdp7IvHaLoVPWiye+ZCS2bNa+o24nGjqgXypkfp4qxvmCyXWKthjW5AR9diyUmbqRsVhcZrEWJVQqkVlPYZSlTEWDNPHxD2/eiYzHz6BBsW32LqAYOZkOAy0HrR0YIjO6UQ0VyhdN1oJ0jEcxpepfqbclcKJsvZxaNbKmrHmPUwKVg5HUfgm8yWSpEasmQWTxQXUQMvjrNz58vuRpDxCSxUfajbAbKdUYbCHxTjfsqCPj08J76OGHr0OzmeDjp70/bzx6CRteApQy0FYwc0z3YLrZGT1nZkXI20Q+CqdEIICcEF+6KWyqtQyZik9gOmSxYb9RglscB0yip2p4HzfVXV5JyHMknF7vScecWruKAqTlg6hxW3Pmk6elNkMWA3c8xNYQwt1rmVsHQ+fiaI8/qPCYvwDv4+Jk6BM/nLpHOzgcAACAASURBVOnjgdV8xSJSSd9Pv74jHRraoWehb6pFBnGbkGcl5lzFpZeFQS5DnNahqbU3/2jhPYdyuKTTObb87e1Jdy2rpO5KMn1QHpojL85fIGWDq1GfxlhjC5uzxQWBRimSzFlvPuEMNY7W4NrkOVSSXXNkaNTkt/aeeXyF7xfYjebgs0ZsP0AYEld7qLWXEhoSw2rRPg/9cGpIXsyvuU5iivzI1bkap8awKdoEfx4y+MqgHqs15fd72rMSMjVO9myOxKIeXaRmmq+bhmICL5e0mk9zZkQ8UGClHY6r1o/0EpxsJEPimWpzm3mP4UuMMqaenxoRgI+HBlv4ODOLXf0ZCbtlFXi4ro2nD7eN2+L2JoZjYmqx3Nmy5+HhhlI2mHM1TvO2Zxk4yFwQL9Sma+uSfV8xHUdyrYSxuJjTNSXHoSErNcrXr4msGelkMZ+vTvr66oXW43Qc0rxEzAz0z9EbgmM+MUiHVB8C1u4DRnOPLc8ZtcagHBLaYsswW9E0yvkoR+hlSTWmnOmb4EH4uPTUgY+teUH3DwNGPhKuVux3mkpscql9A8LtSX/z5s/Ve20rli9NeL5k0qAl13/LPGvZmn/DoB2DKV4RsOMseYXbqO8NlzXWNuBX5Y6LmXrmNrzkeXGHEGu2tdZd7DNKHnl8eKDTDmkyTlgy4of81yTfqnc99APF2PzoBP60Hb+/B1NLXZkzEiIOxhF5pbloy4GrQRC8WfwIvqrimmfNV1TOPXashfLSlCwqsfwXfKOdbTmbOBMDwm5JYrUvjMZEmj6D37BcaE3RfsVYdwTigl4DV3Jnx/z8/KS/d/cPRPq3+voMw0/xexP7uYooHdOSUA7MX8xodJhnlxWYnSAPSqpJ7ad+k4J4YDld89lXynsLrI5g71BmGoCX5kjTpjv2dDqh3IcGfQ9uM3LU/Kw4Z3jxKb7ByhP22SOzWDlQ2+8jDtUd576HfabFy6sAr72ljwSLM/XOrlMRX0b8xc1fstRKO8EzBzGWjEmHodHLQeRxOQ/oK0G3VXZ2lDbjtYOTDhT6gtCnNbXVEi5jOqH28lX8/wUYs/nEC+3ZTOcz2mbHPrUJ9UEx2SPbx5barllqYEPkXbGtR6QjkIZa2I6h0G+7NOOohWfdQGDLib43cQ6qG9NyZOhNmv2ReaCMZzfkeIZFNVZMvQ4rBB6z8FTeJc0vceSBstJh2J0gSy2K4Z5Qh6rOLBO/FtRTTF/oQyA+cGW5OJVP1mgIetdwd99yk7csHXXgPmY76twiaxxCjaCKjRDfm9gfRnJtZPLhwLNuyfxNRajlmkz/1Bup5ISVRGxTZWSsQWA6LbaUDJmaaFuazLwJvzKptOzLQ/qIJ8EKF+SaLLw/9LSmTegtEFoFu+9tnicxuOomD/DMjHHMAO8shp36zHbmONKmosbXxMvHLwh9vnr1gsIuOQufMXnqf3e5izlIsmLE0CUx+7sjnzZ7xG5CRxeJl4KNYVCJgEwT2hatybBcEtUDxq163s1YsuxMXNumKNRcRK7LEEaIbUk/16CaTmBXDqnp434ByQpw//ZAw4E8dPADtSECHNw/XTLZBlr0ntXlFUOZcqhKdNSH97sNWVdxcRXQx6q/Q3XE6zw6v+NQK6OQdy29IdhWKa6vDJTc5Oz3R4repTTVARXZFpk0sWubZxq49dO2nClE45G3vGRgZi5Yb9XeS8uOxxLms56jDml100QkzpGio/8MyPKUwO4hDLANjRq2RtJ6h2hdSkOtT+G0zJ0FdVPSlBo1K84Iko5WCEINAhkzySwuaIoL4N3v9Fdoxe+l39OZa4L8SKc5Yd+KnsW8JT/02KgD5eWlQ5+9pIof6HPlLMne4sH8ROYFhJl6h+p9B/IRf4I3tvrsYD9wuza5vICHR7XeuyRCfGiYdhOHuRoT0zeIHMlD9c3J+B6mlkTfcGRRYy9f8nx2gTZvzCyXuj5Q1iOzc7V/rL5Bzntc5znpe3WYZykEzYSX2GxbreM3VjSzb5Flzgo1tzflJ5av5nRlyFYjHJeiov5w4ENb4tU6WvO+4ebx1KHv9hkf9r2e6yPYBm28wdYgPUTP3hgwS0GukcC7HQgf3m6zH0unosQlngT7cktdqe+9Pk8wly/oNp9Ar53S8BD9nsemAn3TOltHtB5s6oxRhzTr444dp4fg6DV0ZU19ryIE1cWG7rbkbmXz8pXaF+LFxPNvE7B77rWdXXSS/e4RszJJ/kD1ebmo2LzbsKkazEkd8O3tI5MxISfJrUbNPg+v6WcJN58+4Wi+08kLec43dGNG2ak+X1ycOhk/bU/AmKf21J7aU3tqv7ftZ2+C3lDR63zAtH7kzHVx7JFtoQAQVmax6Wq8WcIh+Ax2gNp16YaCbK/zN45NXOxZ71LcXnmLQkicRUh8JtCKNuRiZGE4FKsBX4c+092A6bsEYmDQbPGO1ZL7xUl/g0iwr1v2O+XJWJ2NXfYEuc2kSy6KcGK6TzHnNrahfu/uOwvrwmaUNfJGeZqOd86FEBynjIcH9b37777j+3c5g2kjIi0YnNR0rccYm7z5Q+XxbIaScLbA8hZgqNtb4J4CYzBC3CbHlp/rjSKM0WI0c+pc9cP0I7zWI68r7j6rW6cpwSQ5lil7DXEuqpbeHjFym8nWKh8rg1bCHBPX1bclKRnlSHXMuL9TOZfRbHFX30BRkzYaoGCfMts/1DvC2iF44yFsNWn7oKb9VFJLQKhazLvKYrRLuilmo0MrbmUh/Bm1aVLGuhygmig/pqTBRKsz+aX4SDr0eE7CUqjbjDmrOByORMGEd1Teou8OeM6MpTNR9KcCywCeZzOZUDWPhFfqt+aXK6QbUVsOua6BPbcHrEVI/WmDWahbxaGr6X3BuJB8ulOeZ76+5durF8zffMXHOw2Mkhk4EXkOUaTWbGXsME2DK9cms3TNVTkx5R3FsuY3vz5V5s6bdwAkrY/zPMZ/2FNZWmiYkcityB8le52KmHseuXCYsoZa1+O65hW1neCUAQZqfa77Acoe052TS3X7OGQbxmIi9me8L9Vz66zjWrrM5yluo0sdZiVWYzKzTsPNhq7ycLM5HypJd3fE1XWNL16fUz5M/IkPb18qL7ypFqz9e/ZvBZNOEYiuxBJHruTAh4MClKxvtyTugj/65mvmC113mRn8dfk3xN8b/L1vldLAn9Nx2Uu8S5u7H9QemC0WeOcj3ten4/vH0uL7Gx36m4X0Y0rQmMRrnTqZaiZrJERQ6mLx0DmjSQbiUbK8UDfatfeA09uUTYE7qudExoIXZwMtrzBDDdz54Rn2uOcifkmBmp/H3YgwKvJ0i/RViC7dV1x4p2Z4t8u4GdUN0TKWhMnAmJmMhZr/bWJy/LTHNXuMQN2WfOFTehb9/sgqVr85cyVTX5D7W8xB2YDJDejSmiAS+EsV1Svvcj78qqXbZQy6nvCRnll8TtsemfdqTTSxj8+p7R0NSAJBpdMO7mQhL19QGx1rDTZMNi7TsuV8EXL8179Sz+0P2ONAsxgQ+mxYf9zSpDnLIMB/raXY1gZZeseumMhvlP1wfyFxqxlnL5a0W7Ufx8MjnZORpTVLV5eFZV+QLvtJ+9lD0GHE1jH9iz/7hsn06B8eaTfqpboR/EQifKhrNflv+5EpzfFih7bTxsnx4FrQeiHHVA3gTkRclgaNSEFLpiy9hMJqsbqWqlAb1qUnGDuk4VJrxQs7HrHfnSLWqqLCbww2lTLgwho4mye4yTlSowN3ZY3nRxxv1hhH1efIuWI5h9ioyfWhYnQT2VBQvf2B+/336n+3O86MgU3lILQafLNLWQc2f/b3/j7Js5cAtMeKMrEoTJvnCxW+OHvx7KS/5fY9jWXQWzqZ3PXk5UA8njHpUPJo+HRCUI8O50td59TN6euclTOj0WHeousYy4G+qmi1grg9QTsI6mlFYCkDUI059x8eEIuQTodCxsnE3N+R9S2TFg5pvdPkd7ltsM4NyqKm1/mVcb9nj83kmAx7tVbM9gPbwqCMHEatyP39fkebSvxgSVipEPFdvuM88di10Onf6+sF2+09F35NG2jGhzyilTvqrOFCqgXtXtjMLkdm3oqPu1OQFMCrl88oKIkmC1c7aW++uqTrOzZFiRh0uO2YE1qCsb4nH1SIa3lpklct++yBj/cK3GFYLvdDw8zwCM/V74ksZW9bXHkxcx2+W07nhKuQcj/SaSRkL0MePj7Qlw2HL/DZa3ILah8O9choOxQ6f74+jNgrlzHP2GsDJScT25mRmz7rWhf9b1xMI8CYT8iD+syMY+pwgLIi0JqFTTNgGR1tOWANqn9jV3N/fMQsLAxH1+P2Af61xLdOldov9Lp+nz/wrWVSBR6PmZKSKt+mZLbk9vZbhr+v8p8vvZEynJEJF2kqp2J3U7AsHqmWGYfv1SF46GvM+cj77TWGpWzFh/uK62+/ZvPpE9Wu0u/f8T4reJkVzC50Xq9LiHqTu/UpWthcOXgakDWvBoTvMC8eOOhwdd8fOZMGdTDnay0dNc49bmqH9niLmavxvJxecvkHPW9/dY88VwfZzH/J7O9cMEttjq4Kh57h0vORwu4xNcDpmp6P/hkvrR5Lp07s1YQ/P3U4bw4plQ5Ljs8cqnbCkR6Fo+zi8GjT5TsOY02SK0fDem5T5AfaseDDTo3dnALams26IE7Uc9qPa2JjoGsNQlP9b9oU5M2aypRMjRrjtppYJSVj3JFrTax5c8+uOnWKZrbBLhKUB7UHjP2e1//2G9Z3j2wfVB3k2oz4ehq4yT7y6Vf/FwCv3wSM0sJKe96l6n+L4o55YHE2e8WFpw7G3/oVbt3gYdHq9ZketiwWkkv3ilyDMAthMrt6RZfd83hQNu88Ck/6+9P2s4fg1bORMFADF0rBnhSjK7nSHTuKnlYW9Lst61YNUuhfchQNfloy07kFO5mQIsL0WvaZumnMDcGmKxlbE89QL3W01pC1MJS0GjEqp4G8K7kMHTwNrbdah7fTaYG07V1RHI74C50T9M8xjRmLcaTUDCfnx4p577OMcrI7tVnOSDH2Hkc2RLovHzd72sMN8vAeX2u9bcuKm32B5ZZkhk7sXq9Y+ld0fcje0rlSI+OuHJjHHq2rEE+Ze1rcH4iOsYeqUX0byg03jy7mM8lSF3ja0x67mHC9JcdKI03dgKC32B63CF0A3RwaJtenNWtivRFHOXI8ppxfXGDoqm2nzRlFidcvfjzwsrphU2w4m0cUGhqX5acF0q474EcO9SwiHpUDcZ+DS4UxqgMCYF2ObKaQ+jDRaBHYXJi0k8Onda82JpDWIXH0gtm8J9JkC2HskG8EabfFGHU+VeQsxjmzcETu1WkxO5QY5oJ0/sg4fhkYU1oWwgp4EXgYWrj5q6uEQ9ZwVzTsNPvKYjLZlfdgNMx8rVkZSoJVRV5uOftazZ0rbCLbYvJSmknnCV0Ls2vIBpdPH9U8fvsKVl3LPn/kMtRACdulag/sDw2r4PRQWbmalcaTmK3Hd3XL9jNA5TwiCEPSKcDURiYfPczVjGIf0d6ptVJdrLD6mOpmAE3ftWpMqnBG4mTkpSZbSLcU3Z7nMxOptUHjycKen5GVG2ZaVHXMc7q5YOhOzcQnzWHoOhXFg4FzNcGoRYUPB4p7MH+xZ9I569o446VR8/Hqkv2fK0P+Aht++Yx2OGf1h2oveo8e47qm89/xm1TN6zJ2OdxOFDuBtdKlNALEc4v63iLfaMHbbxqOoY34Alr44XHg0171uTVyfvFpxv51xP47FQ3pBh/5IkY6GTJR11wx67ncDaS1AB1JWcYSy/OZf7tl/xu1jvPoAfuvR8yzCMtQzm43O1AeV2B7rGt1CDSFyf7TO6reh0Cti6XRM1+e3lQe8jsW7ldq7LKBwRBkfU27Vna29UaayaLc9txZyglc9hPhhc9x19IO6rY0zM4J7RhvHqA1ZjlUHZ6w6YuRX6eKqsxpa3a7CSNOMUa1nuZeihQ2V5aF1LaizEuM7nS/1e0lrrD5w0u1Vsznb/jl9S/4tRXw/a2KHGaiwjm27O5+wzBX7x+/sBHDkbu7A43U6/3M4dXyksXCoRSaru1iIDgO+HZE3au9/P1theU9MCwnxq1yrJJkxtXsit+O3/FR548Xi5895n7+EDxzLaRWKTdlhewMfCfG1D963jxS7UsqV0Ku+QBlSdnl1Fi0lerYvhuIZy2GsOln6rZU9xXjMNAVPY3Qt5mHDC+oMZwe01ZGpn080siS9dHE0LVk7qKiq06N9PX5gscuwbY/C81KwnOHoRkQv9KAAsNnU34imnpsfROqxMDh/o5hMf14O/jhV79mc7vGX9p8OKhNe9duOPQDFiYzfaiY5pwp2rGzFyzXCuBizyPG0GK+umDQEGynPUUEepGPqHuMpXY03Iou8vH9ETmphXY49sSmR+DZuBrxlzcN1WDQTRalhiQ/f/FLRmcEaTKa6rNGWsihxXF80HU0DpL5izlpXpPlmllm6MnbI9V+jalBTzmn15XAbgmnnnD/ib2hYelmBGWJ0QzMWgUoOAY+eb6mc2JsTcN2Ja7JGw/TsvFRYYrYbjDEJZfNhNBch/20Q0QBfVPgaGouzz/n6nLBc9ck79Xcum6F8KE9CrbZx5O+AqT3NXayZArhXFPJdaLGdk0io+SuUIaiiENakSFFSaeNh9nVvF54XPzBc9x7tY6dXCJly0HckpVqzqbeYkISuhFrDR748P4tve3RHUvuNeOSOV+AaJmkRPSnlH+9DmH7jU/f9bityflCGdT1aNJ3ktC/JNHrM7MKpmbJFC1pBk1XNl4wWHMuVi9pe7Xu6qbFtSVN+8igHdVGNDQZZNn4o5jx/PwFTpgRjQmOqfps23vqIvuiQzTL1IG6f/8D3tkM21wRTWo97e8bjF80OMKiLdSa+K57S2RLLv0d+TN1yEymxFvlTNtb5o6yC6+ijuyX0L7f0ui+VY7P2bLgYgafAmWMz+9raOYI/4HtrTqMzOweo3xObp2Cutbbdzy+Vfs4eQWZm3D3bkF9VH2+8Fo6y8IzbQjUXITvM+7mcy7igFDTE/remnzT8kpYfPWH6tDvVxGWNEkcj7Vm4CnNHvHVGStS7t7pNWsLRnmgqt4SD+p/vWCJSE9vrv0wMQXa3vUuKQU39w3TpKNcg4XthwwelIUKy4aZjWgH2rwm1/bYEAcIC1wrJte32aD0yeQEYwOPakx+8/CI2dtcdiFCH/jza4m9Lcgch1BHYDBDyux0/d4y0ucmc0Otxa+4AqPk2zeX9ELZo3e//Us+7Secs5hzfSfwE8ERh5erhErXDqbFhvKYQtegsYsUhc0DEM0trkN1ATHOBw7bAePhAUMLrlu5YNg4uMIh1imw7Gc0c+EJGPPUntpTe2pP7fe4/XyxfNkzsz7Hhz1Gz8JKPLq9Bg9kOff3b5lfPidyVYjHoMV0XLL+QKE5Apt1TlUYVNU9zlx5hqPvscv2NLs1z3SdU2hYjLmNkXfMpO6aaxH5BqLqEK26afkyxHZOYfEtDs2bGfG98kYS00NSM7u+xDhTMeP3f/4deTkn9EvqufJoPt0+kMwCio85v9E1TOvHe7bpBjOQoMkBxqZnRsd32xrDVYXBh2nij978Q6JLh8UbdYu6fLnitjeYOxZ2rgE55mmB9M1f/d8sv/qKC+3xxtELPuYp9w8PWK0u7G1qhrmD1QkaHaaw3BlFe086GCQv/hiA3jPw2xbpWOSfgSKegUh7cmGC/qxpW4RnEkcutb6RnFkCOXaMY4Xnq1BqtT319sam46zbkQuT+qi8T2tvEO9KymTENpW3fJ22dJWL6SbIUN2Aj63DMohwU4/Law2ZnkIm12Zu1vRC9e8sOMOzz2nKWwINaY/NEXuwGE2Lla7XEtYj0hgwFhNu82Vf7vLsBXnXQGOoBDbQ3ByRUchVkHBYqDUhPTBkwGN+xw+5mv/XZsXDYcsY+VSD5lKMXP4f9t7rSZIkSfP7OefuwSN5VlVXdQ/bWXKLk8MLIPjLcQIRMLmdvdmdmZ5pVlVZmVmZwYlzjgez6u1B9DYe8LhtjyGZ4RbmZqpqqp9+XxOnJLsEW6aH8sLAdwzsYYsiVUS6vUl79LAil0oqZoysMc3MQldjXOM0Mq3lc+sKlGBIu8uoPHF+tKPFxyIiVAxK2WjftNe0xhRDvUYJxa29bc6x6yGadU0lARR5v2bT5nhZhumJdWpVDz9RWbc75jLdFCsuRqyjElFbAuCklB223XN8OAUeda7cO7++wjZKukYnuGzlelrs4hegbtBmsuWojWniIZmxwy7EPEaOQZeCM9lTHsQajwZzXtgaRm6xGIhz7Lg+adEQ3fhcOJKgemrhFB/wn3RuPhdzeexc1nrG1J6fzFc9u8TSZB+j9owRBPRxyXgk/tcZDimtEt32SWXrg2WaXEY5dC6a7BV2+gpGd+i9hf+ZAOkM5y76Y01z+5pQklnvUgNX8UkMjcteZBLu//ABTW/wvRJXMkgvjwX6pz6NH67vOuOpeQ/AxgnRWp1K0zFlTdis93SVi53XGJI82ihiTL9G0VvGsu+WRKFTXaosQbdFDdPRNLL0A1rpURxlyeHY4k11VFqyVuI2niz2yh7zfUpx/olAIefYnc73b6a/5g/3f0LJxF5M0hXqk0b0myv+4R8u5Jy/Y53V6OaY94kELx0snPOAqj4SzsQau73P06FjkrfIsjiX/hm7bE+2U4nOxRoPw2t2HVQPKYoi/M8+qwl1jdnsNxwL2SbinpYffjh+0gkWRYsnG4WpS0ZewL5WSGSNrKsqku2O6XSGJw/29lDSWSOM3kGR9SBHM9nVJbahUx0kia+i48QbulLFqsVBtMIhSZvB/sBYtgGOpmAOhlwYLs1RGFRNGRI4p2CI+rnGsB5QdcH6stN0fMci/NUZylo6xrKmxybd5lxPZXFfDcjrnsVhw66WfUjjazLb4trNebt9kJPRUIYqxqqjl8jFM8+GoYsytehkT0uDSqjGWGWAFJEg/eqUaiguNlgrj7ktNs6qLdCLjkPTo8g6l5pm9HRYuHQSaWn6PvHeojYaCllfq1c90/kUc2BhSoJqlQZzNGAwn1NkUoGCCkW1mY3OUOVezg4Fw9shbXbk3UHMc/N82txfqLBoO4zEwDiI32paCZ3nsz/UWKpI60wijU0V0nUN3krMxVZqrl74lKMpoSXeYzPQMVBpywodkSJ7cTWlPb7jQ3nk9Vwia5WOY7WkOeRU0vjqSkm2zdFtA04xUuKZrkVTuSSbJZkEGv35+JEen9ntHC+SBN16S+sYWKZHL5UrtrVKuT5wyJ+JLsTc9nlJfthR7RwOqQjINM3hRfCK7XaJrkjGCztiHzdkWsS5TMMmnU6hmdiDOSP79NjpMsXUKCV17BB3JYakK7P1EaNuxMNdgi5rLjE1TZYwuA4JJTXbeeCyNBw2ZQGu+B3rZwfV2BA4MyxH9uhW71jtTW6iK0bnst7Z6RRqRr/fUUquqmHdoykZhnLa4+rJ+tpTD+F5xi/bltWFCKDspKKd/Am/arkJPgfgfTNjYq15u3VoV0LN4btkTGfAPC+YyfJC1NT0ecufuxWFlCCa7P7M6s0ZV3HO3VqC6AqFUNFwLy36Z/Fbo3jEm+ELwvDlyXxjJaIPxbvoFYO405iOLbxWpGHj7gOPHwPedBa5LM9oU534+UBl1uzWAhw32DwxnKmAgyGVFVbPFsU+5qX3xEam3haOhbddso/3PH7zf4g1eL/AiKExPe41cc5ejByK+c3JfL9qYuadWJPNYke8Lhi+GRDJoKVsCpTlGhwHW/ZPP+22GM8mytTGjsRnk7MQ2xjxpC3oe2FneldHaUYsFl+hHMUZsy4DbLcj2caolQgW9rcDmqPCrq4ZxJKabjjFN0+DuMDtsHWN3V7YAF2J+bB5y0XyD5x9IYy5adkoVQ2RzvjmDQDfNiW/nFximHc0ltifk6uX9A8J+cMzaSfszF+SJeZRI5j0vN2Iv/OUJ0z9kmoU4cjeU11NeLdOORg9iiWBS6PTnvIfjv8PJ9jRaLLJXPNJq4KgDOkla0eilozHZ9ieTyVZQCJLo3It2roCiYpqFB2rcTjGCYq8VWXLjNCzGc57all/yrIdVQsj36bpxME2FA1tn6HNBkQSMp7sS9T8FBhz2N0RWyH2RCzSxWiC6StoeY8n89ztyIMwwqgc7iOp85U8ULkGG1UneRQbb/i6ZFh+QbK8o9WFEXD8gMenNcPhNb3sdy5GPnH1RJh/TieNavLVCvtSJc4VylhEvbuoOJmvmeQML1p6iUYbqB25YlO7DbFsVTg0CW4Ki3aBNxSOVzFqpqMAHdisRb1GQaO1LdoaHFk7NSYujd6BXrKWChzb5MAkLHF2GkeJxsrrA5EfMRn4NLLW2sk5/XBMQ58i31PmMVkia1jehDeWz8RUySUCN8tdLu2eWRAwnL0AoGo1pr+4pdrMcCLxvl1ylElAV9QcZe3s6qxgR8TlsCWSneu6qbN+yFGamGkgEW6VQrNc8C5b4nk/7gX3Hz9Sqxa6BZks5ldZSTbw8Sm4uRA1t3W2Js8e0HWdyaVoWk93a1r1SK9aaAsRLbRtxfMHDaMy2SUSjPHqijjTyXcVSHb9Hp2stNDtkGUvnK+TFnSagWqrZOkpxNwYimi1eIx5UvfsjyXmRMxlaFk0R4vLSchacrv6joPm3xIRsYvE71DCGdpWo8kzSnk7vgodMvOMyMz5xIRXNw6T17dEtsdIMtXo1Z523xAMW7K9CA6d/o7V5juK0xIb3+zEfAMzQd90/E5ZcBmL8/R67rF7tKm2W/YfZTsEFQ/9EW20ZXwrMiZBXHL8yqP1O3zEevZdwbZT6PyeLhXZlse059XO48mZYUpkqfuZQtgEjPWSQyrORWBp9K8ysv50wtnhkbErftfIP0Op9wxsg08ClUmr4h2OBEVDvRDOcvthhzIPmAdXaI/inmFyiwAAIABJREFUrBysjmiboPkqW6mh2ncOy/gj9/tn9p2U//LPUIc5+798+f3ejmOdK8vnq/QedSYCpmam4vWn9XffvaGQWYTJ1GU8M4l0hWMp1tM89KhOi245FLIOVxWgBzZmr9CnUvrIP6eraogtwlA8UzNDqtwk1jwsmR0YRz11pTAOdVrJc6zmDrWR0ykuB6lHmucm2eFUlSF5fmJx9wS5cL6VVtMWOs+jJ25W4vdF4RnzgcOH/JFY0qEp2oxkHmE1NffH9wCEioc6cVk973EuRMBsHSzMIKKvclSJXF8fWzabI2eDG0L3E4mGSX9scWqdpSnOyiH9cW7hT+MnneBxe+A3/0mwL5io+NaQulfxFLGJ7bnCYFTTEtJIg+p6HrWpoag9pZyEqnnsVz1tljKeyqusb6A0FlWb4SvyoDgeI9vkxjPwD8IYD70ztLzA2q1BIia7+oGqP70JqpnHfGijSmmZ3uzQgwmlZ5CvxMEoVy7BUKOPKvb3wjEoZkCprSh3O/ahFEY1AvpI521/xkE6XKWIyRuHaeh+L4TrzM+w/YA+P6BuxAaoXZO21CkoCSQ7SBidsoQETYqt9NzakiJN9dk2Le3E4/h9OtKi032yquMo6YJmistsOkFVXIxWAjQ0iMYhnm6QSL06VanRVIX4WPA9Z3FksNkmtL7KQTq84y6jygrK0GUyEIZisTlNMTZOTFnm1KWOLYMUyyyxDZvLJGAnbBGGa6C5LpPRr2ik78/MnqCxqaKO2wsRoenqBWm/Q88tkAw0yTrl0k6ZRkO2EtI+a0366TV1vqR15ZwfSu5aD10dfMJknYy202h1UN0hgZRlmt7cklsmn11PcGwJMvk2o81Uri5nrGUrSVvU9JZN4Ni0kZTWeS7QlT2GZjKfis9uJr8ia6CpGjoJPOlKlbyE84GN7MyQ0loO79/fcVycMoSUjWQk8RraTYzSjohKiYbGJEw1Ct/B1YTTUvM509EbduuGTzSMetpS5Aazs1eonojc22ODgUL2vKE1xO1erUwMe4Jp57z9KBz3QIuJCiib1xi++LtjYaCpU65np2jAoSudpzpgPlkS5C7hQpyxfOjhjP7Iq4HBQQJ5hpGKmRT49jmaKm5qu1mDbq5I0xpd0iTu1ZDxWULRznEkt210NaJ2Si7bDcq1WLsvvL+h23xHXKxZZJKucHTGMJmT9cuT+ZpaAJ4wd1fTAYY7plzcEcoeu3JtEukfSUKYFsLOtE7O2fSXLMoDukTEV4XJl0nOzYVBJX+vN2jwBudsUpOhLwIcdaZQljumv3jBy0Kk8FPnj2SLA6oyIpC3LRKX7ke4Q+cXIY1sTWlThWAQ0hwLolxqMV4O8ciIVZ/aFYfs1rrAGQw41BmfWjv13KVRwO8U0GXJKu+p+4KodokGkpszuMGJYqzWZSqd4KpTWe6fGVYtcS5sfltpbKvTUkm/LamzDg2xL57rnr/7mxmZM+BTzBdNXbqqwZiHzC7Fzc3JBjx2KXP313TS9twrClHXUfmfk8g2NscK+B9mt6ye92ylxNTAMSirjPWqIJZZA9I9ttowDTw0yYi1/2n+7J+BMT+Pn8fP4+fx8/iPO34aGJNvvieTvX19yfQ6ZP1UsfyUux3e8ODoPG2OXF7Ihk3NYLtboIxHdJL1xdg02HbM7S+vMSoRFlimRq1v6cqe0fcEsjqeDq9cj1CCRVTLpj2AmnYoMsXT+ueYyimp7+xmijIYYBmiYG1GGsVQYzII2MpevMFLm3JT81Grv7+6T0dnPLxfczRabJnv/pAbpM09inHGSpHCo51BN4hYLLZ8diGecfnib/BehKSHkudcpE21zGca1Oi9gytvG2p32rC5XKwZv9mT9J+kQTQOTUqW95QyraKFBpWe0ldDFEkqkCsVumrjnXUoingXaVYRtzCaubRyaZ7iBPPMwzEDLMkWcRaN6PItmt1w7ojobhC6eFVGq/QUiQTQ/EgKYXOoaI82U8OEXtyE2lqhqHr2eYHjiu87H3vowxl1bbKuxWSCzuW8T8kGDueOjEjNjDw+sNRimk+k8n1HV+x5qmMGsq71IetRjQTNtEm3shWnHXFQKpT++L3q9f97lKoGho2le/SueK+RF5AS83G1oNyIbELVmfidTbnvqCrZmpOGXNk2VdwwnQuFg9yqmL5RGLoW5UFMePu0RektXnjnLFPZ75rqZHXD/nGFKevOqmVgFwVVsqdMfiSV34hesnw9pJ6FjJobkDXm7KmnCToC3cCTEluFNqB+SLgjZoIEoJk6kb7Gr1xGlniPH8wSO02I0w34EuCT5aRVzyoGXabwbSvFUwcUlsp+LTI4bTFlWt3hDicIoaZ/G8ZByvf8nYIRNxS7JW4/kN+15n+eDvmGjKEj9vZ61aAaCk2r8Pbw3wAYuj7FR9jf3fOlJtazu57gqwl24eObInuSRjrewz3/lPX8j7IunvwvGbPaZP3tDlu2RAVxTdalKOlpbG9dzbkxJPGyneL3By7OrygrUZ/8+xcOx+OIahzx/JW4SQ59lypK2PxlwyGRPcBWRVLW/OX3C5RQrMlFG+DNC+bTX+A5In33cPiAdWxpJhaNBGb84vySxFOJljrGpezjPJtDc9o+pZgBtpRYq8weQ+95cXmNJ9tLXGMIxo6sUZFJGZZlyGyqklQmpWRuydsOVQs4H+pY0twvq5zyqBA5CjNZOhkaJW6jMRhO2BaSL1qNcXY9G2r0Tvx+08uwUvdkvuuVQ++HmK6s7U4HNKrFbl3xrhD11L+8Dbj+hcl2scEfyJSruybbNiTTincPUiBhrPCHZUrkGTjR3wLg2wr3+4TagbEETK3XJcnHnnV1Ryq5Q8dccD1ISdmyWouMRmj//5BSSrYfIRGGYj55wy/Pz9kOVO4/ii+vdJ+n5RZvtUbrxWej6zGuDZpWU8gawSC0eNm7uFGAKc//Tk0YhhPKriEYStWDViXqWs6ckkARL3s4HpJ4Kfttit3JmlOnMrT/cjLfQmswNYNY9khhzlCfcx5W/0Iu0avDMcQlGGuNrdRS+5ePz3z9+2/ZdinzUBSph6VHR0VaHQUVP6AOYHtsMfyesST43is6m2/uGVo9geyd072UaTnioOQs1yLN485O0ax2UBA1Per3yI4Wvc7Y7Xt6WQ8w3ZbDeoemK0RSvmcS+fjnLv1TxmgsPturBZrVoZYrdh8E+8ZoMOQqmFGFLdNYOIokU9nXFaHmYQRSc863sPweY9tx3AtD7pSnNcxoFLAoSupqRIMwFDt9gtsbqIpNI1l0VG1CUniUyZZeUpOVTUdfmFhFyZd3wvAYqkaxLTj2YElVad+LqdWY/cOe1UCysvQ2rd7SUNInYh0fk4bNscDvGoh+HP1l9DZJqTLyDBS5FzMHlK5gp+TfHxzb0LmcfM5TFbN8Fs7IMkNm/jVKU2JtpQHsd5w7EfP5K75u/gxAsc5ROoNyoKA64p05xpRB2RB6NttMlgmUHE/vMccq+e40IAoqcQa6lxNs4wWNZlPthROwZjYtY/KiZjSTdY6DRVzsmZf699I/XVOg2zXV5o/8ayKpA+0WzegZjS1GMh2mEtO3MUqRoCviGX3rkTkNSVKRy+AwPq44GwUofgh89VfzfduKPfvrP6Usr1sGeklhy9TqOIF5jf80YvkkA0Pvgs9/ecX9qib/8l/Enhi8olEXhL9UQWTweXp/x69+Y9FbFabUe7zJzrmbX3Pz1YKVDGbCxYZFlqGfXfH3uay7v7phWCr8vvhwuhkSn16WYtTyASKH8bxjIAnENftAcunx5Tc7mpFY49H5r3m8X7OuKga+RKAmDaFSwIVKpoiUXpPUFOmC+GzHF5cCrb0sc+psj7JfMV2JtSomOV9czan/9gWHgwzom4p3xWnAabsBR2kXdC3HMTymYcCF7FecjBTilU2+qfhGgt5ufRNHa6icgFyiwePlnunI5OzinKYV+z3epGhuQ9BMUWQaevX0llE4Y7vNySUGoqRF83TOG48sEGuy20Gv/Ai+4cxFWWkcpQbo892GurIorB6lFXtxbX6g2oz45W/f/JvYQFXjWgaKPSbQRFCR3a8oF3fEo1tevBG/t6kOPK/2aMeIjzIASxuD9zpYrYNtCtuzb1Y4So1JghNIDUj9s9P98IPxk07QdwzsSkaPm5pilhOFc9aWODhDX+ez0YyuNily8UDLUUD36HSTEhGiBGHEZB4yic4oewGXTdcLLi+n3D+t8AdiI5adTpvEnA1tPp9KJ+h6rNKEd/+0pmzkj8/3JLvTjZNkNWZb4ci8fLr9lmtlhh3prN6KWtKu2KEbHa5tsJJ8jd/e/V90esukrXkjm3HzaUmzV2jWJYEpjMLh4ZFpMEBzfY6SJ/F8+S1YJtQ9urwhG9E5qr2jWT1wlJRW9Y8AeV5PIy5eTRhKSqKNCe5gxkStOEiWjuYQc/75OaE3pZXXpSsrZFiVHIuS0fkLABwvY3/ckaYtoS827MVZiG31BIVN1YlDcVQFFsAegWVLejU7oM1KfCWhk03rhuSH/eHI1zrxoEPft3i1cAzPO5O3Xccg6biVgsnPq4S23dNoAb2s4W2fYrbbNY1Vs5UsN2l6oE+OXFzeksnakWm01HVJoFokC7Fmjh6iBh27RS7WGqi7GX1usVA0hosfZ4wp8xpnDFqb02qSvajRuZqdc/f4nk7KyGT5kfvMBlPhNhS3vmjoczM+Q+laimcxj7CNiMqadJnhS2j5zLlmeX9gtXhi+FIYxVFoUa01Kt0itD7VexNK20CzNOzZKcTckzXj5vwM7TGkcUM2sia0KGvaKmMWztEO4rNcXWFqFpFpkst2lSK5J41m3B+e6Q+SvkqB17+9om0r1gdZN8mf6eyepu0ZHGW7U5Sz+qqkKY9MZZO+qZ4RVw32jwB5TFlJeVArfrU/krQeA8nne0gVrOcb2mTHci+826zocVaXjGYfOF/I+tquYVEHXNg5uSNvb2rK9jDns7BAj2RN8M2Qz5xL4kalWAhnpN3vUd05wSRmfyZ+l9uZfKst2WanaEDT2NFmIsCJzj1uxpA2Jb0qDP5/mXj8148L/vDP91xJ7dF8fM/M8blLde6kCktZplSGh54rqKX4vvddg2LtGB0GfHzzQjzDNelGA/J1RjsX//tmesGZNuJjqpAjAlBVGzEcD0/mG29b2lrM7dZ3cb2K0DMIpK00QwcvU6Cp+cwV/z+8mVHGNbbrosms0fv7BybTMVMH0l78b1r7lB8XvDjzUGyx3+O+QXNbrmqdRpEZCD1nXx2wwgGhDMADQu68U3RodYzp+iO6KgXS9RrHvGF+A51k5jqUIesPCfFtjiprsd1wiKJl3F5HjOV+//pPgrP36sUl8VE46e3jHh2w6gVfSeITTbOpLIM+0/CknNqF4vDq1oW+pqkkutw5Bfn9cPykE5wpCp4kUt7kGf3bLfqgokjEA7vYxW913CuLVopzVtstNRXToYki9bAWe3DaCG8wx5f8hVqa0OYZnt3ziQvbtUzSLkTPWrRKLNKqaKnjjhT9E9gUpfGo1qcH0/Yi7DqhKMTmmR2uyYwPdNqMSSQcw7LakgYB46wgG0nSb9Vjq9/hORa7UFKT9RBXO2w3RpXpu/XMZ9lnvJoMcCTlQT/oCRhyftXSyI2n1hVl09JVJUj5ksw4Td96moaeV+T1J9JqaOoWpWgYSeqnZVdTmiqVpmMokrPVLFglHbmiUR8kFZam8tX9NyRFydiUTBtLDR53zG8CFClzdMwSXMdi4Djkn7j6cg2vKanqgkyiwFaL0xYJbahwY1zjBxHvvxIpjnfvlqjnE0pXI+jl2q3ueCJj1w25lv1VneezXL1nsUqx5IFSzJ42LtlUCceVCKKiVw6XwyFhFGJKYdik7PjwcIdSmMglIFYLTMtBz+bkxWmhHuBhE3MWBjRtgcQ1UKQxURXh1SVLya/pGg5G16Fh0sob89nVBYHqQpaSvJe/y3Kxmpantx9RVWF4svuSh2+XmLrBeCj2RF5uyFOFjgJXcozaikq+y+nrEMc51WosLMmJuptTnvusvjvyXrJ5JH2E5apUpQdSR3O3d3jqNGxngC/h8LFRkqgPzH2D0hKOoW00QlzSpsSTpMq6O8GPhpTt9ntQzfrrJc3uiKpU9L14t+d+g2m6KO2pmbBkX2e3bfmdGxPNDKxEnFlNr5hehWzVDvN/ldyUU41v3bfUTybkwuHHgY+2WJOkAZ+9EY5r8pszmlwj2VScj8Q+vrt/Jtd8knpH9iA2QDoveFmsyW5c2kzsnTKp+aI6Jzmc6selfUebyLRk1tLkDpqeYhniVl5Of4WyyDm/1FnJlgPv45Gts+P9l2tcectfqjbDw47o726YyHd2UHu6P9dsZ3O6ZxE8rp4rujRB1XOuI4HKLOcBhTGk8bd0UgeUqCPJT/saTbdhKp858q759cuQs6svuLYlJdxQ52i39InNuewzjM4GfP3tRw5hiCbbK15fDeg1g8hraKV9Cv+QsAsyRkOV6xfi9+dpRGJ29HuVZSL22HSkU3wNhX5ELcUzDlqO3p+mbz/0BZmh8vJGvB8/uoRsg95bGJIOzcfACEOq6kD76XKwrAjPXZb3C3zpjoquptxVNLMPNOm5/D6Pp3/+lscvn8ikQMJs8oqhq6FZOpeSes6pahynQs18ElnGcsc/zR36MzDm5/Hz+Hn8PH4e/2HHT94Es07h8V7wMtr9BSvjS7rJFEP2Duq2RuhH9JVFJCXJWwO2iwI/HOLKJsVaUWlXCe+zB3qpNh9vdng6lHpFvxG3jsYNsa2AbRVzfBLRSNNAnmk8VQ3nusxp7xN28al6tF9ldHVDqcgCuDIg8KdMavhSPqM0bXwd4qbF7UVT/eUvKp7eanw8bPEk8fD46hZ97LJ9d2AZiBz46/aa+2rJYHTOxUhEb2044dCs+eLlF2R3Yk7Lwx8ZLn8JlYEv+1fC8PRK7tshZlGgjMRNo28z9Lhm0DtokkXHmX9O6QUYnsllICJoo9PJ0gTdrOkkP14dZ6zTmN0y4xvZl3Db5gyMmu3jAMcTheikz8maCmMf0qWSpb7ck7ZbJgMDvZHv9kfKbEUfEloWi0eVWBV/sHFSgjqlVgy+3EvJFNsirSue1wsUeSu9bkyS5Z6SCkdG3wNXYe9ooCrMrsXNyuvBCj2aOkEZi+/TFxp7tWMwtLDljTart7SqR+u2zIY/Lqo79BWuLsaEvk+aiHdTdHt2qwKzKjB24nZelipDZ8pgcMZRE2sSVS7uUaN4rpjLhnerAW1hUL7ds4hFtmF1OKJ3A15dfUbgyIjT6omOCUkfU8dSaLjOITc5pDX+j8lISPHlyqnIcoVl1/G0E/ui8guGnUtqHtBlf2Y3qNGfbXTHwlfEZy0FLhrVyMeWoB/D9SmDmonaoMtsiF+YZHqFWpbEkgh7l244GztYuUonBYObqMA0dbTodH27iXivVqeyWwZ0zZ/YSNHnWtFov9rxVnlkX8ha55OP9SHH9L5mXYoWiVV3xEXnbmFhRFL1PssI3RFGoPDNl2Ifa5OOcvUvONaI+lbUyV4YIw5NwcsPJq4hnuGGAYtMZ399ahu0pGE0Fs+4azZwVLi2NZ7kq9i+/T/5/R//b75dHSEVH947CVqt4ryYsMvFc7vlkQ+Wwd/lKR9lmcTRFIrzkvVySZrLXuZ/faCbDwhm12gjKQnWNyy1exxVZaSLubxNYHU4zWqdD0dMZuL/Xodjzl6dc30RYXdijdVqi+caWCMNLxJ2dnW3QaXgIoooSjG3xFUoFBVL13Aly5by2ym7/hdcWAWNPO9Tr8UNJ7ztdlhTYSvyLie4VYmsOe9q2cv9MWWZna6vq5e8fn2JPxeZlCreolQFVmMyUWTddZhRhx7T0YReEb9jWe+xFAvl7SP5QHJS+6DsXOptS7l+L56baaSHDNuY415IsfaiYhT66KaLNxHPvUg1+ljh/dsPHB5ExuUfX/87bBpy/LSUkmFSSDqjg7cmNjv6NCaXAAjTNXCsOWZvcDsQL3XoWOyTEufjAdMVTqY/1KyPS6pNi/YpjdLWHFyF+fwFa9nYWRwbbM8gbTx2smBfFVs+7vZURU0r001FdmQ8GsLdX/cKHsyagRowk4Xybn+kqC0WVooq6VFaLacoEt7tDnQSuXhoLPzbC/hgkMzE9ftpZKKl5xgvzvHWUrm6LaA2aOwpO9lLE2YLimbPd7+7w9fFoc3WNn9afMAIMm4uxEZeHU4N32b/jOf6WKpwqJ0Damugtiq1VJVOXIPIE3qAllQ4f3rYE1cpaVPA0ydVgYJ3/Z7cLDFM8axnpUBXXUrboJZp6Hxj0w9Ctk2HUQkDrZY5WanhmTafuHE95wL465RonFVkyYFdGtPKBt3p6xY3jVCGQ8yN2HSP+xjbtvj8ZYQum+7rIseaOFxUHoOBOPSaqmMFFr26xXLFukeOymF5ZJ/sieV7HAQjVFUniMbsM1H/0vWAOmvQKRmMTmWqAHzTwsgStLbEssTcNFqUdEGy3DGU6NOmKVEPCXW6QwukGoqvU20SrI1KJNXCkyKlLTYMlBti2SvV1SUvL+ecDQI+OxdprwMxcbGmaXNimbaPPIuu1uA5pyxOjV4vDe/Dc8au/UBfW2hnYi4Xuk8UDdmmHSspYzMddFz+UqOtG1Jk/e9YMggHuD6UpXDIabXGjL8m9W0iqUBwr2sYeo73XJE0wqBFlo1n2tCXlBLcUHYmPQ2ucZpOGnYvADBfbHk5eMcqv2XXid91Y+us+w2Pf7njIJn8z81/pBg77MsRVSo+y+uIXf01ofuG1QdRO0ynJm1lYBQ95lQEWsq7J3Z+jd/pXIVin2TjHtuqMFoV2xBgtvR9wlNmEv7I+l6Ox7y8EmfWGU1Q0ifeLQ9oMyl19aElXufobIklwtGi4GJ8xSFrOT6K2nZNRtto/G5jk8o6f3AocbyKS6Nj+TtxaViwY37wqO0tm4Mw+OYh4+zNa0zvV2yq9wDoWkZvn9Ywa13l4lzU6yaOS2cPUOyITuIHbCsgUHocy0L3ZK3vQoXHnj5fY0oUsWqNaZIEQ3HJ18LeRWmNd+kyPrtlKAnEn+qYo6oSnM14PZT73c550f8WFQPvvdgnXqNSfzgFHjWeT1HFVG/F3zmDioFv0McdnUSmj4yA4DKgqjOeJaZDn+mwXFFmFaYkgr9JdEJTwWkMCil98ZzXVIce35sRSfzA2blFjU6lpryRgCGjzKDakjVQSAWTxceLk/n+cPykE2yajkzCuXutpigyPjweKQ3p2QsHxahwNIvyVgoY9kf63qLQOn7/X/8kHlLVPDcZ3jTEUmQE2UOh6KjUlKWEeBc692VBm+jspdFKqo7f//d/JS9Srq9ELnro1VL09a+dYLcyUCyLxpVyK67GdldzzHbYU2GglGOGYnl4XYjminpFpi0xD+ec/+YlsqxFG4I26fGVAUcp9hgoa27pMKMIS5Ucmyh0eUcVpmyO4u+a0iWcqWhKQV+Lzz67OC1+l2mNrjnYklc0rhwaTYHRGKuTrDzLJ4rOwMtaPnwjCvEfFh8El2GXU9QiSNllCse2onUtTFnTOO4LniYuF4pPKoOPPEpRqgJFD+klD+HE0uibmg+HDb7kbDV+RC7Fd3SeDjrqIET2nmM9N4Qvh+jLDe2VrIl+11N6JYph4cvzXR0V3NajO2RslsKBXJzB3gCn16kL4dxM8zNaUvxoSOuIoEL3Vcw2YJPe432qawxDjrMKIzvDGP64aKbel5SlSVlumYzF+xpHCl1t4MxNEhloTF9NQDPZrhrKVIo5Lxfkzx3tc8MXrz+pXkw4thFK/4AEy3FpXkDdsX9c8Sihz5pTcjG36cuax4X4vrY1cXSbplvQl6egLlfuxdCpSbYRSyVjZAmjEHkjTPWAlbu4klRALXTQMhQiQolKdl5M6Qcu1nNGLV9Q01ko1YJyFaJfinOrJkeqwicf1rR7EYB6no1hQdGmjCTa9mzQ494EjMPTGptS/TMAh2XJzBlzUN4x1cXf1RdTqi8fmSiv6W6F49lZNUrXo5lnpK2wAbOzgjz8L1zUJR9j8V4H1iWq3mEpBje34ry/TU2u+iNVdOCrD2Lhz1WXN4MLqlZjJWudiTXhaKY8/dMperE3Mw6NbH3ginp8JCLCkFRvd9/975xdXOEuAlJ5s6TvacuGbi0UTwCubz9n4oz43e49uqQIU/JLZqOCyBygfS6cZbSx2FgqmZ7xYSEc/OXlkGnnMZxbzI9iXb5eKcT3p8QfgebRyPrvqjaZuzGNprNJBa+rlmb83etLtFGNqQsb83cvb2l/e8t6m1IhSSWaDt+ocY7PlHK+7rWDXgboRUklg+MCD73XMdCpGvF3Wpwy6h1WegdSSaQzSpQf8Rr5+o90/ZB9Kv7upRdwcTVllSi8kjXLqo4xTYeFu6N+KxDsTx9SAi/AG15Q3sn53QwZqAMcXWEra6evJhPO/CH7pGf/SUTZGHI83BGcBSihVOspVIpizC9va75+lrbi32GU+jR+0gl+dvUaW/Yq5YecZZ3xcfnMIRQvcB4O6KuMuzihk0KH3tRk4Az584cj38pUqqObaEOLUd9ylKK18/EErYOOJ0pZJNUcm8ViSZ3XFBKhpNOzrz22RUIrkWFtpJPmpz+s82wW2xVvJD1SvPY5LLasjh1jyR2pKTb6rmQ+Mpj5otfPSVXs8Qa1ymlvxEG+OPfplg6HQ0Uhf1vWOYw1l7B3UHMRbXqKQzcZkG9TykdZUPYaLP0CL/YYXQhDa2mnG91SO8rSopftAb1lYXhjAnfIVrKF6IMxWdXQ0dBLTULNjfA9l20HxUZC/80OIh/aCnox3+HglsHQBqVhc5RGplTpBz15fKRpxTMC26PXU/JsT6BKFJx5Spqc93NcNycpew6tZP6Z2fhVS2IYNJI6r5tpNMmaVa4SjMR77Ec6s3BMPFS+10QrqZhPA+YXFnq2NcY8AAAgAElEQVQhouXB1RXF+hsOiwzJmsamyem0Eq02vyczX9cLXHVCrTW8O5ymZwC2Tw/o3jmDqMP1JaItclAUG2uvUEkF9eHZlPl8xu//6SusXhqFQqHvPaxIJ5XZkEXdsF9v2Xx8y9dH0ebhD3xad4De1bSS3Ho0G2NaYNcZ+lHKEKkdmqWg7Zf409HJXAupSu+lQ2Kjwu51LE/sRW8E1s4ntmskYJBtuSPSxkRBRSTFUkN3RNrE7PsjjSW+72p0Rm87OF1DdCkikv7tnufFO5qqppWgBcMpaXod0+hQP/GrmSb9QWFhn561b76TrCxXA87/ccWVes5HSVfW3Kf8cfWMkYbosh/OjjWU6Jy+abmV8mzB/D9B4OGqCc6dhMfrMYO5jbKb8XElDOW19xnH6Gu0dsSrKylV1JfYxmsa82u0J+EErC7Bf8yoze9O5vvfDgW/QTh3s37Gnhe82z7wRhLGJ+sE33/Nm88s/rfnb8S69yY7RWF63XIxElmtSTajenHkt/h8uxOB4pOVsHm3pgqfuPni78XvvVX5vGzYJ3uuZBAx0YYsq4rVHzbsJJVanum063cn8/WDAEMGqZbSUG/X3KcpqrwFBezZ5TnGn1QGI+Fk45VJNJ3RPJksGwHQqYoco4CBrZBpwj75+4jFZkPWalzJQOsi8PjQbPAHEYqUYrNLhaf6wMPdgvJTa9v98/fo7r8ahyOx13JxJgLGz371BTevzzGeF2wlwG1V5bxwNIKjRx+LW5pbFbRNxeTqglq2ppiFxi47ku83PMt0aNU3vBr57BNQtiIQ+KZ7x9C0OC8tynshfP3w9TMvZkPOwjEb4aYIh6f6kj8cPwNjfh4/j5/Hz+Pn8R92/HSLxGBKnYjo7uOxou4yrHD0vZpB2maMo4Auz3h6FpHhjfuGwtBobZ/xi18BYGkKh91HgmiIISU+TGfAer3jsI7xIhE9lJuMhzwjOe5RUjG1Fh17cIbeN3zSdSzaiunZDfzrX/eyWa7KpoYPEqBRPC94v4+5MALylYhe8mFNj8Gv64bLiUi3VOMRo9Jjt37km3sRkbZdjUFHstuQPYpb3G9e2lB09LaBI9nik7LhbO2iGUPsW9lLY8YU2YE2KIkzCYjZ/wjfXtlBv6KRadTKNyhah6S32Obi/+JYJ/EqyjIlknlv+3KMTcs4jVA/kVGbBp3nk2UthiK+zx5YlLsUrdGoOnFb6nSLNtd5f0y4MGTtY6CSbhO0JkYPxc3S60/jo3VZk+YVRbkmlCkYLYzYYHN2o+KUYl88dtApQ+Jsx+NapDnd0S2pYtC3Hf5ECvIaKqXR0/YaG6Sg5tMjy0VOVfcU2ifFiBqzzWnLksedWHfHNTFyg3a6w9Rm/Nh4Wq7pTTBup+wzuf6OSxUn1IVJ0oo98f5xwXaRkexzhvJWpXkh94snImtGr4p3Ue47uq5B7QtCRSp6oBKXMb3X4qgi5U7jUMcKwWzE1VDsxTYFva6YXcxBP00vNrm4pZW4ONVbDHuE5Yp3YNYNweUIc9biDESUfkxV9tsF1ZOF14lI99BkNJ1CpTeEgax3cmAw0NmtjrzfimukeXiL3tXUVk8rm6V9JaCMG1SvRv1eRFehbGek5mk9ex/INKqWUCxdbq7mdIuv5W8pUO1zwkmPOxS/9cl3sGKV85dDnmxRax4qOo0fkGYB+lxmW3YVemrhzVfs/izWbj5+YmB9gfLdhq9lStPoe/zxnq7QiaUQco5G4WS8tE73Q7ta86W89Q6DS76wbKrDjt1I2ADF2KI3CsbcZLIUc27zDX87/4Knj/9CthRrfBfZ6JlBFa9JLXHDCWOLvNFZZRWTXPYx+gaL5w3brU7UyHpi22NrPs48YbeWGZeVTm3+yE3Fbjns5N4ZpZwNX2IrOa5sgvfaDmWzwFR1jkuZZTIg2z+yXRZIGlsUR8FIUwoUWUKC+/iB4yohHnroMt0SaCbqLkdVNSJZTip0WG+3rPKCh5VY47tvt3B+yhiTPtdUwfr7bNVhX3D3kJIfoZK95hQq7z/cUVZLfEl8YjBBHYz5+N8/Es7F+dEvFNTDkea4w5PqFen+gNJc4CgatUyRqqmGZQ85VAVdJUFkfUdyrNHtj/i+wFqs8lOu3h+On3SC5ij4/mr8ahaybBuyzRr/E2qtMsgSj8rsMFTJ5JEVJJWL3lu0A1l0tuC4DlhULtUnA91ovF9WRHOToBYLV9YpbdJjFip5KnsR3Y62ynB8G10TBrDRFbzoR3o/1hWe26JnYtPF9oFLa4Q3ssEUn412Gtm4ZmC79JlweBM0Vib0eo65EkZBNXuaJmemF+iSjaDZN3RxhvIc88mlBbMx+qCnLnJaSeUWpwY3I59KiWhz8Xs3Usvsh0NTC/bxkvnwBQD+yKOsNA6ay6qW+nKqTlXG7JKagyoMz8T0OXQ76rpDccUBiiyNuinYFTaKLxFaaU9g+JwNQ2oJdsi0DjNLMfMjkxdS50u3cUcmxkqllejDwDhdXsceYrg62aaiLWTNtu0p1QwlGePoEs1pW+h2R9SrdLJfzap0NF/BicZgis8ONRTxgX4XU/WS0aatyIs1Q6unk/VJu3LwzYB9XpOb4hmB7lO+arH7CG9+6lQAwsDGCwIwGgqJwNvXBaERYfkWoUS49rXJ+7sVRQe1ItY96XOytGI2VOh04QTMkUIUesxuP+NlLUALu7TBsCt6U0fTxKIt24ZWydBXOWorntE1HXVRo7kqjkSg/nCMZCBorFMufJ913WNIvcfDoRHGvtyBZP0INAt7PCPfq6wtkSK87kf0ZY8d9OhSmaXa73lOU7ImJkzFXlxstihKgN6kzD6l6nqL0l3QeCp69YkwXkUPU4zuVJWhkbqbHhbH/gVlreLXImW49BP+fuRgx3vUkQCt2E8b0oOJqx1RWxF8rVSdi13BzjZxHKl1V3SEe4Uy67mcCOO+VgLO97+jr4e07+SZfeHw9V1IdBVixjJFWnRo+pCuPa1nvz888AuEw1Nf2xiTAUqksH0WBvLMOadScphekMvyfZ629PuUvzwUTEdSJuriSLk38UOHy1Q4pHvHxw0M/Fbn8VE4C31v0NQNxtMD94i83DB4yd/7PQdrwEpWG75tN+zzT0HHv42k02g9sU8Cz6ApPhKOTFJZ17MVi7w3aBqDQirEqJpCebdHNU0c6VfjQwUt4Dqgi+/TzR5d8dFKhdyXSj/NEWVuohUJtURg63GJsltRL0E3BSDJuVaxytOg6HyikLgD9EKs/XrzQFUlhIMpwxsxGe2dzsfjkd0yw9jK/RllbFWd4/7AciswD2X2AqPtCPuCUgZ4Z5HNcDLCKRUCiTNox1eYg5J75YiXieeevz6jXJks0+++P8vF8cfJND6Nn3SCg8kZmSGhwWj49AS9wUGKLtZZxea4I29bEnljPCNk3+4oO+h3wrD54zGF4bG/T8klpZlvqmyOK/Z1ilKJTVDmMfU+QdcsHE9SPB0a3MjCssCTbAlG1mGop6wF/sSH4p62ExHAq4sBLRpO37P5IDZP6mqcDRzUtGC5lvRAdUhhpwT9gc+kQ9ZjizPXZOVuqT45hNTAMlzKpoSpiKpenc/IdhXt5oGtPHxTL6CqepJRhSmZX7rqdKltx8LQPAxVSh+5PbmZYvR7JhIYlGs6aQ677ZbiKJkXPA/d6FF1m/FYICP7riZPDXy9QMs/gR0UtCol7hTGEkGmZC09Jdb8ksEn9YrkiNWqeJ5FK9U2uuq0Jngz0oj7OY8lGJ9g9K3KIBoT2QrUwnpUrUZ5/4Q1DTFl4BIDYWmxrrffO4Z1WtNWPU+VxlzeaP2qpjVDVruYQN5m9EGEbvd4jU4jIf2hN6RKK4xzk8m/wwhhex2KmeKNRljyHealSlelRIGGJ8VX27bis9sX1LZCL6PW/G7H3Pe4GLoohjAyY2PIuqwxDZga0nl0CqpagGPyLAEOrlWCrZPlDa4vA7wyxVZ1PNNAK0/3gipbhwpUqsrF6kpMCV+3XAPFfcLVLB5ke8VUaZiYQ9ajJaWE5Re5w6p6wtZCYkkEUKOidh3X5+f0qli7Prlks18yPO+xLVGf1Glwk4BjumI6FBF5beVonkY4OmW4+f0HcetzpxFveo0VL+h7KUNmwdT5gl32Nb2M0D/77JrdL2xeUfE4FNmBWtUJhgGrOGb3KIPtm3MSvkXd1BSaZO8JDkTKf+bw2XuueuFQpgzpA4WLwKCd/2cAlK7hX//4B/zwVLHlw5+fGPxPYn518UxxFzOZDpj7Yk2M3uHbrz5w/PLw/Zm1JjPi7Pj/tHdeTZIcWXb+PDy0SlmqFRogBhiSZssH8oH//4Fm5NiSRuPOYIAF0Oju6hKpM0MLj+CDe7cNt8rAH4A8j2WVmR7h6opzzyWcXSFvtAERK482+0g/RkQvvtHP+0uHcByGwGYRGk/txRV26XMoEy5vtNczmTrk4T+xcAKCuT578l+3lFXyZLwiHgjMGrPckl01YNdHPGMYukg2TYbnxgipv7+tBAcxEo4Ft+/MxVoeSb5a0g82m7UxbpqaD/uSrm1JjU5oZFlUzQSfPZFhZIYvX9NfuFw4FrudPo9sy6V5rim001ArRTDT6+n1jaKLY0LpEhjOQ3XT8tWDx9W335GbkqWwU3waTtypmllqFF6aFbOv37L7oAjNRTa9fkUcOKROxCtT6rOTkn6McZ2AbNSM1YlYgqw49BGuaZOVPhN5+Uf87iVoBTMGc0GdckUQuVxdeYyeISesK7J0wOoHdrfaQjsMirq1yTZrRtMz6jKUWKOiyQ50xsOrvIrHVcabawdZa2tsWxSMFiylRWQkdA5WBoOH1cLctLQZpUvZPT2kY3/E2k/ITD2hJ5f4VylONWCU3tgqgXsY2K0zyp1+wff1CiceSK2Syhi9ThmTVSWHB8Xuo9ZNFI1Pkt6wzXuce221/I/HnIVwSH0PddLP60Yd0eSGueg5Gean6zy1nqbTKWLi4ft68h3Px7UcNqcjfq8XYts7vJlB1ftfCC+ZynCqkd4usUr92caucIcO1/G4N22oqn3P9VRQbh1SU5eEhEkS01YNhZHbauqBVIyElsfRhAjFM+nioHKwrI6iKlmZ55lJi8D2kR7Ylj7wrT4m/GqOJRIuTJ1g0ddIX5CKSxw+b7yMHA9XDXhzPd950XGT+HhlCxNTXtEMqE8Ndepg2UYw3Mvom5CxkJST51PbwcwjjAbeXMa4hub/235NVSmCxsMtdViuKlr+9OoNrQw5NIZ+feUTyxCpBgbT0klGOVeRje28pDfyckHn8Ne7XxH5lJMJLQrZM9Q9vlBf1qwVT7l994lrf4rtPB2vqvVvBEOD0/UUx4rSNLSeLyUoC+W4vF0Y0spBIdKGmT3jZHrdWVbLcvaCUDhUM7MHupHcPhF3Fkej+fint4IbdUGLi8iMsTV09OOIZdmsjF5wWE/I/JrJ/uml4hq5tZ93EUm3wfYFf77Wntbl9D9hvxiol28pI01uCQ4j7Wrgvy1tvlPfAzD4NXIuuNx+YGV0Qve/9Fwmr2m/VsSmDk8eQhYLyY/3FQtXP4Pj11y7c1aFJLwzrI08p63gp+PHJ+Mt8g8UW+3N/P1hQ3sY+C9/fs38W02Oy25XXL91+Hn4iPpFj2UTKqZ1xPcveqRJnRSnBtsZcFrF8VHP4/y7CxJnwnrYIWo95vTeZXO6w533xL7+7Cv7GjEeOWQNt2bM+y2cqvsn493mNZ0x7vJNzq69x+lcrq509OZTY1HvKtylQ2C8+SLPceeQ7Ur2ljln7SOvipa70eGw0+esNw9pLWhEzZVp8FznPcX2gXwMdU0rMA0D9lKx2nUcTZlD1cKufBoZmMwWeMWBb7/RRvnl/Ib3u5I86YlNmmDWSdqqYTKZcBFod+6+eWBRudx8/QbflF11wsYdJ4x+hjlSkEXN4TgyUDF9Y2QmH2vc5UAwBiSR/o1ACjx/AFkwuTTayM7zAvufcSbGnHHGGWec8YfF73qCQRhTGeWBROZ4izlql3N5YSjJTk5mWRzagfBau8GTaMG//nRHXboI0x6l6TpQOY3oGWNtZSWzBZdjT1/nbI0unR/EhF6DUuILQeOmjhidntaXuEarr5QCr38aonHdkU9ZhhtpK6NfCZh3tGNPZ+n7/mXnEs178sbFNVaQdUyp6Bi6CYmp9arcltwLsU4OUaNDMLt9wbre42UDd4O23tJtghU6eJPXCF9bHsEJvBchM79lakgVJ/E0ZGfh0o0xmem0MB42HFuPzgq+CEr3ssTxIl4tYzypLb7bzQnGgVY6eNOJ+WxFgSJxbeahsdqKgmGQJP2IZTycWrV8KE7EjiA23nbXFpyshoEjvaff0/L6Cvj1/xnvT6st19OUalA0hQ5f9f6UwR2YhDc0JoxSNAWJmDMEOY1t2vJsBrp8g7JjZsaajy4vULuWkywYj/r9uALGImdsRpyFtnqbYkcfBuyLFrfRVurR8pFegJU35Nnzlt7NTYyMbOzIxfW1ZbwoBCc1MBQrhkB70X05sHq8xx19GvPena5jsEeKsaUwZIRxU/NyeoGSOR1GfGA4MCBg2GKj5zGJU+53BywpUa4OYQcyxXUbHGqK/mnJwd3aCJc7IX19Yr8pWVh6/+yl5EV8RecltJledzL2cD1FiMPDZ+JFb/PGu6AmY26iC6fiHdYpoKAgMg2jj6OFG9X4fcGhNaUJ9YJhf+Q0FoSmFVH3sqDdJzyop5Z/Uet98l1n47+e0pcXKBNe3/x5ZLKrcO0T0oRg//m3DDnssfcN9eStnn/vkvA00E8WhPnRrJOeyLO4/OYKsdFzbYUbPj7c87ZLUKYZrWvbrI475LDlL1v93vcPa1zR4pVPw3XjmxTXhHWX1y95OU3wrlyUMN1gTo8I90i46/lkGXWhdwf6RcF49Za3Ex36zJM1RWfR7eHRiH7PkoD09Q0x/5HmTu+Zj+UnwnEgnEsOpg1RKI9s73sOZUT+QY9ZiJIbL+B//Zvx3q93VKYc6JvJSGmPrD/lhKl+ftUJestCeIAh/ByqLWHhEiQ9VyZ6UUcS3AnVeMvOROESpyScJ1wNHpbJJ3aBw+Lf3zAeSnLTvSJvj+wzuH08krk6dTBGE8ZncsTfXUm2w4wg0s9VB1tKe8BrXQ6mA4lXS07VBvuxRpjwahBD4HS05Ygw4tCWtGjuHmhyOJlyKum1eGOFtZgwmrDufrPha+ctR5URuqacZO7Qtluqcs9FoM8P23mmpOMf8LuX4Ovpd8TmgH5fr3AHD0SJHWr33m0cnLEnjgYs53OH4imP6x0nFRMZ5X4lJeWuIplNYNSDnQYuh2TC6XCPNEy7ZP6Si0VIfqoxJVJ4jsfgWrRlB54+tBfelMnwtCA2nU+YX7gUB9ORwLWwKgdCm9TXi6IaM5rWI3R9+nudyP/62mLVF5S7goMpKo/7Od3xyKEVHDrNNmvVr9x0gpM/MP+oF5R1XfL1t38msQKkic3nTkr+2JAHFTPDMPFmTxlVk0lM0Y2ok+m7iE1i9Vh+S+cZZthJUMsjoy2wjGSS25SkcYAzm/Mq0c/1biOhKEjDkMiEIFUYEEvFNtvgGx5RX/X45YnEmnNwDRN2d0BYDciKqYkNTNOnRsZY+chlRGgtiHojk3doEFdT6sFBHs0mEzH59iMHBxLT0aLAx7MqVNuyaUxdaHdknZ/gYct+rhe27YQ4o8L151xv9N/q3uLQSCwlWJk6vrQJ8D2X2WKKbT2f+H7/7lcur5acvo5oAyMHd9Hj70bs1sEx7YBC2dLmNZlQzAK9EY9qR/GYgRNimbC+qE68rw/YrsSf6/CLHy75Ogj4ePzIvtFElnrf4LouY5EjTecPK/Cxqo5Vu6NpnhP81u9E0GG3Dn4ov9SKvjiVjBc97W5Pa1rQFIXAqVustiE14hUFLeVJ0asjldAbf70qcZOBoRU0pneclR+wnAliKmlN/rjbHVCqQgoL26jm+NJn4nsk3lMxgm+/0y2D/CBFzF/yfdDjGVHx5r7mb9XPxEqSRHqfXrgxx3IEV9KmRvHfH9mgSEqbW9P1Peoj2qEgWilmSi/a1XigCF4SjQmnVO/P3W1OG55wK5ei1DVnD4NFsFIEztO99nqaYBmiSTQPSRYJTaJoCl1j9/7wF4rNlslVwMyE5fxXLaqPCWavcSZ677XbFoTCW3pYmKLtIGV+adN3Le9NPvHq1qV8fUm33rCzfgNA7V5zV33gMFpszdyWu57m+qlRJB2b3DC6lX2NxGc7t7GNmMMkVfhOS9mHdKaoftdJ0pcuSs5Rtl5j1WBzaQX4F0sipevrqkbXQPZDT2NyjJNlhCdStr1FdjLM4qGhdFyCl1csR52f9SsgH/m3lZi/rX/iJCRlqnOdgwoIgxdEuY/33uTZO6AvkfuBTaff3YWc8XiX88N2w9LkBK9ffEWtXFzVMDGGxlFILqffYF3B/Qf9PrNqw2PucDmNUYP+vvk0YPTmPO7/Nz+912ItwfTpWfaP+N1L8D4vvsSRO9XhXCuKk8VoGsUmryLGoobBITeX7baqCOKA2WDhGzZjO7R09gVxGiN7nUvoRkmTTvBjG3EwC2eZ8uara1RbU5dG/3MUhL0gCBSdKVqO5gnh5NWT8c5UxxC9pDYHihpKdqJEli1qq19EpmzSQIGVsEbnDvoHSReWdOGW6kEvgHlX82O3ZjzU5O+NfNiwgRffMMlzsgu9oWLPYtzusV7EDOZwD5wPvK98lr34ot7iPdN+pMwObPZ3qEJb91H7mihYUG8GXJN8rqQPbUrqS+pMW4HzMMaNYpLOpd7qdzKRBYUFVrkn9owyvp9jJSP+KUM2eoEtIkVW1fjjHe3JeKDlAUXLZlB0JidYh083pud4SEcydDWWoepXIqbIJJ7MGMz4StWipMfEidmb3JF/ecHmdo/wK8hM0XJ+R31oUaJD7BLzvDuSIEHWGaIzeULXxhMKJjHXqTbAFn6H2yaMYUhfPN9Fou9zeuEjHI/SsEOHcsRWAZ1l0X0mVy3m0Ahid0qaaMOt/M3GWY5IZhSYLgWdyzjUDK2DNMpHrPdkaUk8CA62XmP9CC6C1osZTP5vv/6EEyj6UjB5RsFi6I2oACHtKWccQiZG/T6cOqxPOdm6QEjDaG1qwsBjqzqmRjUou3PpLtaUZU1j2HJZNyBXK8bQ5cKII2zxiNsRv5a4Sucsr65OyO4V1aj7DwIkfsgyfP6QcIy+3vj9FLc4sf3qhrfmgP5t+zfG9Y88ODGPC3PIIkkii18vXDqjbesf7xEfp9yGnxCdvmhlUJLNjxTvOt41+nKT8Z9YOlu6qGFhpP7eJwOD5RE3Vzi9JkV81TbUb5aEz5C6BlxK0zA6ax7YtA2z6pq//vbPAByq32jFieGQIkxT7knhsPYd9lnOZ+WGZp/x8bRhNp9xMdMRopUU/O0vdwTCpfG0Vy4ji+DTgcwLMfYs93VOnPmIcUBO9BoQwqN69fQsC9MlkaPXujdzKJqO5lQwmoPWc226rqNof2RnpPTcOOR4iBGqJzYeXhDHvMv3pE5Jd6Hn2mkEZdOwLmySS6PheVfSjjXO0NMabejOCkDCJTHHSD//YSwYn5GM+bA+8XIKgTBtuISPUxw4yTknk9eL6gHZDvTBjIkRJ1ZRjJfA/NQxmkoENYyM5Y6HpmM0JA3vxqOwcsSh5rUhjFmzC3o3RNmSsDRGReFQHu4J5QQifYc0/5+k3+8LaBc7lCkGSAKHuhWktkXq6cFmbU/eHHDqjtCwSEXjISn5ZhkTRObpG492tLCt4EvtS+R2fLO84OOj4HM/l8nEpVY5i8WEdKonp86OKGVjly2jcWccNyZZ3DwZbzhOGV97PN7pZHx+XxLmcNd0iF5feNVpyfAiJu8aHk0COK+3nFZ7UjsmnelN1lZHolVG0SuWl/plFmpkIrZs7Z7LWC+8WB7p3RRVrVkY1lLQSWapYAxbPMcwv7yn1ogUFo6sEZ0+AJvNO/pghTuJEbXRTm32tMMH6rWPbTQNQyulfLhlCGeovdHhFBKRjwxNix/q0JKFIvtQ0B63YH/WgxP4vUUrJLFpnqn8E2010quO1ijFCPsZKbLRopKSUSQ0pq+dCBTN9pF96zNUn2W+XLKTwn7tMgn0QaH2Pak7IR8EqjMtgjqL2lYE1issU8LiM2OwUxbx7EtpQkqDlzooBYMhcpSNz1E0qEOO5T4vi3S5+JqirHl4t2Y0FPwqb/BsQVe12FMdpooccC2JdezITVPhAQfHjhjtkMf3mkDkRyOhnPGw2nLY/2zmNcTaN8zS4Esd1ml34CA7uqrGc/Q81scR37fwLJu2fjreJjPklonFKQ0IRUNgm/pEFRLkJWKQNL1ed2W9wz2+5FIpDDmUyym0bUnX11SGMBX1FYMMCN2BptP7Z25JnFAyEZJ+bnQdRYTjwu225MqIp1dHxWOZ4QZPPe3iyoRMdw/MvZjgvwcUb41XebolLO8pNimi0F/WJDl7MeXd//xAbbzo9HLGPGzwiInm+iHGlcD9raQcFKHQ/3dw11goPnyyeGk89d6NidePNKPHzNMeaLZoGYaQJnjKBqyGmu6TDlVufgqYSIv8Yc/DR23gqtOKtlcUoSCe6wjJJ99i+/Fn+MUl/dp0dG8VlWezcG4pTB3r6IzE0mc+3bKu9fiiTc9D79I4ijLThmBST/hwrCF9xWA8+vHa4ebwtETixasbahPWDS8KguYVlbX6QtLq7YboKqb/FHN5o8exHwV+3SJSBycy8+/G2NMUVRxp7M/ncUBjT+i8gdE1XeQnHlXrUTbXJIm5tZWD2mRspSI/mffeBpTu07q7f/rmFev2SGhoJipJaDLFOMJhbfq7yikyucAWEqvUYyl+vWUxpCxfvcQq9fp5/OWRZCF5sUz56a+6Frwujrz4forbgpXqy3xOyKf8jr72OBpy0SKNcBuLKydEhfrZ9s9oyf4jzsSYM8444wjaydEAAAP8SURBVIwz/rD4XU9wmV7w6XMNVjcQWwPOPMEzeT1btighaDyf6VRbY4Xs+Q8v35BczQlMMbI/KDx3oCzgfq+tb6+usT3B7t+9xTLyBoELQoAX+UhDJOmqBtV0+MEcS+m/JckFLy6e9vqZ3AzkvwkwoarpZCSYCI73AsfSRbvRrKDHIk5HRGmSqV7E4CoOWU1xZ5Lxw0jqurx6aSP6/6rHUmZ0w5pEdSwjHaqoApuvkoj08hJpNBFFHrNa/Uwiljiptm4s92mx/PJ6pPFsil5bKk7r49odgTMyRibEUXRkYiSQitF0PfBCXXdYVmt64x2ngQuJInEceqWtrKknkVcujzuJZUIIZVbgeh2zaIkwnTpkc6TJM6q6ITAFdeMzxf0//3pLuhacapfAeAftsURMXIbTSG3KF9p1S+M21I8Vxlimj2wmluTYV9jGWlbNCGNPM+mIBhMOlD71sWPXb3AMSafOM5pKMFgSadQs7CEk2+zp6hb5jLYlwO4oqJyAOJMIk6vZbmv6umOvjswL/V2pldAXJU1e4xjCSz9IQjtiOo/Zm9pEu1aEbsChdTgYVRWv3nH54pJ6aCgyk9cMHUahUL3k/k57lvMoIgwcmmGgyZ+O9//8pL2UydzD9RKGyP3i9RZVy83ERyqfwRT+poGgGE7Q2cwmOgQlhEXZ5QyOgELPnzVN6Ooa27LAhJscF/zeR4Ygja7jqqhwFxFh33K/1e9FdTnFviOcHZ6M1z3oZ+1Ez/rhXzjGr3n4QXsuDzcb4sYla7Z0P2mv/6b7z2zk36nUlu1Kf/aH+yVdusXvPF772vvYjSf6Nwrrrxa2EZ/YXbg8ruekccgPhkQ3dD+yHnd0VUdl9lhiTxmGX6nGp1GMxcTFM8o3j+qR7mdFlf3M/tF0M5Ado73CH+dEe50nrOQ1XWOR+TnFv2jvR/g5nrJYi5LwQmt+ykaHL3/4m4NtxAweV4Wur2xqfvnVRGteQHXrIhc/0/umWez7CzbxpyfjFY5kEuq5dsSSXfeJTEFsFP7fH49YSuLIHg9zRvsBOBa9smhHvfFWJ0EiBZ0fUt1qj/R+XBE4l+wG2L/Ta2xTVzhWCGLOItO/0XkVuWjYHEsqkzloOwfhPiX5rfYunfIpJnrM4zagqEfcWlCZdbyWiogZ/emBbKXndlQdf+cXpLXkynSDUbZgczgwa7ovPd1OWcXm9hPL6Iq9+f1is2Jx6bKkx5b6s0Nu8f1iSTdZsN7qeVT573eWF+P4NFd1xhlnnHHGGX8EnMOhZ5xxxhln/GFxvgTPOOOMM874w+J8CZ5xxhlnnPGHxfkSPOOMM8444w+L8yV4xhlnnHHGHxbnS/CMM84444w/LP4vTLlimTnDNaMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# visualize the weights of the best network\n", "show_net_weights(best_net)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Run on the test set\n", "When you are done experimenting, you should evaluate your final trained network on the test set; you should get above 48%." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test accuracy: 0.472\n" ] } ], "source": [ "test_acc = (best_net.predict(X_test) == y_test).mean()\n", "print('Test accuracy: ', test_acc)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "**Inline Question**\n", "\n", "Now that you have trained a Neural Network classifier, you may find that your testing accuracy is much lower than the training accuracy. In what ways can we decrease this gap? Select all that apply.\n", "\n", "1. Train on a larger dataset.\n", "2. Add more hidden units.\n", "3. Increase the regularization strength.\n", "4. None of the above.\n", "\n", "$\\color{blue}{\\textit Your Answer:}$1,3\n", "\n", "$\\color{blue}{\\textit Your Explanation:}$\n", "\n" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment2/BatchNormalization.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Batch Normalization\n", "One way to make deep networks easier to train is to use more sophisticated optimization procedures such as SGD+momentum, RMSProp, or Adam. Another strategy is to change the architecture of the network to make it easier to train. \n", "One idea along these lines is batch normalization which was proposed by [1] in 2015.\n", "\n", "The idea is relatively straightforward. Machine learning methods tend to work better when their input data consists of uncorrelated features with zero mean and unit variance. When training a neural network, we can preprocess the data before feeding it to the network to explicitly decorrelate its features; this will ensure that the first layer of the network sees data that follows a nice distribution. However, even if we preprocess the input data, the activations at deeper layers of the network will likely no longer be decorrelated and will no longer have zero mean or unit variance since they are output from earlier layers in the network. Even worse, during the training process the distribution of features at each layer of the network will shift as the weights of each layer are updated.\n", "\n", "The authors of [1] hypothesize that the shifting distribution of features inside deep neural networks may make training deep networks more difficult. To overcome this problem, [1] proposes to insert batch normalization layers into the network. At training time, a batch normalization layer uses a minibatch of data to estimate the mean and standard deviation of each feature. These estimated means and standard deviations are then used to center and normalize the features of the minibatch. A running average of these means and standard deviations is kept during training, and at test time these running averages are used to center and normalize features.\n", "\n", "It is possible that this normalization strategy could reduce the representational power of the network, since it may sometimes be optimal for certain layers to have features that are not zero-mean or unit variance. To this end, the batch normalization layer includes learnable shift and scale parameters for each feature dimension.\n", "\n", "[1] [Sergey Ioffe and Christian Szegedy, \"Batch Normalization: Accelerating Deep Network Training by Reducing\n", "Internal Covariate Shift\", ICML 2015.](https://arxiv.org/abs/1502.03167)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "# As usual, a bit of setup\n", "import time\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from cs231n.classifiers.fc_net import *\n", "from cs231n.data_utils import get_CIFAR10_data\n", "from cs231n.gradient_check import eval_numerical_gradient, eval_numerical_gradient_array\n", "from cs231n.solver import Solver\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading external modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "def rel_error(x, y):\n", " \"\"\" returns relative error \"\"\"\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))\n", "\n", "def print_mean_std(x,axis=0):\n", " print(' means: ', x.mean(axis=axis))\n", " print(' stds: ', x.std(axis=axis))\n", " print() " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_train: (49000, 3, 32, 32)\n", "y_train: (49000,)\n", "X_val: (1000, 3, 32, 32)\n", "y_val: (1000,)\n", "X_test: (1000, 3, 32, 32)\n", "y_test: (1000,)\n" ] } ], "source": [ "# Load the (preprocessed) CIFAR10 data.\n", "data = get_CIFAR10_data()\n", "for k, v in data.items():\n", " print('%s: ' % k, v.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Batch normalization: forward\n", "In the file `cs231n/layers.py`, implement the batch normalization forward pass in the function `batchnorm_forward`. Once you have done so, run the following to test your implementation.\n", "\n", "Referencing the paper linked to above in [1] may be helpful!" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Before batch normalization:\n", " means: [ -2.3814598 -13.18038246 1.91780462]\n", " stds: [27.18502186 34.21455511 37.68611762]\n", "\n", "After batch normalization (gamma=1, beta=0)\n", " means: [5.32907052e-17 7.04991621e-17 1.85962357e-17]\n", " stds: [0.99999999 1. 1. ]\n", "\n", "After batch normalization (gamma= [1. 2. 3.] , beta= [11. 12. 13.] )\n", " means: [11. 12. 13.]\n", " stds: [0.99999999 1.99999999 2.99999999]\n", "\n" ] } ], "source": [ "# Check the training-time forward pass by checking means and variances\n", "# of features both before and after batch normalization \n", "\n", "# Simulate the forward pass for a two-layer network\n", "np.random.seed(231)\n", "N, D1, D2, D3 = 200, 50, 60, 3\n", "X = np.random.randn(N, D1)\n", "W1 = np.random.randn(D1, D2)\n", "W2 = np.random.randn(D2, D3)\n", "a = np.maximum(0, X.dot(W1)).dot(W2)\n", "\n", "print('Before batch normalization:')\n", "print_mean_std(a,axis=0)\n", "\n", "gamma = np.ones((D3,))\n", "beta = np.zeros((D3,))\n", "# Means should be close to zero and stds close to one\n", "print('After batch normalization (gamma=1, beta=0)')\n", "a_norm, _ = batchnorm_forward(a, gamma, beta, {'mode': 'train'})\n", "print_mean_std(a_norm,axis=0)\n", "\n", "gamma = np.asarray([1.0, 2.0, 3.0])\n", "beta = np.asarray([11.0, 12.0, 13.0])\n", "# Now means should be close to beta and stds close to gamma\n", "print('After batch normalization (gamma=', gamma, ', beta=', beta, ')')\n", "a_norm, _ = batchnorm_forward(a, gamma, beta, {'mode': 'train'})\n", "print_mean_std(a_norm,axis=0)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "After batch normalization (test-time):\n", " means: [-0.03927354 -0.04349152 -0.10452688]\n", " stds: [1.01531428 1.01238373 0.97819988]\n", "\n" ] } ], "source": [ "# Check the test-time forward pass by running the training-time\n", "# forward pass many times to warm up the running averages, and then\n", "# checking the means and variances of activations after a test-time\n", "# forward pass.\n", "\n", "np.random.seed(231)\n", "N, D1, D2, D3 = 200, 50, 60, 3\n", "W1 = np.random.randn(D1, D2)\n", "W2 = np.random.randn(D2, D3)\n", "\n", "bn_param = {'mode': 'train'}\n", "gamma = np.ones(D3)\n", "beta = np.zeros(D3)\n", "\n", "for t in range(50):\n", " X = np.random.randn(N, D1)\n", " a = np.maximum(0, X.dot(W1)).dot(W2)\n", " batchnorm_forward(a, gamma, beta, bn_param)\n", "\n", "bn_param['mode'] = 'test'\n", "X = np.random.randn(N, D1)\n", "a = np.maximum(0, X.dot(W1)).dot(W2)\n", "a_norm, _ = batchnorm_forward(a, gamma, beta, bn_param)\n", "\n", "# Means should be close to zero and stds close to one, but will be\n", "# noisier than training-time forward passes.\n", "print('After batch normalization (test-time):')\n", "print_mean_std(a_norm,axis=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Batch normalization: backward\n", "Now implement the backward pass for batch normalization in the function `batchnorm_backward`.\n", "\n", "To derive the backward pass you should write out the computation graph for batch normalization and backprop through each of the intermediate nodes. Some intermediates may have multiple outgoing branches; make sure to sum gradients across these branches in the backward pass.\n", "\n", "Once you have finished, run the following to numerically check your backward pass." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx error: 1.702920153919555e-09\n", "dgamma error: 7.420414216247087e-13\n", "dbeta error: 2.8795057655839487e-12\n" ] } ], "source": [ "# Gradient check batchnorm backward pass\n", "np.random.seed(231)\n", "N, D = 4, 5\n", "x = 5 * np.random.randn(N, D) + 12\n", "gamma = np.random.randn(D)\n", "beta = np.random.randn(D)\n", "dout = np.random.randn(N, D)\n", "\n", "bn_param = {'mode': 'train'}\n", "fx = lambda x: batchnorm_forward(x, gamma, beta, bn_param)[0]\n", "fg = lambda a: batchnorm_forward(x, a, beta, bn_param)[0]\n", "fb = lambda b: batchnorm_forward(x, gamma, b, bn_param)[0]\n", "\n", "dx_num = eval_numerical_gradient_array(fx, x, dout)\n", "da_num = eval_numerical_gradient_array(fg, gamma.copy(), dout)\n", "db_num = eval_numerical_gradient_array(fb, beta.copy(), dout)\n", "\n", "_, cache = batchnorm_forward(x, gamma, beta, bn_param)\n", "dx, dgamma, dbeta = batchnorm_backward(dout, cache)\n", "#You should expect to see relative errors between 1e-13 and 1e-8\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dgamma error: ', rel_error(da_num, dgamma))\n", "print('dbeta error: ', rel_error(db_num, dbeta))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Batch normalization: alternative backward\n", "In class we talked about two different implementations for the sigmoid backward pass. One strategy is to write out a computation graph composed of simple operations and backprop through all intermediate values. Another strategy is to work out the derivatives on paper. For example, you can derive a very simple formula for the sigmoid function's backward pass by simplifying gradients on paper.\n", "\n", "Surprisingly, it turns out that you can do a similar simplification for the batch normalization backward pass too! \n", "\n", "In the forward pass, given a set of inputs $X=\\begin{bmatrix}x_1\\\\x_2\\\\...\\\\x_N\\end{bmatrix}$, \n", "\n", "we first calculate the mean $\\mu$ and variance $v$.\n", "With $\\mu$ and $v$ calculated, we can calculate the standard deviation $\\sigma$ and normalized data $Y$.\n", "The equations and graph illustration below describe the computation ($y_i$ is the i-th element of the vector $Y$).\n", "\n", "\\begin{align}\n", "& \\mu=\\frac{1}{N}\\sum_{k=1}^N x_k & v=\\frac{1}{N}\\sum_{k=1}^N (x_k-\\mu)^2 \\\\\n", "& \\sigma=\\sqrt{v+\\epsilon} & y_i=\\frac{x_i-\\mu}{\\sigma}\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "The meat of our problem during backpropagation is to compute $\\frac{\\partial L}{\\partial X}$, given the upstream gradient we receive, $\\frac{\\partial L}{\\partial Y}.$ To do this, recall the chain rule in calculus gives us $\\frac{\\partial L}{\\partial X} = \\frac{\\partial L}{\\partial Y} \\cdot \\frac{\\partial Y}{\\partial X}$.\n", "\n", "The unknown/hart part is $\\frac{\\partial Y}{\\partial X}$. We can find this by first deriving step-by-step our local gradients at \n", "$\\frac{\\partial v}{\\partial X}$, $\\frac{\\partial \\mu}{\\partial X}$,\n", "$\\frac{\\partial \\sigma}{\\partial v}$, \n", "$\\frac{\\partial Y}{\\partial \\sigma}$, and $\\frac{\\partial Y}{\\partial \\mu}$,\n", "and then use the chain rule to compose these gradients (which appear in the form of vectors!) appropriately to compute $\\frac{\\partial Y}{\\partial X}$.\n", "\n", "If it's challenging to directly reason about the gradients over $X$ and $Y$ which require matrix multiplication, try reasoning about the gradients in terms of individual elements $x_i$ and $y_i$ first: in that case, you will need to come up with the derivations for $\\frac{\\partial L}{\\partial x_i}$, by relying on the Chain Rule to first calculate the intermediate $\\frac{\\partial \\mu}{\\partial x_i}, \\frac{\\partial v}{\\partial x_i}, \\frac{\\partial \\sigma}{\\partial x_i},$ then assemble these pieces to calculate $\\frac{\\partial y_i}{\\partial x_i}$. \n", "\n", "You should make sure each of the intermediary gradient derivations are all as simplified as possible, for ease of implementation. \n", "\n", "After doing so, implement the simplified batch normalization backward pass in the function `batchnorm_backward_alt` and compare the two implementations by running the following. Your two implementations should compute nearly identical results, but the alternative implementation should be a bit faster." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx difference: 1.2693239795334417e-12\n", "dgamma difference: 0.0\n", "dbeta difference: 0.0\n", "speedup: 1.68x\n" ] } ], "source": [ "np.random.seed(231)\n", "N, D = 100, 500\n", "x = 5 * np.random.randn(N, D) + 12\n", "gamma = np.random.randn(D)\n", "beta = np.random.randn(D)\n", "dout = np.random.randn(N, D)\n", "\n", "bn_param = {'mode': 'train'}\n", "out, cache = batchnorm_forward(x, gamma, beta, bn_param)\n", "\n", "t1 = time.time()\n", "dx1, dgamma1, dbeta1 = batchnorm_backward(dout, cache)\n", "t2 = time.time()\n", "dx2, dgamma2, dbeta2 = batchnorm_backward_alt(dout, cache)\n", "t3 = time.time()\n", "\n", "print('dx difference: ', rel_error(dx1, dx2))\n", "print('dgamma difference: ', rel_error(dgamma1, dgamma2))\n", "print('dbeta difference: ', rel_error(dbeta1, dbeta2))\n", "print('speedup: %.2fx' % ((t2 - t1) / (t3 - t2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fully Connected Nets with Batch Normalization\n", "Now that you have a working implementation for batch normalization, go back to your `FullyConnectedNet` in the file `cs231n/classifiers/fc_net.py`. Modify your implementation to add batch normalization.\n", "\n", "Concretely, when the `normalization` flag is set to `\"batchnorm\"` in the constructor, you should insert a batch normalization layer before each ReLU nonlinearity. The outputs from the last layer of the network should not be normalized. Once you are done, run the following to gradient-check your implementation.\n", "\n", "HINT: You might find it useful to define an additional helper layer similar to those in the file `cs231n/layer_utils.py`. If you decide to do so, do it in the file `cs231n/classifiers/fc_net.py`." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running check with reg = 0\n", "Initial loss: 2.2611955101340957\n", "W1 relative error: 1.10e-04\n", "W2 relative error: 2.85e-06\n", "W3 relative error: 4.05e-10\n", "b1 relative error: 2.78e-09\n", "b2 relative error: 2.22e-08\n", "b3 relative error: 1.01e-10\n", "beta1 relative error: 7.33e-09\n", "beta2 relative error: 1.89e-09\n", "gamma1 relative error: 6.96e-09\n", "gamma2 relative error: 1.96e-09\n", "\n", "Running check with reg = 3.14\n", "Initial loss: 6.996533220108303\n", "W1 relative error: 1.98e-06\n", "W2 relative error: 2.28e-06\n", "W3 relative error: 1.11e-08\n", "b1 relative error: 5.55e-09\n", "b2 relative error: 2.22e-08\n", "b3 relative error: 1.73e-10\n", "beta1 relative error: 6.65e-09\n", "beta2 relative error: 3.48e-09\n", "gamma1 relative error: 8.80e-09\n", "gamma2 relative error: 5.28e-09\n" ] } ], "source": [ "np.random.seed(231)\n", "N, D, H1, H2, C = 2, 15, 20, 30, 10\n", "X = np.random.randn(N, D)\n", "y = np.random.randint(C, size=(N,))\n", "\n", "# You should expect losses between 1e-4~1e-10 for W, \n", "# losses between 1e-08~1e-10 for b,\n", "# and losses between 1e-08~1e-09 for beta and gammas.\n", "for reg in [0, 3.14]:\n", " print('Running check with reg = ', reg)\n", " model = FullyConnectedNet([H1, H2], input_dim=D, num_classes=C,\n", " reg=reg, weight_scale=5e-2, dtype=np.float64,\n", " normalization='batchnorm')\n", "\n", " loss, grads = model.loss(X, y)\n", " print('Initial loss: ', loss)\n", "\n", " for name in sorted(grads):\n", " f = lambda _: model.loss(X, y)[0]\n", " grad_num = eval_numerical_gradient(f, model.params[name], verbose=False, h=1e-5)\n", " print('%s relative error: %.2e' % (name, rel_error(grad_num, grads[name])))\n", " if reg == 0: print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Batchnorm for deep networks\n", "Run the following to train a six-layer network on a subset of 1000 training examples both with and without batch normalization." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Solver with batch norm:\n", "(Iteration 1 / 200) loss: 2.340974\n", "(Epoch 0 / 10) train acc: 0.107000; val_acc: 0.115000\n", "(Epoch 1 / 10) train acc: 0.314000; val_acc: 0.266000\n", "(Iteration 21 / 200) loss: 2.039365\n", "(Epoch 2 / 10) train acc: 0.385000; val_acc: 0.278000\n", "(Iteration 41 / 200) loss: 2.041103\n", "(Epoch 3 / 10) train acc: 0.493000; val_acc: 0.308000\n", "(Iteration 61 / 200) loss: 1.753903\n", "(Epoch 4 / 10) train acc: 0.533000; val_acc: 0.309000\n", "(Iteration 81 / 200) loss: 1.246167\n", "(Epoch 5 / 10) train acc: 0.587000; val_acc: 0.319000\n", "(Iteration 101 / 200) loss: 1.320490\n", "(Epoch 6 / 10) train acc: 0.622000; val_acc: 0.329000\n", "(Iteration 121 / 200) loss: 1.198438\n", "(Epoch 7 / 10) train acc: 0.689000; val_acc: 0.339000\n", "(Iteration 141 / 200) loss: 1.072050\n", "(Epoch 8 / 10) train acc: 0.724000; val_acc: 0.309000\n", "(Iteration 161 / 200) loss: 0.760442\n", "(Epoch 9 / 10) train acc: 0.773000; val_acc: 0.318000\n", "(Iteration 181 / 200) loss: 0.825195\n", "(Epoch 10 / 10) train acc: 0.801000; val_acc: 0.357000\n", "\n", "Solver without batch norm:\n", "(Iteration 1 / 200) loss: 2.302332\n", "(Epoch 0 / 10) train acc: 0.129000; val_acc: 0.131000\n", "(Epoch 1 / 10) train acc: 0.283000; val_acc: 0.250000\n", "(Iteration 21 / 200) loss: 2.041970\n", "(Epoch 2 / 10) train acc: 0.316000; val_acc: 0.277000\n", "(Iteration 41 / 200) loss: 1.900473\n", "(Epoch 3 / 10) train acc: 0.373000; val_acc: 0.282000\n", "(Iteration 61 / 200) loss: 1.713156\n", "(Epoch 4 / 10) train acc: 0.390000; val_acc: 0.310000\n", "(Iteration 81 / 200) loss: 1.662208\n", "(Epoch 5 / 10) train acc: 0.434000; val_acc: 0.300000\n", "(Iteration 101 / 200) loss: 1.696062\n", "(Epoch 6 / 10) train acc: 0.536000; val_acc: 0.346000\n", "(Iteration 121 / 200) loss: 1.550785\n", "(Epoch 7 / 10) train acc: 0.530000; val_acc: 0.310000\n", "(Iteration 141 / 200) loss: 1.436307\n", "(Epoch 8 / 10) train acc: 0.622000; val_acc: 0.342000\n", "(Iteration 161 / 200) loss: 1.000868\n", "(Epoch 9 / 10) train acc: 0.654000; val_acc: 0.328000\n", "(Iteration 181 / 200) loss: 0.925455\n", "(Epoch 10 / 10) train acc: 0.726000; val_acc: 0.335000\n" ] } ], "source": [ "np.random.seed(231)\n", "# Try training a very deep net with batchnorm\n", "hidden_dims = [100, 100, 100, 100, 100]\n", "\n", "num_train = 1000\n", "small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", "}\n", "\n", "weight_scale = 2e-2\n", "bn_model = FullyConnectedNet(hidden_dims, weight_scale=weight_scale, normalization='batchnorm')\n", "model = FullyConnectedNet(hidden_dims, weight_scale=weight_scale, normalization=None)\n", "\n", "print('Solver with batch norm:')\n", "bn_solver = Solver(bn_model, small_data,\n", " num_epochs=10, batch_size=50,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': 1e-3,\n", " },\n", " verbose=True,print_every=20)\n", "bn_solver.train()\n", "\n", "print('\\nSolver without batch norm:')\n", "solver = Solver(model, small_data,\n", " num_epochs=10, batch_size=50,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': 1e-3,\n", " },\n", " verbose=True, print_every=20)\n", "solver.train()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the following to visualize the results from two networks trained above. You should find that using batch normalization helps the network to converge much faster." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "data": { "image/png": "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FrB48WK++MUvkp6ezte+9jU6OjpYuHAh8+fP52tf+9o51XHVVVdx8803s3z5chYsWMANN9wwJO8DERl7hmLc9lh0JuvAWT/7+v75cyswzTnXaGbvAtYBxWf4WO8kZrcDtwMUFBScQVkiInImhmKdnFWrVvGP//iPLF++nOTkZBISEk7qPpmZmcmKFSuYP38+11xzDe9+97sH5dzf/OY3ue2221i4cCFJSUk8/PDDg/K8w2bhBwclsIUqLCxk9+7dJ+3/zne+w3e+852T9m/cuPGkfYmJifzXf/3XSfsvueQSLrnkEsCbefJjH/sY4M1IGaqrxQ3gzjvv5M477zyLVyAiMjTjtsciO9UMYABmthz4pnNujb99D4Bz7nuneMxBYCleiDurxwIsXbrUbd68+cxfhYjIOPLGG2+ctquiyEin97GI9LXi3heo6Ces5aUn8vLdl0Wgosgysy3OuaV9959JF8pNQLGZFZlZHHAj8HSfJ59sfr8ZM1vmP2/1mTxWRERERERkKMZtj0Wn7ULpnOs0szuA9UA08JBzbpeZfca//37gBuCzZtYJtAA3Oq9pr9/HDtFrERGRUei9730vBw4c6LXv+9//PmvWrIlQRSIiEgld3f3vW/8WlbUt5KYnctea2YM+DGC0O20XykhQF0oRkYG98cYbzJkz56Rp40VGC+ccb775prpQioicQjhdKEVEZARJSEigurq63+n0RUY65xzV1dUkJCREuhQRkVHpTGahFBGRESQ/P5/y8nKOHz8e6VJEzklCQgL5+eEvXi4iMh4pwImIjDKxsbEUFRVFugwRERGJAHWhFBERERERGSUU4EREREREREYJBTgREREREZFRYkQuI2Bmx4FDka6jH1lAVaSLGKd07SNL1z9ydO0jS9c/snT9I0fXPrJ0/SNnJF37ac657L47R2SAG6nMbHN/azHI0NO1jyxd/8jRtY8sXf/I0vWPHF37yNL1j5zRcO3VhVJERERERGSUUIATEREREREZJRTgzs4DkS5gHNO1jyxd/8jRtY8sXf/I0vWPHF37yNL1j5wRf+01Bk5ERERERGSUUAuciIiIiIjIKKEAJyIiIiIiMkoowJ0BM7vazN4ys71mdnek6xnrzGyqmb1oZm+Y2S4zu9Pf/00zqzCz7f7PuyJd61hkZgfNbId/jTf7+yaa2R/NrNT/NyPSdY5F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AG+NVmRkZOXPT506lU6dOtGpUyeio6M588wzARg2bBgrV66s1+s/pMONlD081D99sproJLj67QY9dfWRTDPjpptuIi0tjaSkJGbNmkVRUREAb7/9NgsXLmT+/Pn84Q9/YM2aNTjneO211xg8eHCV61QEs5qEhx9o2FUxPdM5x5133sn111/foNcjIiI10wjcYVRfP5JfVEaoGReMTlR4E5Fm7/bpg4ms1lgpMiyU26cPruUnDi8sLIzk5GSefvppJkyYwKRJk/jkk0/YuHEjxxxzzCF/NvADf2ho6GHXqlWcH3huRVAIVBFeoqKian2+kJCQyvshISHBWSd34l0QFln1WFikd7yBtm7dyldffQXAiy++WBmMY2NjKSgoqFyj5vP52LZtG1OnTuWBBx4gNzeXgoICpk+fzv/+7/9W/n6XLVtWrzqmT5/OU089RUFBAQAZGRlkZWU19OWJiIhfgwKcmZ1qZuvMbIOZHdSWysyGmNlXZlZsZr9uyHMFy4Pvr6OwtLzKsXLnePgjTQcRkeZvxogE7jt3GAkxkRjeyNt95w5jxoiEBl138uTJPPTQQ0yePJlJkybx+OOPk5qaWmUUqFOnTuTn5zfwFdT83M8//zzgdbaMjY2lc+fOjf48TaKGafmc+ah3vIGOOeYYnn32WVJSUti9ezc33ngj1113HcOGDWPGjBmMGTMGgPLyci677DKGDRvGiBEj+OUvf0lMTAy/+93vKC0tJSUlhaFDh/K73/2uXnWccsopXHLJJYwfP55hw4Zx3nnnNcn7QESkrar3FEozCwX+BpwMpANLzGy+c+67gNN2A7cAMxpUZRBl1jD16FDHRUSamxkjEhoc2KqbNGkSf/zjHxk/fjxRUVFERERUWf8G0K1bNyZOnMjQoUM57bTTOP300xvluWfNmsXVV19NSkoKHTp04Nlna2n+0VylXNAogS1QcnIy33333UHH7733Xu69996Dji9atOigY5GRkTzxxBMHHZ8yZQpTpkwBvM6TV111FeB1pAxUMeIGcOutt3LrrbcewSsQEZG6spqmotTpB83GA7Occ9P99+8EcM4dtPjBzGYBBc65h+py7dGjR7u0tLR61dXYDrV+5Is7pgWhIhFp677//vvDTlUUae70PhYROTQzW+qcG139eEOmUCYAgSux0/3H6sXMZppZmpml7dq1qwFlNa6m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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot_training_history(title, label, baseline, bn_solvers, plot_fn, bl_marker='.', bn_marker='.', labels=None):\n", " \"\"\"utility function for plotting training history\"\"\"\n", " plt.title(title)\n", " plt.xlabel(label)\n", " bn_plots = [plot_fn(bn_solver) for bn_solver in bn_solvers]\n", " bl_plot = plot_fn(baseline)\n", " num_bn = len(bn_plots)\n", " for i in range(num_bn):\n", " label='with_norm'\n", " if labels is not None:\n", " label += str(labels[i])\n", " plt.plot(bn_plots[i], bn_marker, label=label)\n", " label='baseline'\n", " if labels is not None:\n", " label += str(labels[0])\n", " plt.plot(bl_plot, bl_marker, label=label)\n", " plt.legend(loc='lower center', ncol=num_bn+1) \n", "\n", " \n", "plt.subplot(3, 1, 1)\n", "plot_training_history('Training loss','Iteration', solver, [bn_solver], \\\n", " lambda x: x.loss_history, bl_marker='o', bn_marker='o')\n", "plt.subplot(3, 1, 2)\n", "plot_training_history('Training accuracy','Epoch', solver, [bn_solver], \\\n", " lambda x: x.train_acc_history, bl_marker='-o', bn_marker='-o')\n", "plt.subplot(3, 1, 3)\n", "plot_training_history('Validation accuracy','Epoch', solver, [bn_solver], \\\n", " lambda x: x.val_acc_history, bl_marker='-o', bn_marker='-o')\n", "\n", "plt.gcf().set_size_inches(15, 15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Batch normalization and initialization\n", "We will now run a small experiment to study the interaction of batch normalization and weight initialization.\n", "\n", "The first cell will train 8-layer networks both with and without batch normalization using different scales for weight initialization. The second layer will plot training accuracy, validation set accuracy, and training loss as a function of the weight initialization scale." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running weight scale 1 / 20\n", "Running weight scale 2 / 20\n", "Running weight scale 3 / 20\n", "Running weight scale 4 / 20\n", "Running weight scale 5 / 20\n", "Running weight scale 6 / 20\n", "Running weight scale 7 / 20\n", "Running weight scale 8 / 20\n", "Running weight scale 9 / 20\n", "Running weight scale 10 / 20\n", "Running weight scale 11 / 20\n", "Running weight scale 12 / 20\n", "Running weight scale 13 / 20\n", "Running weight scale 14 / 20\n", "Running weight scale 15 / 20\n", "Running weight scale 16 / 20\n", "Running weight scale 17 / 20\n", "Running weight scale 18 / 20\n", "Running weight scale 19 / 20\n", "Running weight scale 20 / 20\n" ] } ], "source": [ "np.random.seed(231)\n", "# Try training a very deep net with batchnorm\n", "hidden_dims = [50, 50, 50, 50, 50, 50, 50]\n", "num_train = 1000\n", "small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", "}\n", "\n", "bn_solvers_ws = {}\n", "solvers_ws = {}\n", "weight_scales = np.logspace(-4, 0, num=20)\n", "for i, weight_scale in enumerate(weight_scales):\n", " print('Running weight scale %d / %d' % (i + 1, len(weight_scales)))\n", " bn_model = FullyConnectedNet(hidden_dims, weight_scale=weight_scale, normalization='batchnorm')\n", " model = FullyConnectedNet(hidden_dims, weight_scale=weight_scale, normalization=None)\n", "\n", " bn_solver = Solver(bn_model, small_data,\n", " num_epochs=10, batch_size=50,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': 1e-3,\n", " },\n", " verbose=False, print_every=200)\n", " bn_solver.train()\n", " bn_solvers_ws[weight_scale] = bn_solver\n", "\n", " solver = Solver(model, small_data,\n", " num_epochs=10, batch_size=50,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': 1e-3,\n", " },\n", " verbose=False, print_every=200)\n", " solver.train()\n", " solvers_ws[weight_scale] = solver" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "data": { "image/png": "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PCTL7bAa5KKLLuKiiy5yOwwRERGRJhGYksKjpkKRBlFLYQO8vqSIKbNXUFRchgWKisuYMnsFry8pavS5Kysrufbaaxk0aBATJkzg4MGDPPjggwwfPpwBAwZw4403EpiG8fHHH6d///4MGjSIK6+8EoADBw5www03MHz4cIYMGcKcOXPqXGPatGncfvvtAFx33XXceeedjBo1il69evHKK69U7ffII48wfPhwBg0axH333dfo9yYiIiLiBk1JIXJs1FIIPPDGKlZv3Vfv9iVbijns9dVYV1bh5RevLGfmoi0hj+nfNZ37Ljz5qNdet24dzzzzDKNHj+aGG25g6tSp3H777dx7770ATJo0iXnz5nHhhRfy0EMP8c0335CUlERxcTEAf/jDHzjrrLP417/+RXFxMaeeeipnn332Ea+5bds25s+fz9q1a7nooouYMGEC7777Ll999RWLFi3CWstFF13Ep59+yhlnnHHU9yAiIiISTXwqHxU5JmopbIDaCeHR1h+LnJwcRo8eDcDEiROZP38+H330EaeddhoDBw7kww8/ZNWqVQAMGjSIq6++mueee474eCeff/fdd3nooYcYPHgwZ555JuXl5WzZEjpRDbj44ouJi4ujf//+bN++veo87777LkOGDGHo0KGsXbuWr776qtHvT0RERKSpqXxU5NiopRCO2qI3+qEPKSouq7M+KzOFF28a2ahr1/4GyxjDrbfeSl5eHjk5Odx///1Vc/29+eabfPrpp8ydO5ff/e53rFq1Cmstr776Kn369KlxnkCyF0pSUlLV80BpqrWWKVOmcNNNNzXq/YiIiIi4TeWjIsdGLYUNMHlcH1ISPDXWpSR4mDyuTz1HNNyWLVtYsGABADNnzuT0008HoH379uzfv7+qz5/P56OgoIAxY8bw8MMPU1xczP79+xk3bhxPPPFEVXK3ZMmS44pj3Lhx/Otf/2L//v0AFBUVsWPHjsa+PREREZEmp8nrRY6NWgobIDDKaCRGH+3Xrx/Tp0/npptuonfv3txyyy3s3buXgQMH0qNHD4YPHw6A1+tl4sSJlJSUYK3lpz/9KZmZmfz2t7/l7rvvZtCgQVhr6dGjB/PmzTvmOM455xzWrFnDyJFOy2fr1q157rnn6NixY6Pfo4iIiEhTCkxer6RQpGFMoIUpluXm5tq8vLwa69asWUO/fv1ciqjl0OcsIiIiTe2tFdu49fnF/Ofu79C3c7rb4YhEBWNMvrU2N9Q2lY+KiIiISEwJlI961FIo0iBKCkVEREQkpgQGmtGUFCINo6RQRERERGKKpqQQOTZKCkVEREQkplSPPupyICLNhJJCEREREYkp1fMUKisUaQglhSIiIiISUwLlo3FqKhRpECWFLtq0aRMDBgxo8P7Tpk1j69atR93n9ttvb2xoIiIiIs2WV+WjIsdESWFDLX8J/joA7s90Hpe/1OQhNCQpjJTKykpXrisiIiJyrKr7FCorlCYUBfnC8Yp3O4BmYflL8MadUFHmvC4pcF4DDLqiUaeurKzk2muvZcmSJZx00knMmDGDP//5z7zxxhuUlZUxatQonn76aV599VXy8vK4+uqrSUlJYcGCBaxcuZK77rqLAwcOkJSUxAcffADA1q1bOffcc9mwYQOXXHIJDz/8MACtW7fmrrvuYt68eaSkpDBnzhw6derE5s2bueGGG9i5cycdOnTg3//+N926deO6666jbdu2LFmyhKFDh5KWlsY333zDtm3bWL9+PX/5y19YuHAhb7/9NllZWbzxxhskJCQ06vMQERERaSxfoHxUSaE0lQjmC01BLYUAb/8S/v39+pc5t1f/gAMqypz19R3z9i8bdOl169Zx4403snz5ctLT05k6dSq33347X375JStXrqSsrIx58+YxYcIEcnNzef7551m6dCkej4cf/OAHPPbYYyxbtoz333+flJQUAJYuXcqLL77IihUrePHFFykoKADgwIEDjBgxgmXLlnHGGWfwz3/+E4Dbb7+da665huXLl3P11Vdz5513VsW3fv163n//fR599FEANmzYwJtvvsmcOXOYOHEiY8aMYcWKFaSkpPDmm2829ichIiIi0mg+n8pHpYl98GDofOGDB92J5xgpKWwI76FjW38McnJyGD16NAATJ05k/vz5fPTRR5x22mkMHDiQDz/8kFWrVtU5bt26dXTp0oXhw4cDkJ6eTny80/A7duxYMjIySE5Opn///mzevBmAxMRELrjgAgCGDRvGpk2bAFiwYAFXXXUVAJMmTWL+/PlV17n88svxeDxVr8877zwSEhIYOHAgXq+Xc889F4CBAwdWnU9ERETETYHyUc1TKE2mpPDY1kcZlY8CnPfQkbf/dYDTBFxbRg5c37jWMVOrrMEYw6233kpeXh45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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot results of weight scale experiment\n", "best_train_accs, bn_best_train_accs = [], []\n", "best_val_accs, bn_best_val_accs = [], []\n", "final_train_loss, bn_final_train_loss = [], []\n", "\n", "for ws in weight_scales:\n", " best_train_accs.append(max(solvers_ws[ws].train_acc_history))\n", " bn_best_train_accs.append(max(bn_solvers_ws[ws].train_acc_history))\n", " \n", " best_val_accs.append(max(solvers_ws[ws].val_acc_history))\n", " bn_best_val_accs.append(max(bn_solvers_ws[ws].val_acc_history))\n", " \n", " final_train_loss.append(np.mean(solvers_ws[ws].loss_history[-100:]))\n", " bn_final_train_loss.append(np.mean(bn_solvers_ws[ws].loss_history[-100:]))\n", " \n", "plt.subplot(3, 1, 1)\n", "plt.title('Best val accuracy vs weight initialization scale')\n", "plt.xlabel('Weight initialization scale')\n", "plt.ylabel('Best val accuracy')\n", "plt.semilogx(weight_scales, best_val_accs, '-o', label='baseline')\n", "plt.semilogx(weight_scales, bn_best_val_accs, '-o', label='batchnorm')\n", "plt.legend(ncol=2, loc='lower right')\n", "\n", "plt.subplot(3, 1, 2)\n", "plt.title('Best train accuracy vs weight initialization scale')\n", "plt.xlabel('Weight initialization scale')\n", "plt.ylabel('Best training accuracy')\n", "plt.semilogx(weight_scales, best_train_accs, '-o', label='baseline')\n", "plt.semilogx(weight_scales, bn_best_train_accs, '-o', label='batchnorm')\n", "plt.legend()\n", "\n", "plt.subplot(3, 1, 3)\n", "plt.title('Final training loss vs weight initialization scale')\n", "plt.xlabel('Weight initialization scale')\n", "plt.ylabel('Final training loss')\n", "plt.semilogx(weight_scales, final_train_loss, '-o', label='baseline')\n", "plt.semilogx(weight_scales, bn_final_train_loss, '-o', label='batchnorm')\n", "plt.legend()\n", "plt.gca().set_ylim(1.0, 3.5)\n", "\n", "plt.gcf().set_size_inches(15, 15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 1:\n", "Describe the results of this experiment. How does the scale of weight initialization affect models with/without batch normalization differently, and why?\n", "\n", "## Answer:\n", "[FILL THIS IN]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Batch normalization and batch size\n", "We will now run a small experiment to study the interaction of batch normalization and batch size.\n", "\n", "The first cell will train 6-layer networks both with and without batch normalization using different batch sizes. The second layer will plot training accuracy and validation set accuracy over time." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No normalization: batch size = 5\n", "Normalization: batch size = 5\n", "Normalization: batch size = 10\n", "Normalization: batch size = 50\n" ] } ], "source": [ "def run_batchsize_experiments(normalization_mode):\n", " np.random.seed(231)\n", " # Try training a very deep net with batchnorm\n", " hidden_dims = [100, 100, 100, 100, 100]\n", " num_train = 1000\n", " small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", " }\n", " n_epochs=10\n", " weight_scale = 2e-2\n", " batch_sizes = [5,10,50]\n", " lr = 10**(-3.5)\n", " solver_bsize = batch_sizes[0]\n", "\n", " print('No normalization: batch size = ',solver_bsize)\n", " model = FullyConnectedNet(hidden_dims, weight_scale=weight_scale, normalization=None)\n", " solver = Solver(model, small_data,\n", " num_epochs=n_epochs, batch_size=solver_bsize,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': lr,\n", " },\n", " verbose=False)\n", " solver.train()\n", " \n", " bn_solvers = []\n", " for i in range(len(batch_sizes)):\n", " b_size=batch_sizes[i]\n", " print('Normalization: batch size = ',b_size)\n", " bn_model = FullyConnectedNet(hidden_dims, weight_scale=weight_scale, normalization=normalization_mode)\n", " bn_solver = Solver(bn_model, small_data,\n", " num_epochs=n_epochs, batch_size=b_size,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': lr,\n", " },\n", " verbose=False)\n", " bn_solver.train()\n", " bn_solvers.append(bn_solver)\n", " \n", " return bn_solvers, solver, batch_sizes\n", "\n", "batch_sizes = [5,10,50]\n", "bn_solvers_bsize, solver_bsize, batch_sizes = run_batchsize_experiments('batchnorm')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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2bKysng3Q0REREREJC7279/fYq0dsfzPhAKcOzl+B+AFvmWtfSJmfw7wbZzS1f3Ae6y1xy533rKyMmpqaibSNBERERERkRnLGHN2tO3XPITSLUf9VeANQAXwNmNMRcxhfwkcstZWAu/ECXsiIiIiIiJyDSYyB64aeMVae8paOwh8D7g/5pgKnIVdsdaeBMrctXdERERERETkKk0kwC0Ezkc8rnO3RToMPABgjKkGFgHFo53MGPOoMabGGFPT3Nw8gWaJiIiIiIjMThMJcGaUbbFrEjwB5BhjDgEfxVlgNTDayay137TWVllrq/LzR8zVExERERERmfMmUsSkDiiJeFwMXIw8wFrbBbwbwBhjgNPuTURERERERK7SRHrg9gFLjTHlxhgf8DDwVOQBxphsdx/A+4DfuKFORERERERErtI198BZawPGmI8Az+AsI/Bta22tMeYD7v5vACuB7xpjgsBx4L3Xoc0iIiIiIiITsvPUTnYc2EFDTwNFaUVs27CNexbfE+9mXdaE1oGz1j4NPB2z7RsRP78ALJ3INURERERERK6nnad2sv357fQH+wGo76ln+/PbAaZ9iJvIEEoREREREZEZ5x8O/EM4vA3pD/az48D0X7Z6Qj1wIiIiIiIi05G1lrb+Ns50neF05+nw7UzXGRp6GkZ9zljbpxMFOBERERERmbH8IT91l+pGhLTTnafpGhyun5jkTWJR5iIqcito72+n29894lxFaUVT2fRrogAnIiIiIiLTXudA54iAdrrzNHWX6gjY4aWm81LyKM8q566yuyjLKqM8q5zyrHLmp83HY5wZZLFz4ACSvcls27Btyl/X1VKAExERERGRaSEYCnKx+yKnu06P6FFr628LH5fgSWBRxiKWZC/h9kW3OyEts5yyrDIyfBmXvc5QoZKZWIXSWGvj3YYRqqqqbE1NTbybISIiIiIik6DH38OZzjOc6jwV1aN2ruscg6HB8HE5STmUZznBrDyzPPzzwvSFJHhmd1+UMWa/tbYqdvvsftUiIiIiIhIXIRuisafR6UVze9TOdDpBramvKXyc13gpySihLLOM1y58bTiklWWWkZOcE8dXMD0pwImIiIiIyDXrC/RxtutsVEA73eX8HDnHLCMxg/KscrYs2BIe8lieVU5JRgmJ3sQ4voKZRQFORERERETGZa2lua85KqANBbaLPRfD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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.subplot(2, 1, 1)\n", "plot_training_history('Training accuracy (Batch Normalization)','Epoch', solver_bsize, bn_solvers_bsize, \\\n", " lambda x: x.train_acc_history, bl_marker='-^', bn_marker='-o', labels=batch_sizes)\n", "plt.subplot(2, 1, 2)\n", "plot_training_history('Validation accuracy (Batch Normalization)','Epoch', solver_bsize, bn_solvers_bsize, \\\n", " lambda x: x.val_acc_history, bl_marker='-^', bn_marker='-o', labels=batch_sizes)\n", "\n", "plt.gcf().set_size_inches(15, 10)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 2:\n", "Describe the results of this experiment. What does this imply about the relationship between batch normalization and batch size? Why is this relationship observed?\n", "\n", "## Answer:\n", "[FILL THIS IN]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Layer Normalization\n", "Batch normalization has proved to be effective in making networks easier to train, but the dependency on batch size makes it less useful in complex networks which have a cap on the input batch size due to hardware limitations. \n", "\n", "Several alternatives to batch normalization have been proposed to mitigate this problem; one such technique is Layer Normalization [2]. Instead of normalizing over the batch, we normalize over the features. In other words, when using Layer Normalization, each feature vector corresponding to a single datapoint is normalized based on the sum of all terms within that feature vector.\n", "\n", "[2] [Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. \"Layer Normalization.\" stat 1050 (2016): 21.](https://arxiv.org/pdf/1607.06450.pdf)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 3:\n", "Which of these data preprocessing steps is analogous to batch normalization, and which is analogous to layer normalization?\n", "\n", "1. Scaling each image in the dataset, so that the RGB channels for each row of pixels within an image sums up to 1.\n", "2. Scaling each image in the dataset, so that the RGB channels for all pixels within an image sums up to 1. \n", "3. Subtracting the mean image of the dataset from each image in the dataset.\n", "4. Setting all RGB values to either 0 or 1 depending on a given threshold.\n", "\n", "## Answer:\n", "BatchNorm: 3;\n", "LayerNorm: 1,2,4\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Layer Normalization: Implementation\n", "\n", "Now you'll implement layer normalization. This step should be relatively straightforward, as conceptually the implementation is almost identical to that of batch normalization. One significant difference though is that for layer normalization, we do not keep track of the moving moments, and the testing phase is identical to the training phase, where the mean and variance are directly calculated per datapoint.\n", "\n", "Here's what you need to do:\n", "\n", "* In `cs231n/layers.py`, implement the forward pass for layer normalization in the function `layernorm_backward`. \n", "\n", "Run the cell below to check your results.\n", "* In `cs231n/layers.py`, implement the backward pass for layer normalization in the function `layernorm_backward`. \n", "\n", "Run the second cell below to check your results.\n", "* Modify `cs231n/classifiers/fc_net.py` to add layer normalization to the `FullyConnectedNet`. When the `normalization` flag is set to `\"layernorm\"` in the constructor, you should insert a layer normalization layer before each ReLU nonlinearity. \n", "\n", "Run the third cell below to run the batch size experiment on layer normalization." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Before layer normalization:\n", " means: [-59.06673243 -47.60782686 -43.31137368 -26.40991744]\n", " stds: [10.07429373 28.39478981 35.28360729 4.01831507]\n", "\n", "After layer normalization (gamma=1, beta=0)\n", " means: [ 4.81096644e-16 -7.40148683e-17 2.22044605e-16 -5.92118946e-16]\n", " stds: [0.99999995 0.99999999 1. 0.99999969]\n", "\n", "After layer normalization (gamma= [3. 3. 3.] , beta= [5. 5. 5.] )\n", " means: [5. 5. 5. 5.]\n", " stds: [2.99999985 2.99999998 2.99999999 2.99999907]\n", "\n" ] } ], "source": [ "# Check the training-time forward pass by checking means and variances\n", "# of features both before and after layer normalization \n", "\n", "# Simulate the forward pass for a two-layer network\n", "np.random.seed(231)\n", "N, D1, D2, D3 =4, 50, 60, 3\n", "X = np.random.randn(N, D1)\n", "W1 = np.random.randn(D1, D2)\n", "W2 = np.random.randn(D2, D3)\n", "a = np.maximum(0, X.dot(W1)).dot(W2)\n", "\n", "print('Before layer normalization:')\n", "print_mean_std(a,axis=1)\n", "\n", "gamma = np.ones(D3)\n", "beta = np.zeros(D3)\n", "# Means should be close to zero and stds close to one\n", "print('After layer normalization (gamma=1, beta=0)')\n", "a_norm, _ = layernorm_forward(a, gamma, beta, {'mode': 'train'})\n", "print_mean_std(a_norm,axis=1)\n", "\n", "gamma = np.asarray([3.0,3.0,3.0])\n", "beta = np.asarray([5.0,5.0,5.0])\n", "# Now means should be close to beta and stds close to gamma\n", "print('After layer normalization (gamma=', gamma, ', beta=', beta, ')')\n", "a_norm, _ = layernorm_forward(a, gamma, beta, {'mode': 'train'})\n", "print_mean_std(a_norm,axis=1)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx error: 1.4336157856136745e-09\n", "dgamma error: 4.519489546032799e-12\n", "dbeta error: 2.276445013433725e-12\n" ] } ], "source": [ "# Gradient check batchnorm backward pass\n", "np.random.seed(231)\n", "N, D = 4, 5\n", "x = 5 * np.random.randn(N, D) + 12\n", "gamma = np.random.randn(D)\n", "beta = np.random.randn(D)\n", "dout = np.random.randn(N, D)\n", "\n", "ln_param = {}\n", "fx = lambda x: layernorm_forward(x, gamma, beta, ln_param)[0]\n", "fg = lambda a: layernorm_forward(x, a, beta, ln_param)[0]\n", "fb = lambda b: layernorm_forward(x, gamma, b, ln_param)[0]\n", "\n", "dx_num = eval_numerical_gradient_array(fx, x, dout)\n", "da_num = eval_numerical_gradient_array(fg, gamma.copy(), dout)\n", "db_num = eval_numerical_gradient_array(fb, beta.copy(), dout)\n", "\n", "_, cache = layernorm_forward(x, gamma, beta, ln_param)\n", "dx, dgamma, dbeta = layernorm_backward(dout, cache)\n", "\n", "#You should expect to see relative errors between 1e-12 and 1e-8\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dgamma error: ', rel_error(da_num, dgamma))\n", "print('dbeta error: ', rel_error(db_num, dbeta))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Layer Normalization and batch size\n", "\n", "We will now run the previous batch size experiment with layer normalization instead of batch normalization. Compared to the previous experiment, you should see a markedly smaller influence of batch size on the training history!" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "No normalization: batch size = 5\n", "Normalization: batch size = 5\n", "Normalization: batch size = 10\n", "Normalization: batch size = 50\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ln_solvers_bsize, solver_bsize, batch_sizes = run_batchsize_experiments('layernorm')\n", "\n", "plt.subplot(2, 1, 1)\n", "plot_training_history('Training accuracy (Layer Normalization)','Epoch', solver_bsize, ln_solvers_bsize, \\\n", " lambda x: x.train_acc_history, bl_marker='-^', bn_marker='-o', labels=batch_sizes)\n", "plt.subplot(2, 1, 2)\n", "plot_training_history('Validation accuracy (Layer Normalization)','Epoch', solver_bsize, ln_solvers_bsize, \\\n", " lambda x: x.val_acc_history, bl_marker='-^', bn_marker='-o', labels=batch_sizes)\n", "\n", "plt.gcf().set_size_inches(15, 10)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 4:\n", "When is layer normalization likely to not work well, and why?\n", "\n", "1. Using it in a very deep network\n", "2. Having a very small dimension of features\n", "3. Having a high regularization term\n", "\n", "\n", "## Answer:\n", "[2]\n" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: assignment2/ConvolutionalNetworks.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Convolutional Networks\n", "So far we have worked with deep fully-connected networks, using them to explore different optimization strategies and network architectures. Fully-connected networks are a good testbed for experimentation because they are very computationally efficient, but in practice all state-of-the-art results use convolutional networks instead.\n", "\n", "First you will implement several layer types that are used in convolutional networks. You will then use these layers to train a convolutional network on the CIFAR-10 dataset." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "# As usual, a bit of setup\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from cs231n.classifiers.cnn import *\n", "from cs231n.data_utils import get_CIFAR10_data\n", "from cs231n.gradient_check import eval_numerical_gradient_array, eval_numerical_gradient\n", "from cs231n.layers import *\n", "from cs231n.fast_layers import *\n", "from cs231n.solver import Solver\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading external modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "def rel_error(x, y):\n", " \"\"\" returns relative error \"\"\"\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_train: (49000, 3, 32, 32)\n", "y_train: (49000,)\n", "X_val: (1000, 3, 32, 32)\n", "y_val: (1000,)\n", "X_test: (1000, 3, 32, 32)\n", "y_test: (1000,)\n" ] } ], "source": [ "# Load the (preprocessed) CIFAR10 data.\n", "\n", "data = get_CIFAR10_data()\n", "for k, v in data.items():\n", " print('%s: ' % k, v.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Convolution: Naive forward pass\n", "The core of a convolutional network is the convolution operation. In the file `cs231n/layers.py`, implement the forward pass for the convolution layer in the function `conv_forward_naive`. \n", "\n", "You don't have to worry too much about efficiency at this point; just write the code in whatever way you find most clear.\n", "\n", "You can test your implementation by running the following:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing conv_forward_naive\n", "difference: 2.2121476417505994e-08\n" ] } ], "source": [ "x_shape = (2, 3, 4, 4)\n", "w_shape = (3, 3, 4, 4)\n", "x = np.linspace(-0.1, 0.5, num=np.prod(x_shape)).reshape(x_shape)\n", "w = np.linspace(-0.2, 0.3, num=np.prod(w_shape)).reshape(w_shape)\n", "b = np.linspace(-0.1, 0.2, num=3)\n", "\n", "conv_param = {'stride': 2, 'pad': 1}\n", "out, _ = conv_forward_naive(x, w, b, conv_param)\n", "correct_out = np.array([[[[-0.08759809, -0.10987781],\n", " [-0.18387192, -0.2109216 ]],\n", " [[ 0.21027089, 0.21661097],\n", " [ 0.22847626, 0.23004637]],\n", " [[ 0.50813986, 0.54309974],\n", " [ 0.64082444, 0.67101435]]],\n", " [[[-0.98053589, -1.03143541],\n", " [-1.19128892, -1.24695841]],\n", " [[ 0.69108355, 0.66880383],\n", " [ 0.59480972, 0.56776003]],\n", " [[ 2.36270298, 2.36904306],\n", " [ 2.38090835, 2.38247847]]]])\n", "\n", "# Compare your output to ours; difference should be around e-8\n", "print('Testing conv_forward_naive')\n", "print('difference: ', rel_error(out, correct_out))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Aside: Image processing via convolutions\n", "\n", "As fun way to both check your implementation and gain a better understanding of the type of operation that convolutional layers can perform, we will set up an input containing two images and manually set up filters that perform common image processing operations (grayscale conversion and edge detection). The convolution forward pass will apply these operations to each of the input images. We can then visualize the results as a sanity check." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from imageio import imread\n", "from PIL import Image\n", "\n", "kitten = imread('notebook_images/kitten.jpg')\n", "puppy = imread('notebook_images/puppy.jpg')\n", "# kitten is wide, and puppy is already square\n", "d = kitten.shape[1] - kitten.shape[0]\n", "kitten_cropped = kitten[:, d//2:-d//2, :]\n", "\n", "img_size = 200 # Make this smaller if it runs too slow\n", "resized_puppy = np.array(Image.fromarray(puppy).resize((img_size, img_size)))\n", "resized_kitten = np.array(Image.fromarray(kitten_cropped).resize((img_size, img_size)))\n", "x = np.zeros((2, 3, img_size, img_size))\n", "x[0, :, :, :] = resized_puppy.transpose((2, 0, 1))\n", "x[1, :, :, :] = resized_kitten.transpose((2, 0, 1))\n", "\n", "# Set up a convolutional weights holding 2 filters, each 3x3\n", "w = np.zeros((2, 3, 3, 3))\n", "\n", "# The first filter converts the image to grayscale.\n", "# Set up the red, green, and blue channels of the filter.\n", "w[0, 0, :, :] = [[0, 0, 0], [0, 0.3, 0], [0, 0, 0]]\n", "w[0, 1, :, :] = [[0, 0, 0], [0, 0.6, 0], [0, 0, 0]]\n", "w[0, 2, :, :] = [[0, 0, 0], [0, 0.1, 0], [0, 0, 0]]\n", "\n", "# Second filter detects horizontal edges in the blue channel.\n", "w[1, 2, :, :] = [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]\n", "\n", "# Vector of biases. We don't need any bias for the grayscale\n", "# filter, but for the edge detection filter we want to add 128\n", "# to each output so that nothing is negative.\n", "b = np.array([0, 128])\n", "\n", "# Compute the result of convolving each input in x with each filter in w,\n", "# offsetting by b, and storing the results in out.\n", "out, _ = conv_forward_naive(x, w, b, {'stride': 1, 'pad': 1})\n", "\n", "def imshow_no_ax(img, normalize=True):\n", " \"\"\" Tiny helper to show images as uint8 and remove axis labels \"\"\"\n", " if normalize:\n", " img_max, img_min = np.max(img), np.min(img)\n", " img = 255.0 * (img - img_min) / (img_max - img_min)\n", " plt.imshow(img.astype('uint8'))\n", " plt.gca().axis('off')\n", "\n", "# Show the original images and the results of the conv operation\n", "plt.subplot(2, 3, 1)\n", "imshow_no_ax(puppy, normalize=False)\n", "plt.title('Original image')\n", "plt.subplot(2, 3, 2)\n", "imshow_no_ax(out[0, 0])\n", "plt.title('Grayscale')\n", "plt.subplot(2, 3, 3)\n", "imshow_no_ax(out[0, 1])\n", "plt.title('Edges')\n", "plt.subplot(2, 3, 4)\n", "imshow_no_ax(kitten_cropped, normalize=False)\n", "plt.subplot(2, 3, 5)\n", "imshow_no_ax(out[1, 0])\n", "plt.subplot(2, 3, 6)\n", "imshow_no_ax(out[1, 1])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Convolution: Naive backward pass\n", "Implement the backward pass for the convolution operation in the function `conv_backward_naive` in the file `cs231n/layers.py`. Again, you don't need to worry too much about computational efficiency.\n", "\n", "When you are done, run the following to check your backward pass with a numeric gradient check." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing conv_backward_naive function\n", "dx error: 1.159803161159293e-08\n", "dw error: 2.247109434939654e-10\n", "db error: 3.37264006649648e-11\n" ] } ], "source": [ "np.random.seed(231)\n", "x = np.random.randn(4, 3, 5, 5)\n", "w = np.random.randn(2, 3, 3, 3)\n", "b = np.random.randn(2,)\n", "dout = np.random.randn(4, 2, 5, 5)\n", "conv_param = {'stride': 1, 'pad': 1}\n", "\n", "dx_num = eval_numerical_gradient_array(lambda x: conv_forward_naive(x, w, b, conv_param)[0], x, dout)\n", "dw_num = eval_numerical_gradient_array(lambda w: conv_forward_naive(x, w, b, conv_param)[0], w, dout)\n", "db_num = eval_numerical_gradient_array(lambda b: conv_forward_naive(x, w, b, conv_param)[0], b, dout)\n", "\n", "out, cache = conv_forward_naive(x, w, b, conv_param)\n", "dx, dw, db = conv_backward_naive(dout, cache)\n", "\n", "# Your errors should be around e-8 or less.\n", "print('Testing conv_backward_naive function')\n", "print('dx error: ', rel_error(dx, dx_num))\n", "print('dw error: ', rel_error(dw, dw_num))\n", "print('db error: ', rel_error(db, db_num))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Max-Pooling: Naive forward\n", "Implement the forward pass for the max-pooling operation in the function `max_pool_forward_naive` in the file `cs231n/layers.py`. Again, don't worry too much about computational efficiency.\n", "\n", "Check your implementation by running the following:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing max_pool_forward_naive function:\n", "difference: 4.1666665157267834e-08\n" ] } ], "source": [ "x_shape = (2, 3, 4, 4)\n", "x = np.linspace(-0.3, 0.4, num=np.prod(x_shape)).reshape(x_shape)\n", "pool_param = {'pool_width': 2, 'pool_height': 2, 'stride': 2}\n", "\n", "out, _ = max_pool_forward_naive(x, pool_param)\n", "\n", "correct_out = np.array([[[[-0.26315789, -0.24842105],\n", " [-0.20421053, -0.18947368]],\n", " [[-0.14526316, -0.13052632],\n", " [-0.08631579, -0.07157895]],\n", " [[-0.02736842, -0.01263158],\n", " [ 0.03157895, 0.04631579]]],\n", " [[[ 0.09052632, 0.10526316],\n", " [ 0.14947368, 0.16421053]],\n", " [[ 0.20842105, 0.22315789],\n", " [ 0.26736842, 0.28210526]],\n", " [[ 0.32631579, 0.34105263],\n", " [ 0.38526316, 0.4 ]]]])\n", "\n", "# Compare your output with ours. Difference should be on the order of e-8.\n", "print('Testing max_pool_forward_naive function:')\n", "print('difference: ', rel_error(out, correct_out))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Max-Pooling: Naive backward\n", "Implement the backward pass for the max-pooling operation in the function `max_pool_backward_naive` in the file `cs231n/layers.py`. You don't need to worry about computational efficiency.\n", "\n", "Check your implementation with numeric gradient checking by running the following:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing max_pool_backward_naive function:\n", "dx error: 3.27562514223145e-12\n" ] } ], "source": [ "np.random.seed(231)\n", "x = np.random.randn(3, 2, 8, 8)\n", "dout = np.random.randn(3, 2, 4, 4)\n", "pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2}\n", "\n", "dx_num = eval_numerical_gradient_array(lambda x: max_pool_forward_naive(x, pool_param)[0], x, dout)\n", "\n", "out, cache = max_pool_forward_naive(x, pool_param)\n", "dx = max_pool_backward_naive(dout, cache)\n", "\n", "# Your error should be on the order of e-12\n", "print('Testing max_pool_backward_naive function:')\n", "print('dx error: ', rel_error(dx, dx_num))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fast layers\n", "Making convolution and pooling layers fast can be challenging. To spare you the pain, we've provided fast implementations of the forward and backward passes for convolution and pooling layers in the file `cs231n/fast_layers.py`.\n", "\n", "The fast convolution implementation depends on a Cython extension; to compile it you need to run the following from the `cs231n` directory:\n", "\n", "```bash\n", "python setup.py build_ext --inplace\n", "```\n", "\n", "The API for the fast versions of the convolution and pooling layers is exactly the same as the naive versions that you implemented above: the forward pass receives data, weights, and parameters and produces outputs and a cache object; the backward pass recieves upstream derivatives and the cache object and produces gradients with respect to the data and weights.\n", "\n", "**NOTE:** The fast implementation for pooling will only perform optimally if the pooling regions are non-overlapping and tile the input. If these conditions are not met then the fast pooling implementation will not be much faster than the naive implementation.\n", "\n", "You can compare the performance of the naive and fast versions of these layers by running the following:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing conv_forward_fast:\n", "Naive: 0.150599s\n", "Fast: 0.010966s\n", "Speedup: 13.733807x\n", "Difference: 4.926407851494105e-11\n", "\n", "Testing conv_backward_fast:\n", "Naive: 0.335133s\n", "Fast: 0.010941s\n", "Speedup: 30.632213x\n", "dx difference: 1.949764775345631e-11\n", "dw difference: 8.92268342061343e-14\n", "db difference: 0.0\n" ] } ], "source": [ "# Rel errors should be around e-9 or less\n", "from cs231n.fast_layers import conv_forward_fast, conv_backward_fast\n", "from time import time\n", "np.random.seed(231)\n", "x = np.random.randn(100, 3, 31, 31)\n", "w = np.random.randn(25, 3, 3, 3)\n", "b = np.random.randn(25,)\n", "dout = np.random.randn(100, 25, 16, 16)\n", "conv_param = {'stride': 2, 'pad': 1}\n", "\n", "t0 = time()\n", "out_naive, cache_naive = conv_forward_naive(x, w, b, conv_param)\n", "t1 = time()\n", "out_fast, cache_fast = conv_forward_fast(x, w, b, conv_param)\n", "t2 = time()\n", "\n", "print('Testing conv_forward_fast:')\n", "print('Naive: %fs' % (t1 - t0))\n", "print('Fast: %fs' % (t2 - t1))\n", "print('Speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n", "print('Difference: ', rel_error(out_naive, out_fast))\n", "\n", "t0 = time()\n", "dx_naive, dw_naive, db_naive = conv_backward_naive(dout, cache_naive)\n", "t1 = time()\n", "dx_fast, dw_fast, db_fast = conv_backward_fast(dout, cache_fast)\n", "t2 = time()\n", "\n", "print('\\nTesting conv_backward_fast:')\n", "print('Naive: %fs' % (t1 - t0))\n", "print('Fast: %fs' % (t2 - t1))\n", "print('Speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n", "print('dx difference: ', rel_error(dx_naive, dx_fast))\n", "print('dw difference: ', rel_error(dw_naive, dw_fast))\n", "print('db difference: ', rel_error(db_naive, db_fast))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing pool_forward_fast:\n", "Naive: 0.007003s\n", "fast: 0.002971s\n", "speedup: 2.357303x\n", "difference: 0.0\n", "\n", "Testing pool_backward_fast:\n", "Naive: 0.817923s\n", "fast: 0.010951s\n", "speedup: 74.687414x\n", "dx difference: 0.0\n" ] } ], "source": [ "# Relative errors should be close to 0.0\n", "from cs231n.fast_layers import max_pool_forward_fast, max_pool_backward_fast\n", "np.random.seed(231)\n", "x = np.random.randn(100, 3, 32, 32)\n", "dout = np.random.randn(100, 3, 16, 16)\n", "pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2}\n", "\n", "t0 = time()\n", "out_naive, cache_naive = max_pool_forward_naive(x, pool_param)\n", "t1 = time()\n", "out_fast, cache_fast = max_pool_forward_fast(x, pool_param)\n", "t2 = time()\n", "\n", "print('Testing pool_forward_fast:')\n", "print('Naive: %fs' % (t1 - t0))\n", "print('fast: %fs' % (t2 - t1))\n", "print('speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n", "print('difference: ', rel_error(out_naive, out_fast))\n", "\n", "t0 = time()\n", "dx_naive = max_pool_backward_naive(dout, cache_naive)\n", "t1 = time()\n", "dx_fast = max_pool_backward_fast(dout, cache_fast)\n", "t2 = time()\n", "\n", "print('\\nTesting pool_backward_fast:')\n", "print('Naive: %fs' % (t1 - t0))\n", "print('fast: %fs' % (t2 - t1))\n", "print('speedup: %fx' % ((t1 - t0) / (t2 - t1)))\n", "print('dx difference: ', rel_error(dx_naive, dx_fast))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Convolutional \"sandwich\" layers\n", "Previously we introduced the concept of \"sandwich\" layers that combine multiple operations into commonly used patterns. In the file `cs231n/layer_utils.py` you will find sandwich layers that implement a few commonly used patterns for convolutional networks. Run the cells below to sanity check they're working." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing conv_relu_pool\n", "dx error: 9.591132621921372e-09\n", "dw error: 5.802401370096438e-09\n", "db error: 1.0146343411762047e-09\n" ] } ], "source": [ "from cs231n.layer_utils import conv_relu_pool_forward, conv_relu_pool_backward\n", "np.random.seed(231)\n", "x = np.random.randn(2, 3, 16, 16)\n", "w = np.random.randn(3, 3, 3, 3)\n", "b = np.random.randn(3,)\n", "dout = np.random.randn(2, 3, 8, 8)\n", "conv_param = {'stride': 1, 'pad': 1}\n", "pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2}\n", "\n", "out, cache = conv_relu_pool_forward(x, w, b, conv_param, pool_param)\n", "dx, dw, db = conv_relu_pool_backward(dout, cache)\n", "\n", "dx_num = eval_numerical_gradient_array(lambda x: conv_relu_pool_forward(x, w, b, conv_param, pool_param)[0], x, dout)\n", "dw_num = eval_numerical_gradient_array(lambda w: conv_relu_pool_forward(x, w, b, conv_param, pool_param)[0], w, dout)\n", "db_num = eval_numerical_gradient_array(lambda b: conv_relu_pool_forward(x, w, b, conv_param, pool_param)[0], b, dout)\n", "\n", "# Relative errors should be around e-8 or less\n", "print('Testing conv_relu_pool')\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dw error: ', rel_error(dw_num, dw))\n", "print('db error: ', rel_error(db_num, db))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing conv_relu:\n", "dx error: 1.5218619980349303e-09\n", "dw error: 2.702022646099404e-10\n", "db error: 1.451272393591721e-10\n" ] } ], "source": [ "from cs231n.layer_utils import conv_relu_forward, conv_relu_backward\n", "np.random.seed(231)\n", "x = np.random.randn(2, 3, 8, 8)\n", "w = np.random.randn(3, 3, 3, 3)\n", "b = np.random.randn(3,)\n", "dout = np.random.randn(2, 3, 8, 8)\n", "conv_param = {'stride': 1, 'pad': 1}\n", "\n", "out, cache = conv_relu_forward(x, w, b, conv_param)\n", "dx, dw, db = conv_relu_backward(dout, cache)\n", "\n", "dx_num = eval_numerical_gradient_array(lambda x: conv_relu_forward(x, w, b, conv_param)[0], x, dout)\n", "dw_num = eval_numerical_gradient_array(lambda w: conv_relu_forward(x, w, b, conv_param)[0], w, dout)\n", "db_num = eval_numerical_gradient_array(lambda b: conv_relu_forward(x, w, b, conv_param)[0], b, dout)\n", "\n", "# Relative errors should be around e-8 or less\n", "print('Testing conv_relu:')\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dw error: ', rel_error(dw_num, dw))\n", "print('db error: ', rel_error(db_num, db))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Three-layer ConvNet\n", "Now that you have implemented all the necessary layers, we can put them together into a simple convolutional network.\n", "\n", "Open the file `cs231n/classifiers/cnn.py` and complete the implementation of the `ThreeLayerConvNet` class. Remember you can use the fast/sandwich layers (already imported for you) in your implementation. Run the following cells to help you debug:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sanity check loss\n", "After you build a new network, one of the first things you should do is sanity check the loss. When we use the softmax loss, we expect the loss for random weights (and no regularization) to be about `log(C)` for `C` classes. When we add regularization the loss should go up slightly." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial loss (no regularization): 2.302586071243987\n", "Initial loss (with regularization): 2.713925200099603\n" ] } ], "source": [ "model = ThreeLayerConvNet()\n", "\n", "N = 50\n", "X = np.random.randn(N, 3, 32, 32)\n", "y = np.random.randint(10, size=N)\n", "\n", "loss, grads = model.loss(X, y)\n", "print('Initial loss (no regularization): ', loss)\n", "\n", "model.reg = 0.5\n", "loss, grads = model.loss(X, y)\n", "print('Initial loss (with regularization): ', loss)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gradient check\n", "After the loss looks reasonable, use numeric gradient checking to make sure that your backward pass is correct. When you use numeric gradient checking you should use a small amount of artifical data and a small number of neurons at each layer. Note: correct implementations may still have relative errors up to the order of e-2." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "W1 max relative error: 1.380104e-04\n", "W2 max relative error: 1.822723e-02\n", "W3 max relative error: 3.064049e-04\n", "b1 max relative error: 3.477652e-05\n", "b2 max relative error: 2.516375e-03\n", "b3 max relative error: 7.945660e-10\n" ] } ], "source": [ "num_inputs = 2\n", "input_dim = (3, 16, 16)\n", "reg = 0.0\n", "num_classes = 10\n", "np.random.seed(231)\n", "X = np.random.randn(num_inputs, *input_dim)\n", "y = np.random.randint(num_classes, size=num_inputs)\n", "\n", "model = ThreeLayerConvNet(num_filters=3, filter_size=3,\n", " input_dim=input_dim, hidden_dim=7,\n", " dtype=np.float64)\n", "loss, grads = model.loss(X, y)\n", "# Errors should be small, but correct implementations may have\n", "# relative errors up to the order of e-2\n", "for param_name in sorted(grads):\n", " f = lambda _: model.loss(X, y)[0]\n", " param_grad_num = eval_numerical_gradient(f, model.params[param_name], verbose=False, h=1e-6)\n", " e = rel_error(param_grad_num, grads[param_name])\n", " print('%s max relative error: %e' % (param_name, rel_error(param_grad_num, grads[param_name])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overfit small data\n", "A nice trick is to train your model with just a few training samples. You should be able to overfit small datasets, which will result in very high training accuracy and comparatively low validation accuracy." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Iteration 1 / 30) loss: 2.414060\n", "(Epoch 0 / 15) train acc: 0.200000; val_acc: 0.137000\n", "(Iteration 2 / 30) loss: 3.102925\n", "(Epoch 1 / 15) train acc: 0.140000; val_acc: 0.087000\n", "(Iteration 3 / 30) loss: 2.270330\n", "(Iteration 4 / 30) loss: 2.096705\n", "(Epoch 2 / 15) train acc: 0.240000; val_acc: 0.094000\n", "(Iteration 5 / 30) loss: 1.838880\n", "(Iteration 6 / 30) loss: 1.934188\n", "(Epoch 3 / 15) train acc: 0.510000; val_acc: 0.173000\n", "(Iteration 7 / 30) loss: 1.827912\n", "(Iteration 8 / 30) loss: 1.639574\n", "(Epoch 4 / 15) train acc: 0.520000; val_acc: 0.188000\n", "(Iteration 9 / 30) loss: 1.330082\n", "(Iteration 10 / 30) loss: 1.756115\n", "(Epoch 5 / 15) train acc: 0.630000; val_acc: 0.167000\n", "(Iteration 11 / 30) loss: 1.024162\n", "(Iteration 12 / 30) loss: 1.041826\n", "(Epoch 6 / 15) train acc: 0.750000; val_acc: 0.229000\n", "(Iteration 13 / 30) loss: 1.142777\n", "(Iteration 14 / 30) loss: 0.835706\n", "(Epoch 7 / 15) train acc: 0.790000; val_acc: 0.247000\n", "(Iteration 15 / 30) loss: 0.587786\n", "(Iteration 16 / 30) loss: 0.645509\n", "(Epoch 8 / 15) train acc: 0.820000; val_acc: 0.252000\n", "(Iteration 17 / 30) loss: 0.786844\n", "(Iteration 18 / 30) loss: 0.467054\n", "(Epoch 9 / 15) train acc: 0.820000; val_acc: 0.178000\n", "(Iteration 19 / 30) loss: 0.429880\n", "(Iteration 20 / 30) loss: 0.635498\n", "(Epoch 10 / 15) train acc: 0.900000; val_acc: 0.206000\n", "(Iteration 21 / 30) loss: 0.365807\n", "(Iteration 22 / 30) loss: 0.284220\n", "(Epoch 11 / 15) train acc: 0.820000; val_acc: 0.201000\n", "(Iteration 23 / 30) loss: 0.469343\n", "(Iteration 24 / 30) loss: 0.509369\n", "(Epoch 12 / 15) train acc: 0.920000; val_acc: 0.211000\n", "(Iteration 25 / 30) loss: 0.111638\n", "(Iteration 26 / 30) loss: 0.145388\n", "(Epoch 13 / 15) train acc: 0.930000; val_acc: 0.213000\n", "(Iteration 27 / 30) loss: 0.155575\n", "(Iteration 28 / 30) loss: 0.143398\n", "(Epoch 14 / 15) train acc: 0.960000; val_acc: 0.212000\n", "(Iteration 29 / 30) loss: 0.158160\n", "(Iteration 30 / 30) loss: 0.118934\n", "(Epoch 15 / 15) train acc: 0.990000; val_acc: 0.220000\n" ] } ], "source": [ "np.random.seed(231)\n", "\n", "num_train = 100\n", "small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", "}\n", "\n", "model = ThreeLayerConvNet(weight_scale=1e-2)\n", "\n", "solver = Solver(model, small_data,\n", " num_epochs=15, batch_size=50,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': 1e-3,\n", " },\n", " verbose=True, print_every=1)\n", "solver.train()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plotting the loss, training accuracy, and validation accuracy should show clear overfitting:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.subplot(2, 1, 1)\n", "plt.plot(solver.loss_history, 'o')\n", "plt.xlabel('iteration')\n", "plt.ylabel('loss')\n", "\n", "plt.subplot(2, 1, 2)\n", "plt.plot(solver.train_acc_history, '-o')\n", "plt.plot(solver.val_acc_history, '-o')\n", "plt.legend(['train', 'val'], loc='upper left')\n", "plt.xlabel('epoch')\n", "plt.ylabel('accuracy')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train the net\n", "By training the three-layer convolutional network for one epoch, you should achieve greater than 40% accuracy on the training set:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Iteration 1 / 980) loss: 2.306791\n", "(Epoch 0 / 1) train acc: 0.103000; val_acc: 0.107000\n", "(Iteration 21 / 980) loss: 2.126007\n", "(Iteration 41 / 980) loss: 1.978828\n", "(Iteration 61 / 980) loss: 1.879498\n", "(Iteration 81 / 980) loss: 1.795154\n", "(Iteration 101 / 980) loss: 1.748704\n", "(Iteration 121 / 980) loss: 1.619527\n", "(Iteration 141 / 980) loss: 1.888192\n", "(Iteration 161 / 980) loss: 2.055906\n", "(Iteration 181 / 980) loss: 1.821506\n", "(Iteration 201 / 980) loss: 2.068563\n", "(Iteration 221 / 980) loss: 1.894769\n", "(Iteration 241 / 980) loss: 1.685644\n", "(Iteration 261 / 980) loss: 1.617659\n", "(Iteration 281 / 980) loss: 1.825867\n", "(Iteration 301 / 980) loss: 1.846340\n", "(Iteration 321 / 980) loss: 1.796345\n", "(Iteration 341 / 980) loss: 1.725324\n", "(Iteration 361 / 980) loss: 1.878257\n", "(Iteration 381 / 980) loss: 1.612843\n", "(Iteration 401 / 980) loss: 1.670913\n", "(Iteration 421 / 980) loss: 1.512967\n", "(Iteration 441 / 980) loss: 1.756186\n", "(Iteration 461 / 980) loss: 1.820591\n", "(Iteration 481 / 980) loss: 1.487956\n", "(Iteration 501 / 980) loss: 1.421648\n", "(Iteration 521 / 980) loss: 1.911582\n", "(Iteration 541 / 980) loss: 1.551149\n", "(Iteration 561 / 980) loss: 1.739551\n", "(Iteration 581 / 980) loss: 1.494856\n", "(Iteration 601 / 980) loss: 1.625713\n", "(Iteration 621 / 980) loss: 1.588532\n", "(Iteration 641 / 980) loss: 1.730055\n", "(Iteration 661 / 980) loss: 1.622283\n", "(Iteration 681 / 980) loss: 1.780818\n", "(Iteration 701 / 980) loss: 1.377566\n", "(Iteration 721 / 980) loss: 1.563941\n", "(Iteration 741 / 980) loss: 1.735714\n", "(Iteration 761 / 980) loss: 1.498669\n", "(Iteration 781 / 980) loss: 2.289787\n", "(Iteration 801 / 980) loss: 1.762956\n", "(Iteration 821 / 980) loss: 1.618472\n", "(Iteration 841 / 980) loss: 1.478389\n", "(Iteration 861 / 980) loss: 1.709902\n", "(Iteration 881 / 980) loss: 1.616805\n", "(Iteration 901 / 980) loss: 1.585561\n", "(Iteration 921 / 980) loss: 1.755791\n", "(Iteration 941 / 980) loss: 1.706363\n", "(Iteration 961 / 980) loss: 1.568267\n", "(Epoch 1 / 1) train acc: 0.492000; val_acc: 0.469000\n" ] } ], "source": [ "model = ThreeLayerConvNet(weight_scale=0.001, hidden_dim=500, reg=0.001)\n", "\n", "solver = Solver(model, data,\n", " num_epochs=1, batch_size=50,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': 1e-3,\n", " },\n", " verbose=True, print_every=20)\n", "solver.train()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize Filters\n", "You can visualize the first-layer convolutional filters from the trained network by running the following:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from cs231n.vis_utils import visualize_grid\n", "\n", "grid = visualize_grid(model.params['W1'].transpose(0, 2, 3, 1))\n", "plt.imshow(grid.astype('uint8'))\n", "plt.axis('off')\n", "plt.gcf().set_size_inches(5, 5)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Spatial Batch Normalization\n", "We already saw that batch normalization is a very useful technique for training deep fully-connected networks. As proposed in the original paper (link in `BatchNormalization.ipynb`), batch normalization can also be used for convolutional networks, but we need to tweak it a bit; the modification will be called \"spatial batch normalization.\"\n", "\n", "Normally batch-normalization accepts inputs of shape `(N, D)` and produces outputs of shape `(N, D)`, where we normalize across the minibatch dimension `N`. For data coming from convolutional layers, batch normalization needs to accept inputs of shape `(N, C, H, W)` and produce outputs of shape `(N, C, H, W)` where the `N` dimension gives the minibatch size and the `(H, W)` dimensions give the spatial size of the feature map.\n", "\n", "If the feature map was produced using convolutions, then we expect every feature channel's statistics e.g. mean, variance to be relatively consistent both between different images, and different locations within the same image -- after all, every feature channel is produced by the same convolutional filter! Therefore spatial batch normalization computes a mean and variance for each of the `C` feature channels by computing statistics over the minibatch dimension `N` as well the spatial dimensions `H` and `W`.\n", "\n", "\n", "[1] [Sergey Ioffe and Christian Szegedy, \"Batch Normalization: Accelerating Deep Network Training by Reducing\n", "Internal Covariate Shift\", ICML 2015.](https://arxiv.org/abs/1502.03167)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Spatial batch normalization: forward\n", "\n", "In the file `cs231n/layers.py`, implement the forward pass for spatial batch normalization in the function `spatial_batchnorm_forward`. Check your implementation by running the following:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Before spatial batch normalization:\n", " Shape: (2, 3, 4, 5)\n", " Means: [9.33463814 8.90909116 9.11056338]\n", " Stds: [3.61447857 3.19347686 3.5168142 ]\n", "After spatial batch normalization:\n", " Shape: (2, 3, 4, 5)\n", " Means: [ 6.18949336e-16 5.99520433e-16 -1.22124533e-16]\n", " Stds: [0.99999962 0.99999951 0.9999996 ]\n", "After spatial batch normalization (nontrivial gamma, beta):\n", " Shape: (2, 3, 4, 5)\n", " Means: [6. 7. 8.]\n", " Stds: [2.99999885 3.99999804 4.99999798]\n" ] } ], "source": [ "np.random.seed(231)\n", "# Check the training-time forward pass by checking means and variances\n", "# of features both before and after spatial batch normalization\n", "\n", "N, C, H, W = 2, 3, 4, 5\n", "x = 4 * np.random.randn(N, C, H, W) + 10\n", "\n", "print('Before spatial batch normalization:')\n", "print(' Shape: ', x.shape)\n", "print(' Means: ', x.mean(axis=(0, 2, 3)))\n", "print(' Stds: ', x.std(axis=(0, 2, 3)))\n", "\n", "# Means should be close to zero and stds close to one\n", "gamma, beta = np.ones(C), np.zeros(C)\n", "bn_param = {'mode': 'train'}\n", "out, _ = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n", "print('After spatial batch normalization:')\n", "print(' Shape: ', out.shape)\n", "print(' Means: ', out.mean(axis=(0, 2, 3)))\n", "print(' Stds: ', out.std(axis=(0, 2, 3)))\n", "\n", "# Means should be close to beta and stds close to gamma\n", "gamma, beta = np.asarray([3, 4, 5]), np.asarray([6, 7, 8])\n", "out, _ = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n", "print('After spatial batch normalization (nontrivial gamma, beta):')\n", "print(' Shape: ', out.shape)\n", "print(' Means: ', out.mean(axis=(0, 2, 3)))\n", "print(' Stds: ', out.std(axis=(0, 2, 3)))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "After spatial batch normalization (test-time):\n", " means: [-0.08034406 0.07562881 0.05716371 0.04378383]\n", " stds: [0.96718744 1.0299714 1.02887624 1.00585577]\n" ] } ], "source": [ "np.random.seed(231)\n", "# Check the test-time forward pass by running the training-time\n", "# forward pass many times to warm up the running averages, and then\n", "# checking the means and variances of activations after a test-time\n", "# forward pass.\n", "N, C, H, W = 10, 4, 11, 12\n", "\n", "bn_param = {'mode': 'train'}\n", "gamma = np.ones(C)\n", "beta = np.zeros(C)\n", "for t in range(50):\n", " x = 2.3 * np.random.randn(N, C, H, W) + 13\n", " spatial_batchnorm_forward(x, gamma, beta, bn_param)\n", "bn_param['mode'] = 'test'\n", "x = 2.3 * np.random.randn(N, C, H, W) + 13\n", "a_norm, _ = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n", "\n", "# Means should be close to zero and stds close to one, but will be\n", "# noisier than training-time forward passes.\n", "print('After spatial batch normalization (test-time):')\n", "print(' means: ', a_norm.mean(axis=(0, 2, 3)))\n", "print(' stds: ', a_norm.std(axis=(0, 2, 3)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Spatial batch normalization: backward\n", "In the file `cs231n/layers.py`, implement the backward pass for spatial batch normalization in the function `spatial_batchnorm_backward`. Run the following to check your implementation using a numeric gradient check:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx error: 2.78664819678539e-07\n", "dgamma error: 7.0974817113608705e-12\n", "dbeta error: 3.275608725278405e-12\n" ] } ], "source": [ "np.random.seed(231)\n", "N, C, H, W = 2, 3, 4, 5\n", "x = 5 * np.random.randn(N, C, H, W) + 12\n", "gamma = np.random.randn(C)\n", "beta = np.random.randn(C)\n", "dout = np.random.randn(N, C, H, W)\n", "\n", "bn_param = {'mode': 'train'}\n", "fx = lambda x: spatial_batchnorm_forward(x, gamma, beta, bn_param)[0]\n", "fg = lambda a: spatial_batchnorm_forward(x, gamma, beta, bn_param)[0]\n", "fb = lambda b: spatial_batchnorm_forward(x, gamma, beta, bn_param)[0]\n", "\n", "dx_num = eval_numerical_gradient_array(fx, x, dout)\n", "da_num = eval_numerical_gradient_array(fg, gamma, dout)\n", "db_num = eval_numerical_gradient_array(fb, beta, dout)\n", "\n", "#You should expect errors of magnitudes between 1e-12~1e-06\n", "_, cache = spatial_batchnorm_forward(x, gamma, beta, bn_param)\n", "dx, dgamma, dbeta = spatial_batchnorm_backward(dout, cache)\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dgamma error: ', rel_error(da_num, dgamma))\n", "print('dbeta error: ', rel_error(db_num, dbeta))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Group Normalization\n", "In the previous notebook, we mentioned that Layer Normalization is an alternative normalization technique that mitigates the batch size limitations of Batch Normalization. However, as the authors of [2] observed, Layer Normalization does not perform as well as Batch Normalization when used with Convolutional Layers:\n", "\n", ">With fully connected layers, all the hidden units in a layer tend to make similar contributions to the final prediction, and re-centering and rescaling the summed inputs to a layer works well. However, the assumption of similar contributions is no longer true for convolutional neural networks. The large number of the hidden units whose\n", "receptive fields lie near the boundary of the image are rarely turned on and thus have very different\n", "statistics from the rest of the hidden units within the same layer.\n", "\n", "The authors of [3] propose an intermediary technique. In contrast to Layer Normalization, where you normalize over the entire feature per-datapoint, they suggest a consistent splitting of each per-datapoint feature into G groups, and a per-group per-datapoint normalization instead. \n", "\n", "![Comparison of normalization techniques discussed so far](notebook_images/normalization.png)\n", "
**Visual comparison of the normalization techniques discussed so far (image edited from [3])**
\n", "\n", "Even though an assumption of equal contribution is still being made within each group, the authors hypothesize that this is not as problematic, as innate grouping arises within features for visual recognition. One example they use to illustrate this is that many high-performance handcrafted features in traditional Computer Vision have terms that are explicitly grouped together. Take for example Histogram of Oriented Gradients [4]-- after computing histograms per spatially local block, each per-block histogram is normalized before being concatenated together to form the final feature vector.\n", "\n", "You will now implement Group Normalization. Note that this normalization technique that you are to implement in the following cells was introduced and published to ECCV just in 2018 -- this truly is still an ongoing and excitingly active field of research!\n", "\n", "[2] [Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. \"Layer Normalization.\" stat 1050 (2016): 21.](https://arxiv.org/pdf/1607.06450.pdf)\n", "\n", "\n", "[3] [Wu, Yuxin, and Kaiming He. \"Group Normalization.\" arXiv preprint arXiv:1803.08494 (2018).](https://arxiv.org/abs/1803.08494)\n", "\n", "\n", "[4] [N. Dalal and B. Triggs. Histograms of oriented gradients for\n", "human detection. In Computer Vision and Pattern Recognition\n", "(CVPR), 2005.](https://ieeexplore.ieee.org/abstract/document/1467360/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Group normalization: forward\n", "\n", "In the file `cs231n/layers.py`, implement the forward pass for group normalization in the function `spatial_groupnorm_forward`. Check your implementation by running the following:" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Before spatial group normalization:\n", " Shape: (2, 6, 4, 5)\n", " Means: [9.72505327 8.51114185 8.9147544 9.43448077]\n", " Stds: [3.67070958 3.09892597 4.27043622 3.97521327]\n", "After spatial group normalization:\n", " Shape: (2, 6, 4, 5)\n", " Means: [-2.14643118e-16 5.25505565e-16 2.65528340e-16 -3.38618023e-16]\n", " Stds: [0.99999963 0.99999948 0.99999973 0.99999968]\n" ] } ], "source": [ "np.random.seed(231)\n", "# Check the training-time forward pass by checking means and variances\n", "# of features both before and after spatial batch normalization\n", "\n", "N, C, H, W = 2, 6, 4, 5\n", "G = 2\n", "x = 4 * np.random.randn(N, C, H, W) + 10\n", "x_g = x.reshape((N*G,-1))\n", "print('Before spatial group normalization:')\n", "print(' Shape: ', x.shape)\n", "print(' Means: ', x_g.mean(axis=1))\n", "print(' Stds: ', x_g.std(axis=1))\n", "\n", "# Means should be close to zero and stds close to one\n", "gamma, beta = np.ones((1,C,1,1)), np.zeros((1,C,1,1))\n", "bn_param = {'mode': 'train'}\n", "\n", "out, _ = spatial_groupnorm_forward(x, gamma, beta, G, bn_param)\n", "out_g = out.reshape((N*G,-1))\n", "print('After spatial group normalization:')\n", "print(' Shape: ', out.shape)\n", "print(' Means: ', out_g.mean(axis=1))\n", "print(' Stds: ', out_g.std(axis=1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Spatial group normalization: backward\n", "In the file `cs231n/layers.py`, implement the backward pass for spatial batch normalization in the function `spatial_groupnorm_backward`. Run the following to check your implementation using a numeric gradient check:" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx error: 7.413109542981906e-08\n", "dgamma error: 9.468195772749234e-12\n", "dbeta error: 3.354494437653335e-12\n" ] } ], "source": [ "np.random.seed(231)\n", "N, C, H, W = 2, 6, 4, 5\n", "G = 2\n", "x = 5 * np.random.randn(N, C, H, W) + 12\n", "gamma = np.random.randn(1,C,1,1)\n", "beta = np.random.randn(1,C,1,1)\n", "dout = np.random.randn(N, C, H, W)\n", "\n", "gn_param = {}\n", "fx = lambda x: spatial_groupnorm_forward(x, gamma, beta, G, gn_param)[0]\n", "fg = lambda a: spatial_groupnorm_forward(x, gamma, beta, G, gn_param)[0]\n", "fb = lambda b: spatial_groupnorm_forward(x, gamma, beta, G, gn_param)[0]\n", "\n", "dx_num = eval_numerical_gradient_array(fx, x, dout)\n", "da_num = eval_numerical_gradient_array(fg, gamma, dout)\n", "db_num = eval_numerical_gradient_array(fb, beta, dout)\n", "\n", "_, cache = spatial_groupnorm_forward(x, gamma, beta, G, gn_param)\n", "dx, dgamma, dbeta = spatial_groupnorm_backward(dout, cache)\n", "#You should expect errors of magnitudes between 1e-12~1e-07\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dgamma error: ', rel_error(da_num, dgamma))\n", "print('dbeta error: ', rel_error(db_num, dbeta))" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: assignment2/Dropout.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Dropout\n", "Dropout [1] is a technique for regularizing neural networks by randomly setting some output activations to zero during the forward pass. In this exercise you will implement a dropout layer and modify your fully-connected network to optionally use dropout.\n", "\n", "[1] [Geoffrey E. Hinton et al, \"Improving neural networks by preventing co-adaptation of feature detectors\", arXiv 2012](https://arxiv.org/abs/1207.0580)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "# As usual, a bit of setup\n", "from __future__ import print_function\n", "import time\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from cs231n.classifiers.fc_net import *\n", "from cs231n.data_utils import get_CIFAR10_data\n", "from cs231n.gradient_check import eval_numerical_gradient, eval_numerical_gradient_array\n", "from cs231n.solver import Solver\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading external modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "def rel_error(x, y):\n", " \"\"\" returns relative error \"\"\"\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_train: (49000, 3, 32, 32)\n", "y_train: (49000,)\n", "X_val: (1000, 3, 32, 32)\n", "y_val: (1000,)\n", "X_test: (1000, 3, 32, 32)\n", "y_test: (1000,)\n" ] } ], "source": [ "# Load the (preprocessed) CIFAR10 data.\n", "\n", "data = get_CIFAR10_data()\n", "for k, v in data.items():\n", " print('%s: ' % k, v.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Dropout forward pass\n", "In the file `cs231n/layers.py`, implement the forward pass for dropout. Since dropout behaves differently during training and testing, make sure to implement the operation for both modes.\n", "\n", "Once you have done so, run the cell below to test your implementation." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running tests with p = 0.25\n", "Mean of input: 10.000207878477502\n", "Mean of train-time output: 28.24414088197752\n", "Mean of test-time output: 10.000207878477502\n", "Fraction of train-time output set to zero: 0.294\n", "Fraction of test-time output set to zero: 0.0\n", "\n", "Running tests with p = 0.4\n", "Mean of input: 10.000207878477502\n", "Mean of train-time output: 15.396240321444028\n", "Mean of test-time output: 10.000207878477502\n", "Fraction of train-time output set to zero: 0.384\n", "Fraction of test-time output set to zero: 0.0\n", "\n", "Running tests with p = 0.7\n", "Mean of input: 10.000207878477502\n", "Mean of train-time output: 4.200594650104354\n", "Mean of test-time output: 10.000207878477502\n", "Fraction of train-time output set to zero: 0.706\n", "Fraction of test-time output set to zero: 0.0\n", "\n" ] } ], "source": [ "np.random.seed(231)\n", "x = np.random.randn(500, 500) + 10\n", "\n", "for p in [0.25, 0.4, 0.7]:\n", " out, _ = dropout_forward(x, {'mode': 'train', 'p': p})\n", " out_test, _ = dropout_forward(x, {'mode': 'test', 'p': p})\n", "\n", " print('Running tests with p = ', p)\n", " print('Mean of input: ', x.mean())\n", " print('Mean of train-time output: ', out.mean())\n", " print('Mean of test-time output: ', out_test.mean())\n", " print('Fraction of train-time output set to zero: ', (out == 0).mean())\n", " print('Fraction of test-time output set to zero: ', (out_test == 0).mean())\n", " print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Dropout backward pass\n", "In the file `cs231n/layers.py`, implement the backward pass for dropout. After doing so, run the following cell to numerically gradient-check your implementation." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dx relative error: 1.8928964971078328e-11\n" ] } ], "source": [ "np.random.seed(231)\n", "x = np.random.randn(10, 10) + 10\n", "dout = np.random.randn(*x.shape)\n", "\n", "dropout_param = {'mode': 'train', 'p': 0.2, 'seed': 123}\n", "out, cache = dropout_forward(x, dropout_param)\n", "dx = dropout_backward(dout, cache)\n", "dx_num = eval_numerical_gradient_array(lambda xx: dropout_forward(xx, dropout_param)[0], x, dout)\n", "\n", "# Error should be around e-10 or less\n", "print('dx relative error: ', rel_error(dx, dx_num))" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 1:\n", "What happens if we do not divide the values being passed through inverse dropout by `p` in the dropout layer? Why does that happen?\n", "\n", "## Answer:\n", "[FILL THIS IN]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fully-connected nets with Dropout\n", "In the file `cs231n/classifiers/fc_net.py`, modify your implementation to use dropout. Specifically, if the constructor of the network receives a value that is not 1 for the `dropout` parameter, then the net should add a dropout layer immediately after every ReLU nonlinearity. After doing so, run the following to numerically gradient-check your implementation." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running check with dropout = 1\n", "Initial loss: 2.3004790897684924\n", "W1 relative error: 1.48e-07\n", "W2 relative error: 2.21e-05\n", "W3 relative error: 3.53e-07\n", "b1 relative error: 5.38e-09\n", "b2 relative error: 2.09e-09\n", "b3 relative error: 5.80e-11\n", "\n", "Running check with dropout = 0.75\n", "Initial loss: 2.3025877108306494\n", "W1 relative error: 1.34e-07\n", "W2 relative error: 8.28e-08\n", "W3 relative error: 2.40e-06\n", "b1 relative error: 1.40e-08\n", "b2 relative error: 1.00e+00\n", "b3 relative error: 1.10e-10\n", "\n", "Running check with dropout = 0.5\n", "Initial loss: 2.3090066830824556\n", "W1 relative error: 3.10e-07\n", "W2 relative error: 6.65e-08\n", "W3 relative error: 1.14e-08\n", "b1 relative error: 1.54e-08\n", "b2 relative error: 9.20e-10\n", "b3 relative error: 9.88e-11\n", "\n" ] } ], "source": [ "np.random.seed(231)\n", "N, D, H1, H2, C = 2, 15, 20, 30, 10\n", "X = np.random.randn(N, D)\n", "y = np.random.randint(C, size=(N,))\n", "\n", "for dropout in [1, 0.75, 0.5]:\n", " print('Running check with dropout = ', dropout)\n", " model = FullyConnectedNet([H1, H2], input_dim=D, num_classes=C,\n", " weight_scale=5e-2, dtype=np.float64,\n", " dropout=dropout, seed=123)\n", "\n", " loss, grads = model.loss(X, y)\n", " print('Initial loss: ', loss)\n", " \n", " # Relative errors should be around e-6 or less; Note that it's fine\n", " # if for dropout=1 you have W2 error be on the order of e-5.\n", " for name in sorted(grads):\n", " f = lambda _: model.loss(X, y)[0]\n", " grad_num = eval_numerical_gradient(f, model.params[name], verbose=False, h=1e-5)\n", " print('%s relative error: %.2e' % (name, rel_error(grad_num, grads[name])))\n", " print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Regularization experiment\n", "As an experiment, we will train a pair of two-layer networks on 500 training examples: one will use no dropout, and one will use a keep probability of 0.25. We will then visualize the training and validation accuracies of the two networks over time." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "(Iteration 1 / 125) loss: 7.856643\n", "(Epoch 0 / 25) train acc: 0.260000; val_acc: 0.184000\n", "(Epoch 1 / 25) train acc: 0.416000; val_acc: 0.258000\n", "(Epoch 2 / 25) train acc: 0.482000; val_acc: 0.276000\n", "(Epoch 3 / 25) train acc: 0.532000; val_acc: 0.277000\n", "(Epoch 4 / 25) train acc: 0.600000; val_acc: 0.271000\n", "(Epoch 5 / 25) train acc: 0.708000; val_acc: 0.299000\n", "(Epoch 6 / 25) train acc: 0.722000; val_acc: 0.282000\n", "(Epoch 7 / 25) train acc: 0.832000; val_acc: 0.255000\n", "(Epoch 8 / 25) train acc: 0.880000; val_acc: 0.268000\n", "(Epoch 9 / 25) train acc: 0.902000; val_acc: 0.277000\n", "(Epoch 10 / 25) train acc: 0.898000; val_acc: 0.261000\n", "(Epoch 11 / 25) train acc: 0.924000; val_acc: 0.263000\n", "(Epoch 12 / 25) train acc: 0.960000; val_acc: 0.300000\n", "(Epoch 13 / 25) train acc: 0.972000; val_acc: 0.314000\n", "(Epoch 14 / 25) train acc: 0.972000; val_acc: 0.310000\n", "(Epoch 15 / 25) train acc: 0.974000; val_acc: 0.314000\n", "(Epoch 16 / 25) train acc: 0.994000; val_acc: 0.304000\n", "(Epoch 17 / 25) train acc: 0.970000; val_acc: 0.305000\n", "(Epoch 18 / 25) train acc: 0.990000; val_acc: 0.311000\n", "(Epoch 19 / 25) train acc: 0.988000; val_acc: 0.308000\n", "(Epoch 20 / 25) train acc: 0.992000; val_acc: 0.287000\n", "(Iteration 101 / 125) loss: 0.001417\n", "(Epoch 21 / 25) train acc: 0.994000; val_acc: 0.291000\n", "(Epoch 22 / 25) train acc: 0.998000; val_acc: 0.308000\n", "(Epoch 23 / 25) train acc: 0.996000; val_acc: 0.308000\n", "(Epoch 24 / 25) train acc: 0.998000; val_acc: 0.307000\n", "(Epoch 25 / 25) train acc: 0.994000; val_acc: 0.305000\n", "\n", "0.25\n", "(Iteration 1 / 125) loss: 35.055681\n", "(Epoch 0 / 25) train acc: 0.250000; val_acc: 0.196000\n", "(Epoch 1 / 25) train acc: 0.398000; val_acc: 0.240000\n", "(Epoch 2 / 25) train acc: 0.426000; val_acc: 0.237000\n", "(Epoch 3 / 25) train acc: 0.496000; val_acc: 0.258000\n", "(Epoch 4 / 25) train acc: 0.540000; val_acc: 0.247000\n", "(Epoch 5 / 25) train acc: 0.608000; val_acc: 0.295000\n", "(Epoch 6 / 25) train acc: 0.596000; val_acc: 0.258000\n", "(Epoch 7 / 25) train acc: 0.710000; val_acc: 0.276000\n", "(Epoch 8 / 25) train acc: 0.740000; val_acc: 0.303000\n", "(Epoch 9 / 25) train acc: 0.760000; val_acc: 0.281000\n", "(Epoch 10 / 25) train acc: 0.802000; val_acc: 0.280000\n", "(Epoch 11 / 25) train acc: 0.842000; val_acc: 0.309000\n", "(Epoch 12 / 25) train acc: 0.822000; val_acc: 0.297000\n", "(Epoch 13 / 25) train acc: 0.836000; val_acc: 0.275000\n", "(Epoch 14 / 25) train acc: 0.886000; val_acc: 0.277000\n", "(Epoch 15 / 25) train acc: 0.872000; val_acc: 0.296000\n", "(Epoch 16 / 25) train acc: 0.886000; val_acc: 0.296000\n", "(Epoch 17 / 25) train acc: 0.920000; val_acc: 0.298000\n", "(Epoch 18 / 25) train acc: 0.914000; val_acc: 0.291000\n", "(Epoch 19 / 25) train acc: 0.938000; val_acc: 0.303000\n", "(Epoch 20 / 25) train acc: 0.956000; val_acc: 0.314000\n", "(Iteration 101 / 125) loss: 2.094676\n", "(Epoch 21 / 25) train acc: 0.958000; val_acc: 0.288000\n", "(Epoch 22 / 25) train acc: 0.962000; val_acc: 0.280000\n", "(Epoch 23 / 25) train acc: 0.972000; val_acc: 0.292000\n", "(Epoch 24 / 25) train acc: 0.980000; val_acc: 0.279000\n", "(Epoch 25 / 25) train acc: 0.948000; val_acc: 0.287000\n", "\n" ] } ], "source": [ "# Train two identical nets, one with dropout and one without\n", "np.random.seed(231)\n", "num_train = 500\n", "small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", "}\n", "\n", "solvers = {}\n", "dropout_choices = [1, 0.25]\n", "for dropout in dropout_choices:\n", " model = FullyConnectedNet([500], dropout=dropout)\n", " print(dropout)\n", "\n", " solver = Solver(model, small_data,\n", " num_epochs=25, batch_size=100,\n", " update_rule='adam',\n", " optim_config={\n", " 'learning_rate': 5e-4,\n", " },\n", " verbose=True, print_every=100)\n", " solver.train()\n", " solvers[dropout] = solver\n", " print()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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DosWLeLNb37zFo/df//9fPGLX+TRRx9l8eLFfPvb3+a+++7j3nvv5Vvf+hZLliwBYNmyZZx11lksXbqUN77xjVxxxRW8+OKLnH766Xz/+9/noYceYuPGjXzzm9/s931MnDiRs88+m/PPP58HH3yQd73rXTv60dRvwcWwYf2WbRvWV9q3U72ff62rrrqKY489dvN2RPD+97+fv/iLv2Du3Ll9HlPW78/ET5IkScPO02vXD6h9MGXma9oiot/23u655x5OOeUUAE499dQtHps2bdrm8vt33303H/7wh9l5553ZZZddOOmkkzb36owfP57p06cD8IlPfIK7776bZcuWMWnSJN761rcCcNppp/Gzn/1sB95pgdb108vWX3sd6v38e9x1111cddVVfPnLX97cds899/DAAw9w6623cvnll/f5+ZX1+zPxK1AR49IlSZJawV5j2wbUPpja29tZuXLl5u3u7m722muvftv70l9CsvPOO2++31ci09/x/SWePUaOHMkrr7wCMKAS/4UZ0z6w9joM5PNfunQpZ555JjfddBO777775vae/ffcc08+/OEPc//99/d5fBm/PxO/ghQ1Ll2SJKkVXHD0frSNGrFFW9uoEVxw9H6Fv/bxxx/Pd7/7XTKTe++9lzFjxvCWt7yFQw45hMcff5wnn3ySl19+meuvv57jjz/+NcdPnz6d66+/HqhUmOzPu9/9bubPn88f//hHXnjhBW688cbNw/meeuopfvGLXwBw3XXXcfjhh7P//vuzYsUKli9fDsA111zDEUccAVSGBS5evBiAH/7wh5tfY9ddd+X5558fhE9lgI66CEb1StJHtVXat1O9n/9TTz3FSSedxDXXXLO5dw3ghRde2PxZvPDCC9xxxx19Vnct6/dn4leQRo5LlyRJanYnTh3Hl06awrixbQQwbmwbXzppCidOHbdDz3vKKafwzne+k2XLltHe3s5VV10FwJw5c5gzZw4AH/jAB9h7773ZZ599+Nu//VuuuOIKoNIr841vfIOjjz6aAw44gBkzZvC2t73tNa/x9a9/ncsvv5xDDjmEdevW9RvL29/+dk4//XSmTZvGO97xDs4880ymTp0KwAEHHMB3vvMdOjo6+N3vfsc555zD6NGj+fa3v81HP/pRpkyZwute9zrOPvtsAD7/+c9z3nnn8a53vYsRI15NmI877jhu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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot train and validation accuracies of the two models\n", "\n", "train_accs = []\n", "val_accs = []\n", "for dropout in dropout_choices:\n", " solver = solvers[dropout]\n", " train_accs.append(solver.train_acc_history[-1])\n", " val_accs.append(solver.val_acc_history[-1])\n", "\n", "plt.subplot(3, 1, 1)\n", "for dropout in dropout_choices:\n", " plt.plot(solvers[dropout].train_acc_history, 'o', label='%.2f dropout' % dropout)\n", "plt.title('Train accuracy')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Accuracy')\n", "plt.legend(ncol=2, loc='lower right')\n", " \n", "plt.subplot(3, 1, 2)\n", "for dropout in dropout_choices:\n", " plt.plot(solvers[dropout].val_acc_history, 'o', label='%.2f dropout' % dropout)\n", "plt.title('Val accuracy')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Accuracy')\n", "plt.legend(ncol=2, loc='lower right')\n", "\n", "plt.gcf().set_size_inches(15, 15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 2:\n", "Compare the validation and training accuracies with and without dropout -- what do your results suggest about dropout as a regularizer?\n", "\n", "## Answer:\n", "[FILL THIS IN]\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 3:\n", "Suppose we are training a deep fully-connected network for image classification, with dropout after hidden layers (parameterized by keep probability p). If we are concerned about overfitting, how should we modify p (if at all) when we decide to decrease the size of the hidden layers (that is, the number of nodes in each layer)?\n", "\n", "## Answer:\n", "[FILL THIS IN]\n" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: assignment2/FullyConnectedNets.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Fully-Connected Neural Nets\n", "In the previous homework you implemented a fully-connected two-layer neural network on CIFAR-10. The implementation was simple but not very modular since the loss and gradient were computed in a single monolithic function. This is manageable for a simple two-layer network, but would become impractical as we move to bigger models. Ideally we want to build networks using a more modular design so that we can implement different layer types in isolation and then snap them together into models with different architectures." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "In this exercise we will implement fully-connected networks using a more modular approach. For each layer we will implement a `forward` and a `backward` function. The `forward` function will receive inputs, weights, and other parameters and will return both an output and a `cache` object storing data needed for the backward pass, like this:\n", "\n", "```python\n", "def layer_forward(x, w):\n", " \"\"\" Receive inputs x and weights w \"\"\"\n", " # Do some computations ...\n", " z = # ... some intermediate value\n", " # Do some more computations ...\n", " out = # the output\n", " \n", " cache = (x, w, z, out) # Values we need to compute gradients\n", " \n", " return out, cache\n", "```\n", "\n", "The backward pass will receive upstream derivatives and the `cache` object, and will return gradients with respect to the inputs and weights, like this:\n", "\n", "```python\n", "def layer_backward(dout, cache):\n", " \"\"\"\n", " Receive dout (derivative of loss with respect to outputs) and cache,\n", " and compute derivative with respect to inputs.\n", " \"\"\"\n", " # Unpack cache values\n", " x, w, z, out = cache\n", " \n", " # Use values in cache to compute derivatives\n", " dx = # Derivative of loss with respect to x\n", " dw = # Derivative of loss with respect to w\n", " \n", " return dx, dw\n", "```\n", "\n", "After implementing a bunch of layers this way, we will be able to easily combine them to build classifiers with different architectures.\n", "\n", "In addition to implementing fully-connected networks of arbitrary depth, we will also explore different update rules for optimization, and introduce Dropout as a regularizer and Batch/Layer Normalization as a tool to more efficiently optimize deep networks.\n", " " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The autoreload extension is already loaded. To reload it, use:\n", " %reload_ext autoreload\n" ] } ], "source": [ "# As usual, a bit of setup\n", "from __future__ import print_function\n", "import time\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from cs231n.classifiers.fc_net import *\n", "from cs231n.data_utils import get_CIFAR10_data\n", "from cs231n.gradient_check import eval_numerical_gradient, eval_numerical_gradient_array\n", "from cs231n.solver import Solver\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading external modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "def rel_error(x, y):\n", " \"\"\" returns relative error \"\"\"\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('X_train: ', (49000, 3, 32, 32))\n", "('y_train: ', (49000,))\n", "('X_val: ', (1000, 3, 32, 32))\n", "('y_val: ', (1000,))\n", "('X_test: ', (1000, 3, 32, 32))\n", "('y_test: ', (1000,))\n" ] } ], "source": [ "# Load the (preprocessed) CIFAR10 data.\n", "\n", "data = get_CIFAR10_data()\n", "for k, v in list(data.items()):\n", " print(('%s: ' % k, v.shape))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Affine layer: foward\n", "Open the file `cs231n/layers.py` and implement the `affine_forward` function.\n", "\n", "Once you are done you can test your implementaion by running the following:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing affine_forward function:\n", "difference: 9.769849468192957e-10\n" ] } ], "source": [ "# Test the affine_forward function\n", "\n", "num_inputs = 2\n", "input_shape = (4, 5, 6)\n", "output_dim = 3\n", "\n", "input_size = num_inputs * np.prod(input_shape)\n", "weight_size = output_dim * np.prod(input_shape)\n", "\n", "x = np.linspace(-0.1, 0.5, num=input_size).reshape(num_inputs, *input_shape)\n", "w = np.linspace(-0.2, 0.3, num=weight_size).reshape(np.prod(input_shape), output_dim)\n", "b = np.linspace(-0.3, 0.1, num=output_dim)\n", "\n", "out, _ = affine_forward(x, w, b)\n", "correct_out = np.array([[ 1.49834967, 1.70660132, 1.91485297],\n", " [ 3.25553199, 3.5141327, 3.77273342]])\n", "\n", "# Compare your output with ours. The error should be around e-9 or less.\n", "print('Testing affine_forward function:')\n", "print('difference: ', rel_error(out, correct_out))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Affine layer: backward\n", "Now implement the `affine_backward` function and test your implementation using numeric gradient checking." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing affine_backward function:\n", "dx error: 5.399100368651805e-11\n", "dw error: 9.904211865398145e-11\n", "db error: 2.4122867568119087e-11\n" ] } ], "source": [ "# Test the affine_backward function\n", "np.random.seed(231)\n", "x = np.random.randn(10, 2, 3)\n", "w = np.random.randn(6, 5)\n", "b = np.random.randn(5)\n", "dout = np.random.randn(10, 5)\n", "\n", "dx_num = eval_numerical_gradient_array(lambda x: affine_forward(x, w, b)[0], x, dout)\n", "dw_num = eval_numerical_gradient_array(lambda w: affine_forward(x, w, b)[0], w, dout)\n", "db_num = eval_numerical_gradient_array(lambda b: affine_forward(x, w, b)[0], b, dout)\n", "\n", "_, cache = affine_forward(x, w, b)\n", "dx, dw, db = affine_backward(dout, cache)\n", "\n", "# The error should be around e-10 or less\n", "print('Testing affine_backward function:')\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dw error: ', rel_error(dw_num, dw))\n", "print('db error: ', rel_error(db_num, db))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ReLU activation: forward\n", "Implement the forward pass for the ReLU activation function in the `relu_forward` function and test your implementation using the following:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing relu_forward function:\n", "difference: 4.999999798022158e-08\n" ] } ], "source": [ "# Test the relu_forward function\n", "\n", "x = np.linspace(-0.5, 0.5, num=12).reshape(3, 4)\n", "\n", "out, _ = relu_forward(x)\n", "correct_out = np.array([[ 0., 0., 0., 0., ],\n", " [ 0., 0., 0.04545455, 0.13636364,],\n", " [ 0.22727273, 0.31818182, 0.40909091, 0.5, ]])\n", "\n", "# Compare your output with ours. The error should be on the order of e-8\n", "print('Testing relu_forward function:')\n", "print('difference: ', rel_error(out, correct_out))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ReLU activation: backward\n", "Now implement the backward pass for the ReLU activation function in the `relu_backward` function and test your implementation using numeric gradient checking:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing relu_backward function:\n", "dx error: 3.2756349136310288e-12\n" ] } ], "source": [ "np.random.seed(231)\n", "x = np.random.randn(10, 10)\n", "dout = np.random.randn(*x.shape)\n", "\n", "dx_num = eval_numerical_gradient_array(lambda x: relu_forward(x)[0], x, dout)\n", "\n", "_, cache = relu_forward(x)\n", "dx = relu_backward(dout, cache)\n", "\n", "# The error should be on the order of e-12\n", "print('Testing relu_backward function:')\n", "print('dx error: ', rel_error(dx_num, dx))" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 1: \n", "\n", "We've only asked you to implement ReLU, but there are a number of different activation functions that one could use in neural networks, each with its pros and cons. In particular, an issue commonly seen with activation functions is getting zero (or close to zero) gradient flow during backpropagation. Which of the following activation functions have this problem? If you consider these functions in the one dimensional case, what types of input would lead to this behaviour?\n", "1. Sigmoid\n", "2. ReLU\n", "3. Leaky ReLU\n", "\n", "## Answer:\n", "[1]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# \"Sandwich\" layers\n", "There are some common patterns of layers that are frequently used in neural nets. For example, affine layers are frequently followed by a ReLU nonlinearity. To make these common patterns easy, we define several convenience layers in the file `cs231n/layer_utils.py`.\n", "\n", "For now take a look at the `affine_relu_forward` and `affine_relu_backward` functions, and run the following to numerically gradient check the backward pass:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing affine_relu_forward and affine_relu_backward:\n", "dx error: 2.299579177309368e-11\n", "dw error: 8.162011105764925e-11\n", "db error: 7.826724021458994e-12\n" ] } ], "source": [ "from cs231n.layer_utils import affine_relu_forward, affine_relu_backward\n", "np.random.seed(231)\n", "x = np.random.randn(2, 3, 4)\n", "w = np.random.randn(12, 10)\n", "b = np.random.randn(10)\n", "dout = np.random.randn(2, 10)\n", "\n", "out, cache = affine_relu_forward(x, w, b)\n", "dx, dw, db = affine_relu_backward(dout, cache)\n", "\n", "dx_num = eval_numerical_gradient_array(lambda x: affine_relu_forward(x, w, b)[0], x, dout)\n", "dw_num = eval_numerical_gradient_array(lambda w: affine_relu_forward(x, w, b)[0], w, dout)\n", "db_num = eval_numerical_gradient_array(lambda b: affine_relu_forward(x, w, b)[0], b, dout)\n", "\n", "# Relative error should be around e-10 or less\n", "print('Testing affine_relu_forward and affine_relu_backward:')\n", "print('dx error: ', rel_error(dx_num, dx))\n", "print('dw error: ', rel_error(dw_num, dw))\n", "print('db error: ', rel_error(db_num, db))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Loss layers: Softmax and SVM\n", "You implemented these loss functions in the last assignment, so we'll give them to you for free here. You should still make sure you understand how they work by looking at the implementations in `cs231n/layers.py`.\n", "\n", "You can make sure that the implementations are correct by running the following:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing svm_loss:\n", "loss: 8.999602749096233\n", "dx error: 1.4021566006651672e-09\n", "\n", "Testing softmax_loss:\n", "loss: 2.302545844500738\n", "dx error: 9.384673161989355e-09\n" ] } ], "source": [ "np.random.seed(231)\n", "num_classes, num_inputs = 10, 50\n", "x = 0.001 * np.random.randn(num_inputs, num_classes)\n", "y = np.random.randint(num_classes, size=num_inputs)\n", "\n", "dx_num = eval_numerical_gradient(lambda x: svm_loss(x, y)[0], x, verbose=False)\n", "loss, dx = svm_loss(x, y)\n", "\n", "# Test svm_loss function. Loss should be around 9 and dx error should be around the order of e-9\n", "print('Testing svm_loss:')\n", "print('loss: ', loss)\n", "print('dx error: ', rel_error(dx_num, dx))\n", "\n", "dx_num = eval_numerical_gradient(lambda x: softmax_loss(x, y)[0], x, verbose=False)\n", "loss, dx = softmax_loss(x, y)\n", "\n", "# Test softmax_loss function. Loss should be close to 2.3 and dx error should be around e-8\n", "print('\\nTesting softmax_loss:')\n", "print('loss: ', loss)\n", "print('dx error: ', rel_error(dx_num, dx))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Two-layer network\n", "In the previous assignment you implemented a two-layer neural network in a single monolithic class. Now that you have implemented modular versions of the necessary layers, you will reimplement the two layer network using these modular implementations.\n", "\n", "Open the file `cs231n/classifiers/fc_net.py` and complete the implementation of the `TwoLayerNet` class. This class will serve as a model for the other networks you will implement in this assignment, so read through it to make sure you understand the API. You can run the cell below to test your implementation." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Testing initialization ... \n", "Testing test-time forward pass ... \n", "Testing training loss (no regularization)\n", "Running numeric gradient check with reg = 0.0\n", "W1 relative error: 1.83e-08\n", "W2 relative error: 3.12e-10\n", "b1 relative error: 9.83e-09\n", "b2 relative error: 4.33e-10\n", "Running numeric gradient check with reg = 0.7\n", "W1 relative error: 2.53e-07\n", "W2 relative error: 7.98e-08\n", "b1 relative error: 1.35e-08\n", "b2 relative error: 7.76e-10\n" ] } ], "source": [ "np.random.seed(231)\n", "N, D, H, C = 3, 5, 50, 7\n", "X = np.random.randn(N, D)\n", "y = np.random.randint(C, size=N)\n", "\n", "std = 1e-3\n", "model = TwoLayerNet(input_dim=D, hidden_dim=H, num_classes=C, weight_scale=std)\n", "\n", "print('Testing initialization ... ')\n", "W1_std = abs(model.params['W1'].std() - std)\n", "b1 = model.params['b1']\n", "W2_std = abs(model.params['W2'].std() - std)\n", "b2 = model.params['b2']\n", "assert W1_std < std / 10, 'First layer weights do not seem right'\n", "assert np.all(b1 == 0), 'First layer biases do not seem right'\n", "assert W2_std < std / 10, 'Second layer weights do not seem right'\n", "assert np.all(b2 == 0), 'Second layer biases do not seem right'\n", "\n", "print('Testing test-time forward pass ... ')\n", "model.params['W1'] = np.linspace(-0.7, 0.3, num=D*H).reshape(D, H)\n", "model.params['b1'] = np.linspace(-0.1, 0.9, num=H)\n", "model.params['W2'] = np.linspace(-0.3, 0.4, num=H*C).reshape(H, C)\n", "model.params['b2'] = np.linspace(-0.9, 0.1, num=C)\n", "X = np.linspace(-5.5, 4.5, num=N*D).reshape(D, N).T\n", "scores = model.loss(X)\n", "correct_scores = np.asarray(\n", " [[11.53165108, 12.2917344, 13.05181771, 13.81190102, 14.57198434, 15.33206765, 16.09215096],\n", " [12.05769098, 12.74614105, 13.43459113, 14.1230412, 14.81149128, 15.49994135, 16.18839143],\n", " [12.58373087, 13.20054771, 13.81736455, 14.43418138, 15.05099822, 15.66781506, 16.2846319 ]])\n", "scores_diff = np.abs(scores - correct_scores).sum()\n", "assert scores_diff < 1e-6, 'Problem with test-time forward pass'\n", "\n", "print('Testing training loss (no regularization)')\n", "y = np.asarray([0, 5, 1])\n", "loss, grads = model.loss(X, y)\n", "correct_loss = 3.4702243556\n", "assert abs(loss - correct_loss) < 1e-10, 'Problem with training-time loss'\n", "\n", "model.reg = 1.0\n", "loss, grads = model.loss(X, y)\n", "correct_loss = 26.5948426952\n", "assert abs(loss - correct_loss) < 1e-10, 'Problem with regularization loss'\n", "\n", "# Errors should be around e-7 or less\n", "for reg in [0.0, 0.7]:\n", " print('Running numeric gradient check with reg = ', reg)\n", " model.reg = reg\n", " loss, grads = model.loss(X, y)\n", "\n", " for name in sorted(grads):\n", " f = lambda _: model.loss(X, y)[0]\n", " grad_num = eval_numerical_gradient(f, model.params[name], verbose=False)\n", " print('%s relative error: %.2e' % (name, rel_error(grad_num, grads[name])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Solver\n", "In the previous assignment, the logic for training models was coupled to the models themselves. Following a more modular design, for this assignment we have split the logic for training models into a separate class.\n", "\n", "Open the file `cs231n/solver.py` and read through it to familiarize yourself with the API. After doing so, use a `Solver` instance to train a `TwoLayerNet` that achieves at least `50%` accuracy on the validation set." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Iteration 1 / 4900) loss: 2.304060\n", "(Epoch 0 / 10) train acc: 0.116000; val_acc: 0.094000\n", "(Iteration 101 / 4900) loss: 1.829613\n", "(Iteration 201 / 4900) loss: 1.857390\n", "(Iteration 301 / 4900) loss: 1.744448\n", "(Iteration 401 / 4900) loss: 1.420187\n", "(Epoch 1 / 10) train acc: 0.407000; val_acc: 0.422000\n", "(Iteration 501 / 4900) loss: 1.565913\n", "(Iteration 601 / 4900) loss: 1.700510\n", "(Iteration 701 / 4900) loss: 1.732213\n", "(Iteration 801 / 4900) loss: 1.688361\n", "(Iteration 901 / 4900) loss: 1.439529\n", "(Epoch 2 / 10) train acc: 0.497000; val_acc: 0.468000\n", "(Iteration 1001 / 4900) loss: 1.385772\n", "(Iteration 1101 / 4900) loss: 1.278401\n", "(Iteration 1201 / 4900) loss: 1.641580\n", "(Iteration 1301 / 4900) loss: 1.438847\n", "(Iteration 1401 / 4900) loss: 1.172536\n", "(Epoch 3 / 10) train acc: 0.490000; val_acc: 0.466000\n", "(Iteration 1501 / 4900) loss: 1.346286\n", "(Iteration 1601 / 4900) loss: 1.268492\n", "(Iteration 1701 / 4900) loss: 1.318215\n", "(Iteration 1801 / 4900) loss: 1.395750\n", "(Iteration 1901 / 4900) loss: 1.338233\n", "(Epoch 4 / 10) train acc: 0.532000; val_acc: 0.497000\n", "(Iteration 2001 / 4900) loss: 1.343165\n", "(Iteration 2101 / 4900) loss: 1.393173\n", "(Iteration 2201 / 4900) loss: 1.276734\n", "(Iteration 2301 / 4900) loss: 1.287951\n", "(Iteration 2401 / 4900) loss: 1.352778\n", "(Epoch 5 / 10) train acc: 0.525000; val_acc: 0.475000\n", "(Iteration 2501 / 4900) loss: 1.390234\n", "(Iteration 2601 / 4900) loss: 1.276361\n", "(Iteration 2701 / 4900) loss: 1.111768\n", "(Iteration 2801 / 4900) loss: 1.271688\n", "(Iteration 2901 / 4900) loss: 1.272039\n", "(Epoch 6 / 10) train acc: 0.546000; val_acc: 0.509000\n", "(Iteration 3001 / 4900) loss: 1.304489\n", "(Iteration 3101 / 4900) loss: 1.346667\n", "(Iteration 3201 / 4900) loss: 1.325510\n", "(Iteration 3301 / 4900) loss: 1.392728\n", "(Iteration 3401 / 4900) loss: 1.402001\n", "(Epoch 7 / 10) train acc: 0.567000; val_acc: 0.505000\n", "(Iteration 3501 / 4900) loss: 1.319024\n", "(Iteration 3601 / 4900) loss: 1.153287\n", "(Iteration 3701 / 4900) loss: 1.180922\n", "(Iteration 3801 / 4900) loss: 1.093164\n", "(Iteration 3901 / 4900) loss: 1.135902\n", "(Epoch 8 / 10) train acc: 0.568000; val_acc: 0.490000\n", "(Iteration 4001 / 4900) loss: 1.191735\n", "(Iteration 4101 / 4900) loss: 1.359396\n", "(Iteration 4201 / 4900) loss: 1.227283\n", "(Iteration 4301 / 4900) loss: 1.024113\n", "(Iteration 4401 / 4900) loss: 1.327583\n", "(Epoch 9 / 10) train acc: 0.592000; val_acc: 0.504000\n", "(Iteration 4501 / 4900) loss: 0.963330\n", "(Iteration 4601 / 4900) loss: 1.445619\n", "(Iteration 4701 / 4900) loss: 1.007542\n", "(Iteration 4801 / 4900) loss: 1.005175\n", "(Epoch 10 / 10) train acc: 0.611000; val_acc: 0.512000\n" ] } ], "source": [ "model = TwoLayerNet()\n", "solver = None\n", "\n", "##############################################################################\n", "# TODO: Use a Solver instance to train a TwoLayerNet that achieves at least #\n", "# 50% accuracy on the validation set. #\n", "##############################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "solver = Solver(model, data,\n", " update_rule='sgd',\n", " optim_config={\n", " 'learning_rate': 1e-3,\n", " },\n", " lr_decay=0.95,\n", " num_epochs=10, batch_size=100,\n", " print_every=100)\n", "solver.train()\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "##############################################################################\n", "# END OF YOUR CODE #\n", "##############################################################################" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Run this cell to visualize training loss and train / val accuracy\n", "\n", "plt.subplot(2, 1, 1)\n", "plt.title('Training loss')\n", "plt.plot(solver.loss_history, 'o')\n", "plt.xlabel('Iteration')\n", "\n", "plt.subplot(2, 1, 2)\n", "plt.title('Accuracy')\n", "plt.plot(solver.train_acc_history, '-o', label='train')\n", "plt.plot(solver.val_acc_history, '-o', label='val')\n", "plt.plot([0.5] * len(solver.val_acc_history), 'k--')\n", "plt.xlabel('Epoch')\n", "plt.legend(loc='lower right')\n", "plt.gcf().set_size_inches(15, 12)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Multilayer network\n", "Next you will implement a fully-connected network with an arbitrary number of hidden layers.\n", "\n", "Read through the `FullyConnectedNet` class in the file `cs231n/classifiers/fc_net.py`.\n", "\n", "Implement the initialization, the forward pass, and the backward pass. For the moment don't worry about implementing dropout or batch/layer normalization; we will add those features soon." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial loss and gradient check\n", "\n", "As a sanity check, run the following to check the initial loss and to gradient check the network both with and without regularization. Do the initial losses seem reasonable?\n", "\n", "For gradient checking, you should expect to see errors around 1e-7 or less." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running check with reg = 0\n", "Initial loss: 2.3004790897684924\n", "W1 relative error: 1.48e-07\n", "W2 relative error: 2.21e-05\n", "W3 relative error: 3.53e-07\n", "b1 relative error: 5.38e-09\n", "b2 relative error: 2.09e-09\n", "b3 relative error: 5.80e-11\n", "Running check with reg = 3.14\n", "Initial loss: 7.052114776533016\n", "W1 relative error: 3.90e-09\n", "W2 relative error: 6.87e-08\n", "W3 relative error: 2.13e-08\n", "b1 relative error: 1.48e-08\n", "b2 relative error: 1.72e-09\n", "b3 relative error: 1.57e-10\n" ] } ], "source": [ "np.random.seed(231)\n", "N, D, H1, H2, C = 2, 15, 20, 30, 10\n", "X = np.random.randn(N, D)\n", "y = np.random.randint(C, size=(N,))\n", "\n", "for reg in [0, 3.14]:\n", " print('Running check with reg = ', reg)\n", " model = FullyConnectedNet([H1, H2], input_dim=D, num_classes=C,\n", " reg=reg, weight_scale=5e-2, dtype=np.float64)\n", "\n", " loss, grads = model.loss(X, y)\n", " print('Initial loss: ', loss)\n", " \n", " # Most of the errors should be on the order of e-7 or smaller. \n", " # NOTE: It is fine however to see an error for W2 on the order of e-5\n", " # for the check when reg = 0.0\n", " for name in sorted(grads):\n", " f = lambda _: model.loss(X, y)[0]\n", " grad_num = eval_numerical_gradient(f, model.params[name], verbose=False, h=1e-5)\n", " print('%s relative error: %.2e' % (name, rel_error(grad_num, grads[name])))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As another sanity check, make sure you can overfit a small dataset of 50 images. First we will try a three-layer network with 100 units in each hidden layer. In the following cell, tweak the **learning rate** and **weight initialization scale** to overfit and achieve 100% training accuracy within 20 epochs." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Iteration 1 / 40) loss: 357.428290\n", "(Epoch 0 / 20) train acc: 0.220000; val_acc: 0.111000\n", "(Epoch 1 / 20) train acc: 0.380000; val_acc: 0.141000\n", "(Epoch 2 / 20) train acc: 0.520000; val_acc: 0.138000\n", "(Epoch 3 / 20) train acc: 0.740000; val_acc: 0.130000\n", "(Epoch 4 / 20) train acc: 0.820000; val_acc: 0.153000\n", "(Epoch 5 / 20) train acc: 0.860000; val_acc: 0.175000\n", "(Iteration 11 / 40) loss: 6.726589\n", "(Epoch 6 / 20) train acc: 0.940000; val_acc: 0.163000\n", "(Epoch 7 / 20) train acc: 0.960000; val_acc: 0.166000\n", "(Epoch 8 / 20) train acc: 0.960000; val_acc: 0.164000\n", "(Epoch 9 / 20) train acc: 0.980000; val_acc: 0.162000\n", "(Epoch 10 / 20) train acc: 0.980000; val_acc: 0.162000\n", "(Iteration 21 / 40) loss: 0.800243\n", "(Epoch 11 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 12 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 13 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 14 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 15 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Iteration 31 / 40) loss: 0.000000\n", "(Epoch 16 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 17 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 18 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 19 / 20) train acc: 1.000000; val_acc: 0.158000\n", "(Epoch 20 / 20) train acc: 1.000000; val_acc: 0.158000\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# TODO: Use a three-layer Net to overfit 50 training examples by \n", "# tweaking just the learning rate and initialization scale.\n", "\n", "num_train = 50\n", "small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", "}\n", "\n", "weight_scale = 1e-1 # Experiment with this!\n", "learning_rate = 1e-3 # Experiment with this!\n", "model = FullyConnectedNet([100, 100],\n", " weight_scale=weight_scale, dtype=np.float64)\n", "solver = Solver(model, small_data,\n", " print_every=10, num_epochs=20, batch_size=25,\n", " update_rule='sgd',\n", " optim_config={\n", " 'learning_rate': learning_rate,\n", " }\n", " )\n", "solver.train()\n", "\n", "plt.plot(solver.loss_history, 'o')\n", "plt.title('Training loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Training loss')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now try to use a five-layer network with 100 units on each layer to overfit 50 training examples. Again, you will have to adjust the learning rate and weight initialization scale, but you should be able to achieve 100% training accuracy within 20 epochs." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Iteration 1 / 40) loss: 166.501707\n", "(Epoch 0 / 20) train acc: 0.240000; val_acc: 0.116000\n", "(Epoch 1 / 20) train acc: 0.240000; val_acc: 0.085000\n", "(Epoch 2 / 20) train acc: 0.340000; val_acc: 0.110000\n", "(Epoch 3 / 20) train acc: 0.460000; val_acc: 0.139000\n", "(Epoch 4 / 20) train acc: 0.700000; val_acc: 0.134000\n", "(Epoch 5 / 20) train acc: 0.800000; val_acc: 0.120000\n", "(Iteration 11 / 40) loss: 7.619979\n", "(Epoch 6 / 20) train acc: 0.800000; val_acc: 0.140000\n", "(Epoch 7 / 20) train acc: 0.820000; val_acc: 0.128000\n", "(Epoch 8 / 20) train acc: 0.880000; val_acc: 0.140000\n", "(Epoch 9 / 20) train acc: 0.920000; val_acc: 0.121000\n", "(Epoch 10 / 20) train acc: 0.920000; val_acc: 0.127000\n", "(Iteration 21 / 40) loss: 1.669786\n", "(Epoch 11 / 20) train acc: 0.960000; val_acc: 0.131000\n", "(Epoch 12 / 20) train acc: 0.980000; val_acc: 0.125000\n", "(Epoch 13 / 20) train acc: 1.000000; val_acc: 0.137000\n", "(Epoch 14 / 20) train acc: 1.000000; val_acc: 0.132000\n", "(Epoch 15 / 20) train acc: 1.000000; val_acc: 0.132000\n", "(Iteration 31 / 40) loss: 0.000445\n", "(Epoch 16 / 20) train acc: 1.000000; val_acc: 0.132000\n", "(Epoch 17 / 20) train acc: 1.000000; val_acc: 0.132000\n", "(Epoch 18 / 20) train acc: 1.000000; val_acc: 0.132000\n", "(Epoch 19 / 20) train acc: 1.000000; val_acc: 0.132000\n", "(Epoch 20 / 20) train acc: 1.000000; val_acc: 0.132000\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# TODO: Use a five-layer Net to overfit 50 training examples by \n", "# tweaking just the learning rate and initialization scale.\n", "\n", "num_train = 50\n", "small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", "}\n", "\n", "learning_rate = 5e-4 # Experiment with this!\n", "weight_scale = 1e-1 # Experiment with this!\n", "model = FullyConnectedNet([100, 100, 100, 100],\n", " weight_scale=weight_scale, dtype=np.float64)\n", "solver = Solver(model, small_data,\n", " print_every=10, num_epochs=20, batch_size=25,\n", " update_rule='sgd',\n", " optim_config={\n", " 'learning_rate': learning_rate,\n", " }\n", " )\n", "solver.train()\n", "\n", "plt.plot(solver.loss_history, 'o')\n", "plt.title('Training loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Training loss')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 2: \n", "Did you notice anything about the comparative difficulty of training the three-layer net vs training the five layer net? In particular, based on your experience, which network seemed more sensitive to the initialization scale? Why do you think that is the case?\n", "\n", "## Answer:\n", "[FILL THIS IN]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Update rules\n", "So far we have used vanilla stochastic gradient descent (SGD) as our update rule. More sophisticated update rules can make it easier to train deep networks. We will implement a few of the most commonly used update rules and compare them to vanilla SGD." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# SGD+Momentum\n", "Stochastic gradient descent with momentum is a widely used update rule that tends to make deep networks converge faster than vanilla stochastic gradient descent. See the Momentum Update section at http://cs231n.github.io/neural-networks-3/#sgd for more information.\n", "\n", "Open the file `cs231n/optim.py` and read the documentation at the top of the file to make sure you understand the API. Implement the SGD+momentum update rule in the function `sgd_momentum` and run the following to check your implementation. You should see errors less than e-8." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "next_w error: 8.882347033505819e-09\n", "velocity error: 4.269287743278663e-09\n" ] } ], "source": [ "from cs231n.optim import sgd_momentum\n", "\n", "N, D = 4, 5\n", "w = np.linspace(-0.4, 0.6, num=N*D).reshape(N, D)\n", "dw = np.linspace(-0.6, 0.4, num=N*D).reshape(N, D)\n", "v = np.linspace(0.6, 0.9, num=N*D).reshape(N, D)\n", "\n", "config = {'learning_rate': 1e-3, 'velocity': v}\n", "next_w, _ = sgd_momentum(w, dw, config=config)\n", "\n", "expected_next_w = np.asarray([\n", " [ 0.1406, 0.20738947, 0.27417895, 0.34096842, 0.40775789],\n", " [ 0.47454737, 0.54133684, 0.60812632, 0.67491579, 0.74170526],\n", " [ 0.80849474, 0.87528421, 0.94207368, 1.00886316, 1.07565263],\n", " [ 1.14244211, 1.20923158, 1.27602105, 1.34281053, 1.4096 ]])\n", "expected_velocity = np.asarray([\n", " [ 0.5406, 0.55475789, 0.56891579, 0.58307368, 0.59723158],\n", " [ 0.61138947, 0.62554737, 0.63970526, 0.65386316, 0.66802105],\n", " [ 0.68217895, 0.69633684, 0.71049474, 0.72465263, 0.73881053],\n", " [ 0.75296842, 0.76712632, 0.78128421, 0.79544211, 0.8096 ]])\n", "\n", "# Should see relative errors around e-8 or less\n", "print('next_w error: ', rel_error(next_w, expected_next_w))\n", "print('velocity error: ', rel_error(expected_velocity, config['velocity']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once you have done so, run the following to train a six-layer network with both SGD and SGD+momentum. You should see the SGD+momentum update rule converge faster." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "running with sgd\n", "(Iteration 1 / 200) loss: 2.559978\n", "(Epoch 0 / 5) train acc: 0.104000; val_acc: 0.107000\n", "(Iteration 11 / 200) loss: 2.356069\n", "(Iteration 21 / 200) loss: 2.214091\n", "(Iteration 31 / 200) loss: 2.205928\n", "(Epoch 1 / 5) train acc: 0.225000; val_acc: 0.193000\n", "(Iteration 41 / 200) loss: 2.132095\n", "(Iteration 51 / 200) loss: 2.118950\n", "(Iteration 61 / 200) loss: 2.116443\n", "(Iteration 71 / 200) loss: 2.132549\n", "(Epoch 2 / 5) train acc: 0.298000; val_acc: 0.260000\n", "(Iteration 81 / 200) loss: 1.977227\n", "(Iteration 91 / 200) loss: 2.007528\n", "(Iteration 101 / 200) loss: 2.004762\n", "(Iteration 111 / 200) loss: 1.885342\n", "(Epoch 3 / 5) train acc: 0.343000; val_acc: 0.287000\n", "(Iteration 121 / 200) loss: 1.891516\n", "(Iteration 131 / 200) loss: 1.923677\n", "(Iteration 141 / 200) loss: 1.957744\n", "(Iteration 151 / 200) loss: 1.966736\n", "(Epoch 4 / 5) train acc: 0.322000; val_acc: 0.305000\n", "(Iteration 161 / 200) loss: 1.801483\n", "(Iteration 171 / 200) loss: 1.973780\n", "(Iteration 181 / 200) loss: 1.666573\n", "(Iteration 191 / 200) loss: 1.909494\n", "(Epoch 5 / 5) train acc: 0.372000; val_acc: 0.319000\n", "\n", "running with sgd_momentum\n", "(Iteration 1 / 200) loss: 3.153777\n", "(Epoch 0 / 5) train acc: 0.099000; val_acc: 0.088000\n", "(Iteration 11 / 200) loss: 2.227203\n", "(Iteration 21 / 200) loss: 2.125706\n", "(Iteration 31 / 200) loss: 1.932695\n", "(Epoch 1 / 5) train acc: 0.307000; val_acc: 0.260000\n", "(Iteration 41 / 200) loss: 1.946488\n", "(Iteration 51 / 200) loss: 1.778583\n", "(Iteration 61 / 200) loss: 1.758119\n", "(Iteration 71 / 200) loss: 1.849137\n", "(Epoch 2 / 5) train acc: 0.382000; val_acc: 0.322000\n", "(Iteration 81 / 200) loss: 2.048671\n", "(Iteration 91 / 200) loss: 1.693223\n", "(Iteration 101 / 200) loss: 1.511693\n", "(Iteration 111 / 200) loss: 1.390754\n", "(Epoch 3 / 5) train acc: 0.458000; val_acc: 0.338000\n", "(Iteration 121 / 200) loss: 1.670614\n", "(Iteration 131 / 200) loss: 1.540272\n", "(Iteration 141 / 200) loss: 1.597365\n", "(Iteration 151 / 200) loss: 1.609851\n", "(Epoch 4 / 5) train acc: 0.490000; val_acc: 0.327000\n", "(Iteration 161 / 200) loss: 1.472687\n", "(Iteration 171 / 200) loss: 1.378620\n", "(Iteration 181 / 200) loss: 1.378175\n", "(Iteration 191 / 200) loss: 1.306440\n", "(Epoch 5 / 5) train acc: 0.529000; val_acc: 0.369000\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:42: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:45: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:39: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:42: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:45: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:49: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n" ] }, { "data": { "image/png": "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gQfwnve8x/W4s2bNwuWXX44777wTdXV1A69VHCE699xzMXbsWADAY489hosvvhgjR47Ee97zHlxwwQWRvDdjMafBZ/VcF/c58cQT8YEPfADHHHMMhg8fjve+973Ys2cPtmzZgosvvhhHHHEERo0ahYULF+Kxxx4DAEybNg0nnngiampq8IEPfABnn302RAQnnnjiQOD10EMPoaWlBSeffDLOOOMMvPvuu3j11VcBAGeffTbGjBmDESNG4IQTTsAf//hH4/Pu134iokrGAI6IqMyWLpiB+lztoG31uVosXTAjkuOrquP2+fPn49FHH0VjYyOuuOIK3HHHHRg7dix27tyJM844Az/4wQ9w9dVXux5306ZN+MIXvoCtW7figx/8IHp7e11fC0jJ+lsxp8Fn9VwPHz4cAFBTUzPw7+LPfq9l3996rN7eXgD583Lvvfdix44d2LFjB1599VW8//3vH/L82tragedY1dXVob+/f+Bn+0Lcfu0nIqpkDOCIiMrsotmNuHHhiWhsqIcAaGyox40LT8RFsxsjOf78+fOxdu1a9PX1Yf/+/Xj00UcxZ84c/PGPf8RRRx2Ff/zHf8SnP/1pbNu2DR0dHejv78cnPvEJ/Ou//iu2bdvmeMz+/n7s2bMHZ555JlauXInOzk68/fbbmDdvHlpb8wVBHnroIbz55psDbVi/fj26urrw1ltv4f7774/kvRmbtQg4/2ZgzBQAkv/7/Jsjy6So1HM9f/58bNiwAYcOHcI777yD9evX42/+5m8CP3/BggX43ve+NxAIbt++3fc5uVwOPT09AICjjz4ar7/+Og4cOIC//OUv+OUvf1naGyEiqkCcA0dElICLZjdGFrDZXXzxxfjd736Hk046CSKClStXYuLEifjpT3+KVatWIZfLYdSoUbjjjjvQ3t6Oq666amC048Ybb3Q8Zl9fHz71qU/h4MGDUFUsWbIEDQ0N+PrXv47LLrsMa9euxemnn45jjjkGo0ePximnnIJLLrkEJ598Mo499lijzn/kZi2KLfW9Us/1KaecgiuvvBJz5swBAFx99dWYPXu279y0on/5l3/Btddei1mzZkFVcdxxx/kGYYsXL8asWbNwyimn4K677sKKFStw2mmnYdq0aTj++OPDviUiooohXmkSSWlqatK2trakm0FEFNjzzz8/kCJWTf7yl7+gtrYWdXV1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qYi7XthKrasJgKKyWu56YSsAS2el9uk+m7/sf+c732mzvampieDg4C5v99prr/Xp8aSdQZgio/fUfz388MNcd911REVF+boUEemr2lIozYPSfVC2z/m3NM+5XFYATfVeBxuITYGECZB5JsRPcC7HT4Dnvw6V+zvef1zaED2RvlOAE5ER4ycvb2dHcUWX+zfll9HQ5G6zrdbVxO3PbWHFuvxOb3PyuFH8+KKpXd7nnXfeyZ49e5g5cyahoaHExMSQkpLC5s2b2bFjB0uXLqWgoIC6ujpuvfVWli1bBkBGRgYbNmygqqqK888/n/nz5/Phhx+SmprKiy++SGRkZKeP9/vf/54nn3yShoYGTjjhBP785z8TFRXFwYMHufHGG9m7dy8Ajz/+OGeccQbPPvssv/rVrzDGMGPGDP785z93er//+Mc/+MlPfkJwcDBxcXG899571NTUcMMNN7Bz505OOukk8vLyePTRR8nKyuKPf/wjDzzwACkpKUyePJnw8PAuX6N++eedcGBr1/sL17f7ZY4T5l68GTb+qfPbHDcdzn+wy7vUe3rs9/SGG24gMjKSnTt3sm/fPv74xz/ypz8bhUPSAAAgAElEQVT9iY8++ojs7GyeeeYZAFasWMH999+PtZYLLriAhx56CICYmBhuuukm3nzzTRISErj//vu5/fbbyc/P5+GHH+biiy+mqamJO++8kzVr1lBfX89NN93Et771LdasWcO9995LUlIS27ZtY/bs2fzlL3/hd7/7HcXFxZx99tkkJSXxzjvvEBMTQ1VVFQDPPfccr7zyCs8880yP6xeRQeCqg7L81lDm/W9pPtSXtz0+It4JZclTYcoXPQEtAxIyIH48hHTxs+rc+9r+gQ8gNBIW3TMoT2sgKcCJiHi0D2/H2t4TDz74INu2bWPz5s2sWbOGCy64gG3btrX0inr66adJTEyktraWOXPm8KUvfYnRo0e3uY/du3ezYsUKfv/733PFFVfw/PPPc91113X6eJdddhnf/OY3Abj77rt56qmn+O53v8stt9zCWWedxapVq2hqaqKqqort27fz85//nLVr15KUlMTRo0e7fB733Xcfr7/+OqmpqS3TAB977DESEhLYsmUL27ZtY+bMmQDs37+fH//4x2zcuJG4uDjOPvtsZs2a1efXsF/ah7djbe8Bvac9e09LS0t5++23eemll7joootYu3Ytf/jDH5gzZw6bN29m7Nix3HHHHWzcuJGEhATOO+88Vq9ezdKlS6murmbhwoU89NBDXHrppdx99938+9//ZseOHVx//fVcfPHFPPXUU8TFxbF+/Xrq6+uZN28e5513HgCbNm1i+/btjBs3jnnz5rF27VpuueUWfv3rX/POO++QlJR0zPf5WPU3vzYi0kvuJmeaY0sw2+cV0PZB1YG2x4dEQHy6M2o2/rTWEbSEDOdyRFzf6miehfHWfc60ybg0J7wN8wVMQAFOREaQ7kbKAOY9+DZFZbUdtqfGR/L3b50+IDXMnTu3TaPf3/72t6xatQqAgoICdu/e3eHLfmZmZsuXxdmzZ5OXl9fl/W/bto27776bsrIyqqqqWLx4MQBvv/02zz77LEDLiMuzzz7L5Zdf3vJlNjExscv7nTdvHjfccANXXHEFl112GQAffPABt956KwDTpk1jxowZAOTk5LBw4ULGjBkDwJVXXsmuXbt69gL1VjcjZYBzzlt5QcftcePha68OSAl6Tzt30UUXYYxh+vTpJCcnM336dACmTp1KXl4e+/bta3Of1157Le+99x5Lly4lLCyMJUuWADB9+nTCw8MJDQ1l+vTpLa/VG2+8wZYtW3juuecAKC8vZ/fu3YSFhTF37lzS0pxpUDNnziQvL4/58+d3W29v61eAE+mCtVBz1BPQ8joGtPJCcLtajzdBMCrVCWUnfMEroHlCWvRYCBqkZTtmXOEXga09BTgREY/bFk9pcw4cQGRoMLctnjJgjxEdHd1yec2aNbz55pt89NFHREVFsXDhwk4bAXtPVQsODqa2tmPIbHbDDTewevVqTjnlFJ555hnWrFnT5bHW2h73rnriiSfIycnh1VdfZebMmWzevBlrbZfHD5ueWIvuGfQpMnpPO9f8HIOCgto836CgIBobGwkJ6forSGhoaMvjed+++bbgPNff/e53LYG22Zo1azq8vs236e45tX+fjlW/yIjWUN06zbF9QCvbBw1VbY+PGu2EsnEzYerStgFtVBqEhPngSfgvrUIpIuKxdFYqD1w2ndT4SAzOyNsDl03v8wImALGxsVRWVna6r7y8nISEBKKioti5cycff/xxnx+nWWVlJSkpKbhcLv7617+2bF+0aBGPP/444Cy2UVFRwaJFi1i5ciUlJSUA3U6327NnD9nZ2dx3330k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BTiRgexwcduwVrQRGvw/oCWmw6h5MPkyyJkPa26Dw0VHXiMtp2drPgFqYiIichzah7djHe+MO++8kwcffLDl/r333st9993HwoULmTt3LjNmzOBPf/pTp65VVVXV4fMeeeQRZs6cyaxZs7jhhhsA2L9/P5/85CeZNWsWs2bN4q233op43erqapYsWcKsWbOYPn06TzzxBADPPvssU6ZM4eyzz+bWW29l6dKlAJSWlnLJJZcwZ84cvvCFL+CcO6HPzUlrH96OdbwTBvrXa9euXUyZMoXPfe5zTJ8+neuuu46XX36ZBQsWMHHiRN555x0AysrKWL58OTNnzuSMM84gPz+/5fP1mc98hksuuYS8vDxWrlzJt771LWbMmMHixYtpbGwEYP369Zx33nnMmzePRYsWUVxcDMD555/PnXfeyWmnncakSZN44403aGho4O677+aJJ55g9uzZPPHEE9x777384Ac/aKl7+vTp7Nq1q9P1i0gvV18Fu96EN38MT1wPPzwFfjjFu/3Xn3rBbda18Mmfwy3r4c5dcMNKuPCfYNIiuOg+CCS1vWYgyZtm39s553rd27x585yISE/54IMPOv3Ys76/1o25c80Rb2d9f+0Jv/6GDRvcueee23J/6tSpbvfu3a6iosI551xJSYkbP368C4VCzjnnUlJSOrxWY2NjxOe99957btKkSa6kpMQ551xpaalzzrmrrrrK/ehHP3LOOdfU1OTKy8sjXvfJJ590n/vc51rul5eXu9raWpeTk+M+/vhj55xz11xzjVuyZIlzzrmvfvWr7r777nPOObdmzRoHtLx2j/rhNOfuGXzk2w+nnfAlB/rXa+fOnS42Ntbl5+e7YDDo5s6d62666SYXCoXcqlWr3OWXX+6cc+6WW25x9957r3POubVr17pZs2Y555y755573IIFC1xDQ4PbtGmTS0pKcs8++6xzzrnly5e7p556yjU0NLgzzzzTHThwwDnn3OOPP+5uuukm55xz5513nvvGN77hnHPumWeecQsXLnTOOfeb3/zGfeUrX2mp85577nEPPPBAy/1p06a5nTt3drr+9o7n/wkR6WLBJuf2vefcut8696dbnHvwLOfuTW/9P/3HM537w/9x7q8POrfnHecaajt33c1P+D8n0rz3m5/o3o/jOAHrXISspCmUIiLH4Y5Fk9usgQNICsRyx6LJ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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "num_train = 4000\n", "small_data = {\n", " 'X_train': data['X_train'][:num_train],\n", " 'y_train': data['y_train'][:num_train],\n", " 'X_val': data['X_val'],\n", " 'y_val': data['y_val'],\n", "}\n", "\n", "solvers = {}\n", "\n", "for update_rule in ['sgd', 'sgd_momentum']:\n", " print('running with ', update_rule)\n", " model = FullyConnectedNet([100, 100, 100, 100, 100], weight_scale=5e-2)\n", "\n", " solver = Solver(model, small_data,\n", " num_epochs=5, batch_size=100,\n", " update_rule=update_rule,\n", " optim_config={\n", " 'learning_rate': 5e-3,\n", " },\n", " verbose=True)\n", " solvers[update_rule] = solver\n", " solver.train()\n", " print()\n", "\n", "plt.subplot(3, 1, 1)\n", "plt.title('Training loss')\n", "plt.xlabel('Iteration')\n", "\n", "plt.subplot(3, 1, 2)\n", "plt.title('Training accuracy')\n", "plt.xlabel('Epoch')\n", "\n", "plt.subplot(3, 1, 3)\n", "plt.title('Validation accuracy')\n", "plt.xlabel('Epoch')\n", "\n", "for update_rule, solver in solvers.items():\n", " plt.subplot(3, 1, 1)\n", " plt.plot(solver.loss_history, 'o', label=\"loss_%s\" % update_rule)\n", " \n", " plt.subplot(3, 1, 2)\n", " plt.plot(solver.train_acc_history, '-o', label=\"train_acc_%s\" % update_rule)\n", "\n", " plt.subplot(3, 1, 3)\n", " plt.plot(solver.val_acc_history, '-o', label=\"val_acc_%s\" % update_rule)\n", " \n", "for i in [1, 2, 3]:\n", " plt.subplot(3, 1, i)\n", " plt.legend(loc='upper center', ncol=4)\n", "plt.gcf().set_size_inches(15, 15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# RMSProp and Adam\n", "RMSProp [1] and Adam [2] are update rules that set per-parameter learning rates by using a running average of the second moments of gradients.\n", "\n", "In the file `cs231n/optim.py`, implement the RMSProp update rule in the `rmsprop` function and implement the Adam update rule in the `adam` function, and check your implementations using the tests below.\n", "\n", "**NOTE:** Please implement the _complete_ Adam update rule (with the bias correction mechanism), not the first simplified version mentioned in the course notes. \n", "\n", "[1] Tijmen Tieleman and Geoffrey Hinton. \"Lecture 6.5-rmsprop: Divide the gradient by a running average of its recent magnitude.\" COURSERA: Neural Networks for Machine Learning 4 (2012).\n", "\n", "[2] Diederik Kingma and Jimmy Ba, \"Adam: A Method for Stochastic Optimization\", ICLR 2015." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "next_w error: 9.524687511038133e-08\n", "cache error: 2.6477955807156126e-09\n" ] } ], "source": [ "# Test RMSProp implementation\n", "from cs231n.optim import rmsprop\n", "\n", "N, D = 4, 5\n", "w = np.linspace(-0.4, 0.6, num=N*D).reshape(N, D)\n", "dw = np.linspace(-0.6, 0.4, num=N*D).reshape(N, D)\n", "cache = np.linspace(0.6, 0.9, num=N*D).reshape(N, D)\n", "\n", "config = {'learning_rate': 1e-2, 'cache': cache}\n", "next_w, _ = rmsprop(w, dw, config=config)\n", "\n", "expected_next_w = np.asarray([\n", " [-0.39223849, -0.34037513, -0.28849239, -0.23659121, -0.18467247],\n", " [-0.132737, -0.08078555, -0.02881884, 0.02316247, 0.07515774],\n", " [ 0.12716641, 0.17918792, 0.23122175, 0.28326742, 0.33532447],\n", " [ 0.38739248, 0.43947102, 0.49155973, 0.54365823, 0.59576619]])\n", "expected_cache = np.asarray([\n", " [ 0.5976, 0.6126277, 0.6277108, 0.64284931, 0.65804321],\n", " [ 0.67329252, 0.68859723, 0.70395734, 0.71937285, 0.73484377],\n", " [ 0.75037008, 0.7659518, 0.78158892, 0.79728144, 0.81302936],\n", " [ 0.82883269, 0.84469141, 0.86060554, 0.87657507, 0.8926 ]])\n", "\n", "# You should see relative errors around e-7 or less\n", "print('next_w error: ', rel_error(expected_next_w, next_w))\n", "print('cache error: ', rel_error(expected_cache, config['cache']))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "next_w error: 1.1395691798535431e-07\n", "v error: 4.208314038113071e-09\n", "m error: 4.214963193114416e-09\n" ] } ], "source": [ "# Test Adam implementation\n", "from cs231n.optim import adam\n", "\n", "N, D = 4, 5\n", "w = np.linspace(-0.4, 0.6, num=N*D).reshape(N, D)\n", "dw = np.linspace(-0.6, 0.4, num=N*D).reshape(N, D)\n", "m = np.linspace(0.6, 0.9, num=N*D).reshape(N, D)\n", "v = np.linspace(0.7, 0.5, num=N*D).reshape(N, D)\n", "\n", "config = {'learning_rate': 1e-2, 'm': m, 'v': v, 't': 5}\n", "next_w, _ = adam(w, dw, config=config)\n", "\n", "expected_next_w = np.asarray([\n", " [-0.40094747, -0.34836187, -0.29577703, -0.24319299, -0.19060977],\n", " [-0.1380274, -0.08544591, -0.03286534, 0.01971428, 0.0722929],\n", " [ 0.1248705, 0.17744702, 0.23002243, 0.28259667, 0.33516969],\n", " [ 0.38774145, 0.44031188, 0.49288093, 0.54544852, 0.59801459]])\n", "expected_v = np.asarray([\n", " [ 0.69966, 0.68908382, 0.67851319, 0.66794809, 0.65738853,],\n", " [ 0.64683452, 0.63628604, 0.6257431, 0.61520571, 0.60467385,],\n", " [ 0.59414753, 0.58362676, 0.57311152, 0.56260183, 0.55209767,],\n", " [ 0.54159906, 0.53110598, 0.52061845, 0.51013645, 0.49966, ]])\n", "expected_m = np.asarray([\n", " [ 0.48, 0.49947368, 0.51894737, 0.53842105, 0.55789474],\n", " [ 0.57736842, 0.59684211, 0.61631579, 0.63578947, 0.65526316],\n", " [ 0.67473684, 0.69421053, 0.71368421, 0.73315789, 0.75263158],\n", " [ 0.77210526, 0.79157895, 0.81105263, 0.83052632, 0.85 ]])\n", "\n", "# You should see relative errors around e-7 or less\n", "print('next_w error: ', rel_error(expected_next_w, next_w))\n", "print('v error: ', rel_error(expected_v, config['v']))\n", "print('m error: ', rel_error(expected_m, config['m']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once you have debugged your RMSProp and Adam implementations, run the following to train a pair of deep networks using these new update rules:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "running with adam\n", "(Iteration 1 / 200) loss: 3.476928\n", "(Epoch 0 / 5) train acc: 0.126000; val_acc: 0.110000\n", "(Iteration 11 / 200) loss: 2.027712\n", "(Iteration 21 / 200) loss: 2.183358\n", "(Iteration 31 / 200) loss: 1.744257\n", "(Epoch 1 / 5) train acc: 0.363000; val_acc: 0.330000\n", "(Iteration 41 / 200) loss: 1.707951\n", "(Iteration 51 / 200) loss: 1.703835\n", "(Iteration 61 / 200) loss: 2.094758\n", "(Iteration 71 / 200) loss: 1.505558\n", "(Epoch 2 / 5) train acc: 0.419000; val_acc: 0.362000\n", "(Iteration 81 / 200) loss: 1.594429\n", "(Iteration 91 / 200) loss: 1.519017\n", "(Iteration 101 / 200) loss: 1.368522\n", "(Iteration 111 / 200) loss: 1.470400\n", "(Epoch 3 / 5) train acc: 0.460000; val_acc: 0.378000\n", "(Iteration 121 / 200) loss: 1.199064\n", "(Iteration 131 / 200) loss: 1.464705\n", "(Iteration 141 / 200) loss: 1.359863\n", "(Iteration 151 / 200) loss: 1.415069\n", "(Epoch 4 / 5) train acc: 0.521000; val_acc: 0.374000\n", "(Iteration 161 / 200) loss: 1.382818\n", "(Iteration 171 / 200) loss: 1.359900\n", "(Iteration 181 / 200) loss: 1.095947\n", "(Iteration 191 / 200) loss: 1.243088\n", "(Epoch 5 / 5) train acc: 0.572000; val_acc: 0.382000\n", "\n", "running with rmsprop\n", "(Iteration 1 / 200) loss: 2.589166\n", "(Epoch 0 / 5) train acc: 0.119000; val_acc: 0.146000\n", "(Iteration 11 / 200) loss: 2.032921\n", "(Iteration 21 / 200) loss: 1.897278\n", "(Iteration 31 / 200) loss: 1.770793\n", "(Epoch 1 / 5) train acc: 0.381000; val_acc: 0.320000\n", "(Iteration 41 / 200) loss: 1.895731\n", "(Iteration 51 / 200) loss: 1.681091\n", "(Iteration 61 / 200) loss: 1.486923\n", "(Iteration 71 / 200) loss: 1.628511\n", "(Epoch 2 / 5) train acc: 0.423000; val_acc: 0.341000\n", "(Iteration 81 / 200) loss: 1.506182\n", "(Iteration 91 / 200) loss: 1.600674\n", "(Iteration 101 / 200) loss: 1.478501\n", "(Iteration 111 / 200) loss: 1.577709\n", "(Epoch 3 / 5) train acc: 0.487000; val_acc: 0.355000\n", "(Iteration 121 / 200) loss: 1.495931\n", "(Iteration 131 / 200) loss: 1.525799\n", "(Iteration 141 / 200) loss: 1.552580\n", "(Iteration 151 / 200) loss: 1.654283\n", "(Epoch 4 / 5) train acc: 0.524000; val_acc: 0.362000\n", "(Iteration 161 / 200) loss: 1.589371\n", "(Iteration 171 / 200) loss: 1.413528\n", "(Iteration 181 / 200) loss: 1.500273\n", "(Iteration 191 / 200) loss: 1.365943\n", "(Epoch 5 / 5) train acc: 0.532000; val_acc: 0.374000\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:30: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:33: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:36: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:30: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:33: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:36: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:30: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:33: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:36: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:30: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:33: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:36: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:40: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.\n" ] }, { "data": { "image/png": "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pty+fXumh0FEKbBv3z5MnDgx08OIsW7dOqxfvx49PT2YNm0a/uM//gOFhYWZHlafO3nyJIYMGRINZCdMmIDly5dnelhEA86hQ4fwta99LSYYdGru3Ll45JFHol846emPv2+JKHFCiB1Syri/9AzgiCiteEPRfzGQJRpY+PuWaGAxCuA4hZKI6DS1fPly2xm31tZWzJ8/P277G2+8gREjRqR6aERERGSAARwRpZ2UkuWus9yIESOwa9euTA+DiAz0xxlVRJQerEJJRGmVn5+P1tZW3lwQEaWJlBKtra3I17RSIKKBiRk4Ikqr8vJyNDU14ejRo5keChHRgJWfn4/y8vJMD4OI+gADOCJKK7fbjXHjxmV6GEREREQDAqdQEhERERERZQkGcERERERERFmCARwREREREVGWYABHRERERESUJRjAERERERERZQkGcERERERERFmCARwREREREVGWYABHRERERESUJRjAERERERERZQkGcERERERERFmCAZwdjRuBdZOBmiLl/40bMz0iIiIiIiI6DeVmegD9XuNGoO4OwN+l/Oz7VPkZACqWZm5cRERERER02mEGzsoba3qDtwh/l7KdiIiIiIioDzGAs+JrcradiIiIiIgoTRjAWfGUO9tORERERESUJgzgrMxfDbgLYre5C5TtREREREREfYgBnJWKpcCixwDPGABC+f+ix1jAhIiIiIiI+hyrUNpRsZQBGxERERERZRwzcERERERERFmCARwREREREVGWYABHRERERESUJRjAERERERERZQkGcERERERERFki4QBOCJEvhHhPCLFbCLFXCHGfzj5CCPGYEOKvQohGIcT05IZLRERERER0+kqmjcApAPOklCeFEG4ADUKIV6SU76r2uRzAhPB/FwF4Ivx/IiIiIiIicijhDJxUnAz/6A7/JzW7XQngN+F93wVQJIQoTfScREREREREp7Ok1sAJIXKEELsAtAB4TUr5F80uowF8qvq5KbxN71i3CCG2CyG2Hz16NJlhERERERERDUhJBXBSyqCUciqAcgAXCiEma3YRek8zONZTUsqZUsqZI0eOTGZYREREREREA1JKqlBKKdsAbAGwUPNQE4Axqp/LATSn4pxERERERESnm2SqUI4UQhSF/1wA4DIA+zW7vQTgW+FqlLMA+KSU3oRHS0REREREdBpLpgplKYD1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hTKO20w2VhevnvQxKwpWcNvG24773P39/RQUFBAIBNiwYQO/+c1v2LJlC6+99hput5tt27axZs0avva1rzEwMEBeXh6apvHoo4+yZ88evvKVr7Br1y6eeeYZ/vu//5vdu3ezZcsWfvrTn3LxxRdz1VVXcd1113HllVee+DfkBHR+4QuM7zn69yzwpz+hQpnfM81mI/uMMyZ9TNbKFXj+7/895vMeOnSI2tpa/vCHP7B582Y0TePpp582Xuvo6ChPPfUUu3fv5rrrruONN97ghhtuYPPmzXzwgx8kFAoRjUbp6uqipqaG559/nrPOOouPfOQjNDY2csstt1BdXc0nPvEJPv3pTwOwevVqvvrVr3Leeedx5513MjQ0xAMPPMDWrVupr6/nm9/8Jr///e/5xCc+wZ///Oe0+039+1aIU0VMxege6+ag/6AR0JqH9PddY13GdSbNhM/lo8ZdQ3Vuddr7AntBxqCfib8sA7Cb7ex6164F0/GgadprSqn1E49LBU4IsWBMFt6OdfxEnH766dxyyy3cdtttXHbZZeTk5FBbW2vslfT+97+fRx55BIDf//73PPHEEwBceuml5OfnT/l5p2Wy8Has4yfg17/+NWVlZTz1lD5ha7Igm3D33Xdz9tlnG0E28f05mqamJv793/+dRx55hA0bNvDDH/6Q559/nl/84hd84Qtf4Gc/+xl33XUXa9as4Wc/+xn/9V//xV//9V/zxhtvAHDgwIGMMPBP//RPXHXVVTz11FNceuml3HDDDfz85z+nuLiYxx9/nDvuuINvf/vbAEQiEV5++WWefvpp7r77bp555hnuueceXn31Vb72ta8BsGvXrmnd/1yaLLwd6/jJeOihh/iP//gPAFpaWvje977H1q1bKS4uBuDaa69l//79gL6H47XXXktHRwehUChtf7GLL74Yq9XK6aefTjQa5aKLLgL0P2+HDh2a9n2erMnC27GOn4yqqio2b94MgM1mS3utWVlZxvch8bq3bNnC5z//eVpbW3nve99LfX09ABUVFZx11lkAfOhDH+Khhx4yfqFw7bXXAvqfy8HBQc477zwArrvuOq655hrjXhJ/Ts8991yGhoYYHBwkL2/yX24JsdgEIgEODx1OhrR4Ve3Q0CECkYBxncvqosZdwybvprSgVplbic1sO+HnS4S0xdiuLgFOCDFnjlUpAzjr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CnAiIlJtGWMcJy2fsMUYM92NfccZY3xizSAREak+ArxdgIiIiAflWWu7eLsIERERd9EVOBEROeMYY/YZYx4zxqwv/WtR2h5rjFlljNlW+hhT2t7IGLPUGLO19K9XaVf+xpiXjTE7jDGfGWNCvfahRETkjKAAJyIi1Vno74ZQXn3Se8ettd2AF4CZpW0vAHOttZ2At4DnStufA7601nYGzgZ2lLa3BGZZa9sDx4ArPPx5RETkDGestd6uQURExCOMMdnW2lqnaN8HXGit3WuMCQQOWmsbGGMygUhrbVFpe5q1tqExJgOIstYWnNRHHLDCWtuy9PVdQKC19t+e/2QiInKm0hU4ERE5U9k/ef5n25xKwUnPHejechER8TAFOBEROVNdfdJjYunzNcDw0ufXAN+UPl8FjAcwxvgbY+pUVpEiIiIn0y+FIiJSnYUaY7ac9PpTa+3/lhIINsaso+THzBGlbbcCrxljpgIZwPWl7bcBCcaYGyi50jYeSPN49SIiIr+je+BEROSMU3oPXLy1NtPbtYiIiJSHhlCKiIiIiIj4CF2BExERERER8RG6AiciIiIiIuIjFOBERERERER8hAKciIiIiIiIj1CAExERERER8REKcCIiIiIiIj7i/wH28Aja4ak+ngAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learning_rates = {'rmsprop': 1e-4, 'adam': 1e-3}\n", "for update_rule in ['adam', 'rmsprop']:\n", " print('running with ', update_rule)\n", " model = FullyConnectedNet([100, 100, 100, 100, 100], weight_scale=5e-2)\n", "\n", " solver = Solver(model, small_data,\n", " num_epochs=5, batch_size=100,\n", " update_rule=update_rule,\n", " optim_config={\n", " 'learning_rate': learning_rates[update_rule]\n", " },\n", " verbose=True)\n", " solvers[update_rule] = solver\n", " solver.train()\n", " print()\n", "\n", "plt.subplot(3, 1, 1)\n", "plt.title('Training loss')\n", "plt.xlabel('Iteration')\n", "\n", "plt.subplot(3, 1, 2)\n", "plt.title('Training accuracy')\n", "plt.xlabel('Epoch')\n", "\n", "plt.subplot(3, 1, 3)\n", "plt.title('Validation accuracy')\n", "plt.xlabel('Epoch')\n", "\n", "for update_rule, solver in list(solvers.items()):\n", " plt.subplot(3, 1, 1)\n", " plt.plot(solver.loss_history, 'o', label=update_rule)\n", " \n", " plt.subplot(3, 1, 2)\n", " plt.plot(solver.train_acc_history, '-o', label=update_rule)\n", "\n", " plt.subplot(3, 1, 3)\n", " plt.plot(solver.val_acc_history, '-o', label=update_rule)\n", " \n", "for i in [1, 2, 3]:\n", " plt.subplot(3, 1, i)\n", " plt.legend(loc='upper center', ncol=4)\n", "plt.gcf().set_size_inches(15, 15)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Inline Question 3:\n", "\n", "AdaGrad, like Adam, is a per-parameter optimization method that uses the following update rule:\n", "\n", "```\n", "cache += dw**2\n", "w += - learning_rate * dw / (np.sqrt(cache) + eps)\n", "```\n", "\n", "John notices that when he was training a network with AdaGrad that the updates became very small, and that his network was learning slowly. Using your knowledge of the AdaGrad update rule, why do you think the updates would become very small? Would Adam have the same issue?\n", "\n", "\n", "## Answer: \n", "[FILL THIS IN]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Train a good model!\n", "Train the best fully-connected model that you can on CIFAR-10, storing your best model in the `best_model` variable. We require you to get at least 50% accuracy on the validation set using a fully-connected net.\n", "\n", "If you are careful it should be possible to get accuracies above 55%, but we don't require it for this part and won't assign extra credit for doing so. Later in the assignment we will ask you to train the best convolutional network that you can on CIFAR-10, and we would prefer that you spend your effort working on convolutional nets rather than fully-connected nets.\n", "\n", "You might find it useful to complete the `BatchNormalization.ipynb` and `Dropout.ipynb` notebooks before completing this part, since those techniques can help you train powerful models." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Iteration 1 / 620) loss: 46.448708\n", "(Epoch 0 / 10) train acc: 0.149000; val_acc: 0.120000\n", "(Iteration 11 / 620) loss: 41.835496\n", "(Iteration 21 / 620) loss: 40.121783\n", "(Iteration 31 / 620) loss: 38.517347\n", "(Iteration 41 / 620) loss: 37.407260\n", "(Iteration 51 / 620) loss: 36.483636\n", "(Iteration 61 / 620) loss: 35.591336\n", "(Epoch 1 / 10) train acc: 0.401000; val_acc: 0.279000\n", "(Iteration 71 / 620) loss: 34.629439\n", "(Iteration 81 / 620) loss: 33.952560\n", "(Iteration 91 / 620) loss: 32.888066\n", "(Iteration 101 / 620) loss: 32.366211\n", "(Iteration 111 / 620) loss: 31.479661\n", "(Iteration 121 / 620) loss: 30.818888\n", "(Epoch 2 / 10) train acc: 0.422000; val_acc: 0.330000\n", "(Iteration 131 / 620) loss: 30.511378\n", "(Iteration 141 / 620) loss: 29.741173\n", "(Iteration 151 / 620) loss: 29.227815\n", "(Iteration 161 / 620) loss: 28.630244\n", "(Iteration 171 / 620) loss: 27.986683\n", "(Iteration 181 / 620) loss: 27.253518\n", "(Epoch 3 / 10) train acc: 0.469000; val_acc: 0.338000\n", "(Iteration 191 / 620) loss: 26.641727\n", "(Iteration 201 / 620) loss: 26.384157\n", "(Iteration 211 / 620) loss: 25.710730\n", "(Iteration 221 / 620) loss: 25.219221\n", "(Iteration 231 / 620) loss: 24.917030\n", "(Iteration 241 / 620) loss: 24.280826\n", "(Epoch 4 / 10) train acc: 0.513000; val_acc: 0.343000\n", "(Iteration 251 / 620) loss: 23.653584\n", "(Iteration 261 / 620) loss: 23.571498\n", "(Iteration 271 / 620) loss: 22.928487\n", "(Iteration 281 / 620) loss: 22.718699\n", "(Iteration 291 / 620) loss: 22.256951\n", "(Iteration 301 / 620) loss: 21.836180\n", "(Epoch 5 / 10) train acc: 0.533000; val_acc: 0.359000\n", "(Iteration 311 / 620) loss: 21.230491\n", "(Iteration 321 / 620) loss: 20.865416\n", "(Iteration 331 / 620) loss: 20.247412\n", "(Iteration 341 / 620) loss: 20.270852\n", "(Iteration 351 / 620) loss: 20.068091\n", "(Iteration 361 / 620) loss: 19.624373\n", "(Iteration 371 / 620) loss: 19.080009\n", "(Epoch 6 / 10) train acc: 0.564000; val_acc: 0.358000\n", "(Iteration 381 / 620) loss: 18.847557\n", "(Iteration 391 / 620) loss: 18.515211\n", "(Iteration 401 / 620) loss: 17.993084\n", "(Iteration 411 / 620) loss: 17.854795\n", "(Iteration 421 / 620) loss: 17.478858\n", "(Iteration 431 / 620) loss: 17.159718\n", "(Epoch 7 / 10) train acc: 0.578000; val_acc: 0.368000\n", "(Iteration 441 / 620) loss: 16.886613\n", "(Iteration 451 / 620) loss: 16.636194\n", "(Iteration 461 / 620) loss: 16.307896\n", "(Iteration 471 / 620) loss: 15.881656\n", "(Iteration 481 / 620) loss: 15.788971\n", "(Iteration 491 / 620) loss: 15.490212\n", "(Epoch 8 / 10) train acc: 0.577000; val_acc: 0.374000\n", "(Iteration 501 / 620) loss: 15.265341\n", "(Iteration 511 / 620) loss: 15.042647\n", "(Iteration 521 / 620) loss: 14.477381\n", "(Iteration 531 / 620) loss: 14.345641\n", "(Iteration 541 / 620) loss: 14.127653\n", "(Iteration 551 / 620) loss: 13.859100\n", "(Epoch 9 / 10) train acc: 0.626000; val_acc: 0.377000\n", "(Iteration 561 / 620) loss: 13.575125\n", "(Iteration 571 / 620) loss: 13.279693\n", "(Iteration 581 / 620) loss: 13.104684\n", "(Iteration 591 / 620) loss: 12.831661\n", "(Iteration 601 / 620) loss: 12.560148\n", "(Iteration 611 / 620) loss: 12.493125\n", "(Epoch 10 / 10) train acc: 0.594000; val_acc: 0.368000\n" ] } ], "source": [ "best_model = None\n", "################################################################################\n", "# TODO: Train the best FullyConnectedNet that you can on CIFAR-10. You might #\n", "# find batch/layer normalization and dropout useful. Store your best model in #\n", "# the best_model variable. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "model = FullyConnectedNet([100, 100, 100, 100], dropout=1, normalization=None, weight_scale=5e-2, reg = 1e-1)\n", "learning_rate = 1e-4\n", "solver = Solver(model, small_data,\n", " num_epochs=10, batch_size=64,\n", " update_rule=update_rule,\n", " optim_config={\n", " 'learning_rate': learning_rate\n", " },\n", " verbose=True)\n", "solvers['adam'] = solver\n", "solver.train()\n", "best_model = model\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "################################################################################\n", "# END OF YOUR CODE #\n", "################################################################################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Test your model!\n", "Run your best model on the validation and test sets. You should achieve above 50% accuracy on the validation set." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Validation set accuracy: 0.377\n", "Test set accuracy: 0.375\n" ] } ], "source": [ "y_test_pred = np.argmax(best_model.loss(data['X_test']), axis=1)\n", "y_val_pred = np.argmax(best_model.loss(data['X_val']), axis=1)\n", "print('Validation set accuracy: ', (y_val_pred == data['y_val']).mean())\n", "print('Test set accuracy: ', (y_test_pred == data['y_test']).mean())" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 2 } ================================================ FILE: assignment2/PyTorch.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# What's this PyTorch business?\n", "\n", "You've written a lot of code in this assignment to provide a whole host of neural network functionality. Dropout, Batch Norm, and 2D convolutions are some of the workhorses of deep learning in computer vision. You've also worked hard to make your code efficient and vectorized.\n", "\n", "For the last part of this assignment, though, we're going to leave behind your beautiful codebase and instead migrate to one of two popular deep learning frameworks: in this instance, PyTorch (or TensorFlow, if you choose to use that notebook)." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "### What is PyTorch?\n", "\n", "PyTorch is a system for executing dynamic computational graphs over Tensor objects that behave similarly as numpy ndarray. It comes with a powerful automatic differentiation engine that removes the need for manual back-propagation. \n", "\n", "### Why?\n", "\n", "* Our code will now run on GPUs! Much faster training. When using a framework like PyTorch or TensorFlow you can harness the power of the GPU for your own custom neural network architectures without having to write CUDA code directly (which is beyond the scope of this class).\n", "* We want you to be ready to use one of these frameworks for your project so you can experiment more efficiently than if you were writing every feature you want to use by hand. \n", "* We want you to stand on the shoulders of giants! TensorFlow and PyTorch are both excellent frameworks that will make your lives a lot easier, and now that you understand their guts, you are free to use them :) \n", "* We want you to be exposed to the sort of deep learning code you might run into in academia or industry.\n", "\n", "### PyTorch versions\n", "This notebook assumes that you are using **PyTorch version 1.0**. In some of the previous versions (e.g. before 0.4), Tensors had to be wrapped in Variable objects to be used in autograd; however Variables have now been deprecated. In addition 1.0 also separates a Tensor's datatype from its device, and uses numpy-style factories for constructing Tensors rather than directly invoking Tensor constructors." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## How will I learn PyTorch?\n", "\n", "Justin Johnson has made an excellent [tutorial](https://github.com/jcjohnson/pytorch-examples) for PyTorch. \n", "\n", "You can also find the detailed [API doc](http://pytorch.org/docs/stable/index.html) here. If you have other questions that are not addressed by the API docs, the [PyTorch forum](https://discuss.pytorch.org/) is a much better place to ask than StackOverflow.\n", "\n", "\n", "# Table of Contents\n", "\n", "This assignment has 5 parts. You will learn PyTorch on **three different levels of abstraction**, which will help you understand it better and prepare you for the final project. \n", "\n", "1. Part I, Preparation: we will use CIFAR-10 dataset.\n", "2. Part II, Barebones PyTorch: **Abstraction level 1**, we will work directly with the lowest-level PyTorch Tensors. \n", "3. Part III, PyTorch Module API: **Abstraction level 2**, we will use `nn.Module` to define arbitrary neural network architecture. \n", "4. Part IV, PyTorch Sequential API: **Abstraction level 3**, we will use `nn.Sequential` to define a linear feed-forward network very conveniently. \n", "5. Part V, CIFAR-10 open-ended challenge: please implement your own network to get as high accuracy as possible on CIFAR-10. You can experiment with any layer, optimizer, hyperparameters or other advanced features. \n", "\n", "Here is a table of comparison:\n", "\n", "| API | Flexibility | Convenience |\n", "|---------------|-------------|-------------|\n", "| Barebone | High | Low |\n", "| `nn.Module` | High | Medium |\n", "| `nn.Sequential` | Low | High |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part I. Preparation\n", "\n", "First, we load the CIFAR-10 dataset. This might take a couple minutes the first time you do it, but the files should stay cached after that.\n", "\n", "In previous parts of the assignment we had to write our own code to download the CIFAR-10 dataset, preprocess it, and iterate through it in minibatches; PyTorch provides convenient tools to automate this process for us." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "from torch.utils.data import DataLoader\n", "from torch.utils.data import sampler\n", "\n", "import torchvision.datasets as dset\n", "import torchvision.transforms as T\n", "\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "NUM_TRAIN = 49000\n", "\n", "# The torchvision.transforms package provides tools for preprocessing data\n", "# and for performing data augmentation; here we set up a transform to\n", "# preprocess the data by subtracting the mean RGB value and dividing by the\n", "# standard deviation of each RGB value; we've hardcoded the mean and std.\n", "transform = T.Compose([\n", " T.ToTensor(),\n", " T.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))\n", " ])\n", "\n", "# We set up a Dataset object for each split (train / val / test); Datasets load\n", "# training examples one at a time, so we wrap each Dataset in a DataLoader which\n", "# iterates through the Dataset and forms minibatches. We divide the CIFAR-10\n", "# training set into train and val sets by passing a Sampler object to the\n", "# DataLoader telling how it should sample from the underlying Dataset.\n", "cifar10_train = dset.CIFAR10('./cs231n/datasets', train=True, download=False,\n", " transform=transform)\n", "loader_train = DataLoader(cifar10_train, batch_size=64, \n", " sampler=sampler.SubsetRandomSampler(range(NUM_TRAIN)))\n", "\n", "cifar10_val = dset.CIFAR10('./cs231n/datasets', train=True, download=False,\n", " transform=transform)\n", "loader_val = DataLoader(cifar10_val, batch_size=64, \n", " sampler=sampler.SubsetRandomSampler(range(NUM_TRAIN, 50000)))\n", "\n", "cifar10_test = dset.CIFAR10('./cs231n/datasets', train=False, download=False, \n", " transform=transform)\n", "loader_test = DataLoader(cifar10_test, batch_size=64)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "You have an option to **use GPU by setting the flag to True below**. It is not necessary to use GPU for this assignment. Note that if your computer does not have CUDA enabled, `torch.cuda.is_available()` will return False and this notebook will fallback to CPU mode.\n", "\n", "The global variables `dtype` and `device` will control the data types throughout this assignment. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "using device: cpu\n" ] } ], "source": [ "USE_GPU = True\n", "\n", "dtype = torch.float32 # we will be using float throughout this tutorial\n", "\n", "if USE_GPU and torch.cuda.is_available():\n", " device = torch.device('cuda')\n", "else:\n", " device = torch.device('cpu')\n", "\n", "# Constant to control how frequently we print train loss\n", "print_every = 100\n", "\n", "print('using device:', device)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part II. Barebones PyTorch\n", "\n", "PyTorch ships with high-level APIs to help us define model architectures conveniently, which we will cover in Part II of this tutorial. In this section, we will start with the barebone PyTorch elements to understand the autograd engine better. After this exercise, you will come to appreciate the high-level model API more.\n", "\n", "We will start with a simple fully-connected ReLU network with two hidden layers and no biases for CIFAR classification. \n", "This implementation computes the forward pass using operations on PyTorch Tensors, and uses PyTorch autograd to compute gradients. It is important that you understand every line, because you will write a harder version after the example.\n", "\n", "When we create a PyTorch Tensor with `requires_grad=True`, then operations involving that Tensor will not just compute values; they will also build up a computational graph in the background, allowing us to easily backpropagate through the graph to compute gradients of some Tensors with respect to a downstream loss. Concretely if x is a Tensor with `x.requires_grad == True` then after backpropagation `x.grad` will be another Tensor holding the gradient of x with respect to the scalar loss at the end." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "### PyTorch Tensors: Flatten Function\n", "A PyTorch Tensor is conceptionally similar to a numpy array: it is an n-dimensional grid of numbers, and like numpy PyTorch provides many functions to efficiently operate on Tensors. As a simple example, we provide a `flatten` function below which reshapes image data for use in a fully-connected neural network.\n", "\n", "Recall that image data is typically stored in a Tensor of shape N x C x H x W, where:\n", "\n", "* N is the number of datapoints\n", "* C is the number of channels\n", "* H is the height of the intermediate feature map in pixels\n", "* W is the height of the intermediate feature map in pixels\n", "\n", "This is the right way to represent the data when we are doing something like a 2D convolution, that needs spatial understanding of where the intermediate features are relative to each other. When we use fully connected affine layers to process the image, however, we want each datapoint to be represented by a single vector -- it's no longer useful to segregate the different channels, rows, and columns of the data. So, we use a \"flatten\" operation to collapse the `C x H x W` values per representation into a single long vector. The flatten function below first reads in the N, C, H, and W values from a given batch of data, and then returns a \"view\" of that data. \"View\" is analogous to numpy's \"reshape\" method: it reshapes x's dimensions to be N x ??, where ?? is allowed to be anything (in this case, it will be C x H x W, but we don't need to specify that explicitly). " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Before flattening: tensor([[[[ 0, 1],\n", " [ 2, 3],\n", " [ 4, 5]]],\n", "\n", "\n", " [[[ 6, 7],\n", " [ 8, 9],\n", " [10, 11]]]])\n", "After flattening: tensor([[ 0, 1, 2, 3, 4, 5],\n", " [ 6, 7, 8, 9, 10, 11]])\n" ] } ], "source": [ "def flatten(x):\n", " N = x.shape[0] # read in N, C, H, W\n", " return x.view(N, -1) # \"flatten\" the C * H * W values into a single vector per image\n", "\n", "def test_flatten():\n", " x = torch.arange(12).view(2, 1, 3, 2)\n", " print('Before flattening: ', x)\n", " print('After flattening: ', flatten(x))\n", "\n", "test_flatten()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "### Barebones PyTorch: Two-Layer Network\n", "\n", "Here we define a function `two_layer_fc` which performs the forward pass of a two-layer fully-connected ReLU network on a batch of image data. After defining the forward pass we check that it doesn't crash and that it produces outputs of the right shape by running zeros through the network.\n", "\n", "You don't have to write any code here, but it's important that you read and understand the implementation." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([64, 10])\n" ] } ], "source": [ "import torch.nn.functional as F # useful stateless functions\n", "\n", "def two_layer_fc(x, params):\n", " \"\"\"\n", " A fully-connected neural networks; the architecture is:\n", " NN is fully connected -> ReLU -> fully connected layer.\n", " Note that this function only defines the forward pass; \n", " PyTorch will take care of the backward pass for us.\n", " \n", " The input to the network will be a minibatch of data, of shape\n", " (N, d1, ..., dM) where d1 * ... * dM = D. The hidden layer will have H units,\n", " and the output layer will produce scores for C classes.\n", " \n", " Inputs:\n", " - x: A PyTorch Tensor of shape (N, d1, ..., dM) giving a minibatch of\n", " input data.\n", " - params: A list [w1, w2] of PyTorch Tensors giving weights for the network;\n", " w1 has shape (D, H) and w2 has shape (H, C).\n", " \n", " Returns:\n", " - scores: A PyTorch Tensor of shape (N, C) giving classification scores for\n", " the input data x.\n", " \"\"\"\n", " # first we flatten the image\n", " x = flatten(x) # shape: [batch_size, C x H x W]\n", " \n", " w1, w2 = params\n", " \n", " # Forward pass: compute predicted y using operations on Tensors. Since w1 and\n", " # w2 have requires_grad=True, operations involving these Tensors will cause\n", " # PyTorch to build a computational graph, allowing automatic computation of\n", " # gradients. Since we are no longer implementing the backward pass by hand we\n", " # don't need to keep references to intermediate values.\n", " # you can also use `.clamp(min=0)`, equivalent to F.relu()\n", " x = F.relu(x.mm(w1))\n", " x = x.mm(w2)\n", " return x\n", " \n", "\n", "def two_layer_fc_test():\n", " hidden_layer_size = 42\n", " x = torch.zeros((64, 50), dtype=dtype) # minibatch size 64, feature dimension 50\n", " w1 = torch.zeros((50, hidden_layer_size), dtype=dtype)\n", " w2 = torch.zeros((hidden_layer_size, 10), dtype=dtype)\n", " scores = two_layer_fc(x, [w1, w2])\n", " print(scores.size()) # you should see [64, 10]\n", "\n", "two_layer_fc_test()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Barebones PyTorch: Three-Layer ConvNet\n", "\n", "Here you will complete the implementation of the function `three_layer_convnet`, which will perform the forward pass of a three-layer convolutional network. Like above, we can immediately test our implementation by passing zeros through the network. The network should have the following architecture:\n", "\n", "1. A convolutional layer (with bias) with `channel_1` filters, each with shape `KW1 x KH1`, and zero-padding of two\n", "2. ReLU nonlinearity\n", "3. A convolutional layer (with bias) with `channel_2` filters, each with shape `KW2 x KH2`, and zero-padding of one\n", "4. ReLU nonlinearity\n", "5. Fully-connected layer with bias, producing scores for C classes.\n", "\n", "Note that we have **no softmax activation** here after our fully-connected layer: this is because PyTorch's cross entropy loss performs a softmax activation for you, and by bundling that step in makes computation more efficient.\n", "\n", "**HINT**: For convolutions: http://pytorch.org/docs/stable/nn.html#torch.nn.functional.conv2d; pay attention to the shapes of convolutional filters!" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def three_layer_convnet(x, params):\n", " \"\"\"\n", " Performs the forward pass of a three-layer convolutional network with the\n", " architecture defined above.\n", "\n", " Inputs:\n", " - x: A PyTorch Tensor of shape (N, 3, H, W) giving a minibatch of images\n", " - params: A list of PyTorch Tensors giving the weights and biases for the\n", " network; should contain the following:\n", " - conv_w1: PyTorch Tensor of shape (channel_1, 3, KH1, KW1) giving weights\n", " for the first convolutional layer\n", " - conv_b1: PyTorch Tensor of shape (channel_1,) giving biases for the first\n", " convolutional layer\n", " - conv_w2: PyTorch Tensor of shape (channel_2, channel_1, KH2, KW2) giving\n", " weights for the second convolutional layer\n", " - conv_b2: PyTorch Tensor of shape (channel_2,) giving biases for the second\n", " convolutional layer\n", " - fc_w: PyTorch Tensor giving weights for the fully-connected layer. Can you\n", " figure out what the shape should be?\n", " - fc_b: PyTorch Tensor giving biases for the fully-connected layer. Can you\n", " figure out what the shape should be?\n", " \n", " Returns:\n", " - scores: PyTorch Tensor of shape (N, C) giving classification scores for x\n", " \"\"\"\n", " conv_w1, conv_b1, conv_w2, conv_b2, fc_w, fc_b = params\n", " scores = None\n", " ################################################################################\n", " # TODO: Implement the forward pass for the three-layer ConvNet. #\n", " ################################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " x = torch.nn.functional.conv2d(x, conv_w1, conv_b1, stride=1, padding=2)\n", " x = x.clamp(min = 0)\n", " x = torch.nn.functional.conv2d(x, conv_w2, conv_b2, stride=1, padding=1)\n", " x = x.clamp(min = 0)\n", " x = flatten(x)\n", " scores = x.mm(fc_w) + fc_b\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ################################################################################\n", " # END OF YOUR CODE #\n", " ################################################################################\n", " return scores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After defining the forward pass of the ConvNet above, run the following cell to test your implementation.\n", "\n", "When you run this function, scores should have shape (64, 10)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([64, 10])\n" ] } ], "source": [ "def three_layer_convnet_test():\n", " x = torch.zeros((64, 3, 32, 32), dtype=dtype) # minibatch size 64, image size [3, 32, 32]\n", "\n", " conv_w1 = torch.zeros((6, 3, 5, 5), dtype=dtype) # [out_channel, in_channel, kernel_H, kernel_W]\n", " conv_b1 = torch.zeros((6,)) # out_channel\n", " conv_w2 = torch.zeros((9, 6, 3, 3), dtype=dtype) # [out_channel, in_channel, kernel_H, kernel_W]\n", " conv_b2 = torch.zeros((9,)) # out_channel\n", "\n", " # you must calculate the shape of the tensor after two conv layers, before the fully-connected layer\n", " fc_w = torch.zeros((9 * 32 * 32, 10))\n", " fc_b = torch.zeros(10)\n", "\n", " scores = three_layer_convnet(x, [conv_w1, conv_b1, conv_w2, conv_b2, fc_w, fc_b])\n", " print(scores.size()) # you should see [64, 10]\n", "three_layer_convnet_test()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Barebones PyTorch: Initialization\n", "Let's write a couple utility methods to initialize the weight matrices for our models.\n", "\n", "- `random_weight(shape)` initializes a weight tensor with the Kaiming normalization method.\n", "- `zero_weight(shape)` initializes a weight tensor with all zeros. Useful for instantiating bias parameters.\n", "\n", "The `random_weight` function uses the Kaiming normal initialization method, described in:\n", "\n", "He et al, *Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification*, ICCV 2015, https://arxiv.org/abs/1502.01852" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [ { "data": { "text/plain": [ "tensor([[ 0.9903, -0.2682, -0.3628, -1.2809, -0.4746],\n", " [-1.5631, -0.6158, -0.0214, -1.1904, -1.1012],\n", " [ 0.7896, 0.7010, -0.9876, 0.9034, 0.8990]], requires_grad=True)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def random_weight(shape):\n", " \"\"\"\n", " Create random Tensors for weights; setting requires_grad=True means that we\n", " want to compute gradients for these Tensors during the backward pass.\n", " We use Kaiming normalization: sqrt(2 / fan_in)\n", " \"\"\"\n", " if len(shape) == 2: # FC weight\n", " fan_in = shape[0]\n", " else:\n", " fan_in = np.prod(shape[1:]) # conv weight [out_channel, in_channel, kH, kW]\n", " # randn is standard normal distribution generator. \n", " w = torch.randn(shape, device=device, dtype=dtype) * np.sqrt(2. / fan_in)\n", " w.requires_grad = True\n", " return w\n", "\n", "def zero_weight(shape):\n", " return torch.zeros(shape, device=device, dtype=dtype, requires_grad=True)\n", "\n", "# create a weight of shape [3 x 5]\n", "# you should see the type `torch.cuda.FloatTensor` if you use GPU. \n", "# Otherwise it should be `torch.FloatTensor`\n", "random_weight((3, 5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Barebones PyTorch: Check Accuracy\n", "When training the model we will use the following function to check the accuracy of our model on the training or validation sets.\n", "\n", "When checking accuracy we don't need to compute any gradients; as a result we don't need PyTorch to build a computational graph for us when we compute scores. To prevent a graph from being built we scope our computation under a `torch.no_grad()` context manager." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [], "source": [ "def check_accuracy_part2(loader, model_fn, params):\n", " \"\"\"\n", " Check the accuracy of a classification model.\n", " \n", " Inputs:\n", " - loader: A DataLoader for the data split we want to check\n", " - model_fn: A function that performs the forward pass of the model,\n", " with the signature scores = model_fn(x, params)\n", " - params: List of PyTorch Tensors giving parameters of the model\n", " \n", " Returns: Nothing, but prints the accuracy of the model\n", " \"\"\"\n", " split = 'val' if loader.dataset.train else 'test'\n", " print('Checking accuracy on the %s set' % split)\n", " num_correct, num_samples = 0, 0\n", " with torch.no_grad():\n", " for x, y in loader:\n", " x = x.to(device=device, dtype=dtype) # move to device, e.g. GPU\n", " y = y.to(device=device, dtype=torch.int64)\n", " scores = model_fn(x, params)\n", " _, preds = scores.max(1)\n", " num_correct += (preds == y).sum()\n", " num_samples += preds.size(0)\n", " acc = float(num_correct) / num_samples\n", " print('Got %d / %d correct (%.2f%%)' % (num_correct, num_samples, 100 * acc))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### BareBones PyTorch: Training Loop\n", "We can now set up a basic training loop to train our network. We will train the model using stochastic gradient descent without momentum. We will use `torch.functional.cross_entropy` to compute the loss; you can [read about it here](http://pytorch.org/docs/stable/nn.html#cross-entropy).\n", "\n", "The training loop takes as input the neural network function, a list of initialized parameters (`[w1, w2]` in our example), and learning rate." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [ "pdf-ignore-input" ] }, "outputs": [], "source": [ "def train_part2(model_fn, params, learning_rate):\n", " \"\"\"\n", " Train a model on CIFAR-10.\n", " \n", " Inputs:\n", " - model_fn: A Python function that performs the forward pass of the model.\n", " It should have the signature scores = model_fn(x, params) where x is a\n", " PyTorch Tensor of image data, params is a list of PyTorch Tensors giving\n", " model weights, and scores is a PyTorch Tensor of shape (N, C) giving\n", " scores for the elements in x.\n", " - params: List of PyTorch Tensors giving weights for the model\n", " - learning_rate: Python scalar giving the learning rate to use for SGD\n", " \n", " Returns: Nothing\n", " \"\"\"\n", " for t, (x, y) in enumerate(loader_train):\n", " # Move the data to the proper device (GPU or CPU)\n", " x = x.to(device=device, dtype=dtype)\n", " y = y.to(device=device, dtype=torch.long)\n", "\n", " # Forward pass: compute scores and loss\n", " scores = model_fn(x, params)\n", " loss = F.cross_entropy(scores, y)\n", "\n", " # Backward pass: PyTorch figures out which Tensors in the computational\n", " # graph has requires_grad=True and uses backpropagation to compute the\n", " # gradient of the loss with respect to these Tensors, and stores the\n", " # gradients in the .grad attribute of each Tensor.\n", " loss.backward()\n", "\n", " # Update parameters. We don't want to backpropagate through the\n", " # parameter updates, so we scope the updates under a torch.no_grad()\n", " # context manager to prevent a computational graph from being built.\n", " with torch.no_grad():\n", " for w in params:\n", " w -= learning_rate * w.grad\n", "\n", " # Manually zero the gradients after running the backward pass\n", " w.grad.zero_()\n", "\n", " if t % print_every == 0:\n", " print('Iteration %d, loss = %.4f' % (t, loss.item()))\n", " check_accuracy_part2(loader_val, model_fn, params)\n", " print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### BareBones PyTorch: Train a Two-Layer Network\n", "Now we are ready to run the training loop. We need to explicitly allocate tensors for the fully connected weights, `w1` and `w2`. \n", "\n", "Each minibatch of CIFAR has 64 examples, so the tensor shape is `[64, 3, 32, 32]`. \n", "\n", "After flattening, `x` shape should be `[64, 3 * 32 * 32]`. This will be the size of the first dimension of `w1`. \n", "The second dimension of `w1` is the hidden layer size, which will also be the first dimension of `w2`. \n", "\n", "Finally, the output of the network is a 10-dimensional vector that represents the probability distribution over 10 classes. \n", "\n", "You don't need to tune any hyperparameters but you should see accuracies above 40% after training for one epoch." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration 0, loss = 3.1171\n", "Checking accuracy on the val set\n", "Got 169 / 1000 correct (16.90%)\n", "\n", "Iteration 100, loss = 2.4388\n", "Checking accuracy on the val set\n", "Got 309 / 1000 correct (30.90%)\n", "\n", "Iteration 200, loss = 1.8907\n", "Checking accuracy on the val set\n", "Got 352 / 1000 correct (35.20%)\n", "\n", "Iteration 300, loss = 1.9044\n", "Checking accuracy on the val set\n", "Got 395 / 1000 correct (39.50%)\n", "\n", "Iteration 400, loss = 1.7508\n", "Checking accuracy on the val set\n", "Got 424 / 1000 correct (42.40%)\n", "\n", "Iteration 500, loss = 1.6613\n", "Checking accuracy on the val set\n", "Got 454 / 1000 correct (45.40%)\n", "\n", "Iteration 600, loss = 1.4201\n", "Checking accuracy on the val set\n", "Got 446 / 1000 correct (44.60%)\n", "\n", "Iteration 700, loss = 1.7138\n", "Checking accuracy on the val set\n", "Got 432 / 1000 correct (43.20%)\n", "\n" ] } ], "source": [ "hidden_layer_size = 4000\n", "learning_rate = 1e-2\n", "\n", "w1 = random_weight((3 * 32 * 32, hidden_layer_size))\n", "w2 = random_weight((hidden_layer_size, 10))\n", "\n", "train_part2(two_layer_fc, [w1, w2], learning_rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### BareBones PyTorch: Training a ConvNet\n", "\n", "In the below you should use the functions defined above to train a three-layer convolutional network on CIFAR. The network should have the following architecture:\n", "\n", "1. Convolutional layer (with bias) with 32 5x5 filters, with zero-padding of 2\n", "2. ReLU\n", "3. Convolutional layer (with bias) with 16 3x3 filters, with zero-padding of 1\n", "4. ReLU\n", "5. Fully-connected layer (with bias) to compute scores for 10 classes\n", "\n", "You should initialize your weight matrices using the `random_weight` function defined above, and you should initialize your bias vectors using the `zero_weight` function above.\n", "\n", "You don't need to tune any hyperparameters, but if everything works correctly you should achieve an accuracy above 42% after one epoch." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration 0, loss = 2.8201\n", "Checking accuracy on the val set\n", "Got 139 / 1000 correct (13.90%)\n", "\n", "Iteration 100, loss = 1.8443\n", "Checking accuracy on the val set\n", "Got 328 / 1000 correct (32.80%)\n", "\n", "Iteration 200, loss = 1.4932\n", "Checking accuracy on the val set\n", "Got 416 / 1000 correct (41.60%)\n", "\n", "Iteration 300, loss = 1.5471\n", "Checking accuracy on the val set\n", "Got 421 / 1000 correct (42.10%)\n", "\n", "Iteration 400, loss = 1.4172\n", "Checking accuracy on the val set\n", "Got 448 / 1000 correct (44.80%)\n", "\n", "Iteration 500, loss = 1.6981\n", "Checking accuracy on the val set\n", "Got 485 / 1000 correct (48.50%)\n", "\n", "Iteration 600, loss = 1.5066\n", "Checking accuracy on the val set\n", "Got 463 / 1000 correct (46.30%)\n", "\n", "Iteration 700, loss = 1.3672\n", "Checking accuracy on the val set\n", "Got 485 / 1000 correct (48.50%)\n", "\n" ] } ], "source": [ "learning_rate = 3e-3\n", "\n", "channel_1 = 32\n", "channel_2 = 16\n", "\n", "conv_w1 = None\n", "conv_b1 = None\n", "conv_w2 = None\n", "conv_b2 = None\n", "fc_w = None\n", "fc_b = None\n", "\n", "################################################################################\n", "# TODO: Initialize the parameters of a three-layer ConvNet. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "conv_w1 = random_weight((channel_1, 3, 5, 5))\n", "conv_b1 = zero_weight(channel_1)\n", "conv_w2 = random_weight((channel_2, channel_1, 3, 3))\n", "conv_b2 = zero_weight(channel_2)\n", "fc_w = random_weight((32*32*channel_2, 10))\n", "fc_b = zero_weight(10)\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "################################################################################\n", "# END OF YOUR CODE #\n", "################################################################################\n", "\n", "params = [conv_w1, conv_b1, conv_w2, conv_b2, fc_w, fc_b]\n", "train_part2(three_layer_convnet, params, learning_rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part III. PyTorch Module API\n", "\n", "Barebone PyTorch requires that we track all the parameter tensors by hand. This is fine for small networks with a few tensors, but it would be extremely inconvenient and error-prone to track tens or hundreds of tensors in larger networks.\n", "\n", "PyTorch provides the `nn.Module` API for you to define arbitrary network architectures, while tracking every learnable parameters for you. In Part II, we implemented SGD ourselves. PyTorch also provides the `torch.optim` package that implements all the common optimizers, such as RMSProp, Adagrad, and Adam. It even supports approximate second-order methods like L-BFGS! You can refer to the [doc](http://pytorch.org/docs/master/optim.html) for the exact specifications of each optimizer.\n", "\n", "To use the Module API, follow the steps below:\n", "\n", "1. Subclass `nn.Module`. Give your network class an intuitive name like `TwoLayerFC`. \n", "\n", "2. In the constructor `__init__()`, define all the layers you need as class attributes. Layer objects like `nn.Linear` and `nn.Conv2d` are themselves `nn.Module` subclasses and contain learnable parameters, so that you don't have to instantiate the raw tensors yourself. `nn.Module` will track these internal parameters for you. Refer to the [doc](http://pytorch.org/docs/master/nn.html) to learn more about the dozens of builtin layers. **Warning**: don't forget to call the `super().__init__()` first!\n", "\n", "3. In the `forward()` method, define the *connectivity* of your network. You should use the attributes defined in `__init__` as function calls that take tensor as input and output the \"transformed\" tensor. Do *not* create any new layers with learnable parameters in `forward()`! All of them must be declared upfront in `__init__`. \n", "\n", "After you define your Module subclass, you can instantiate it as an object and call it just like the NN forward function in part II.\n", "\n", "### Module API: Two-Layer Network\n", "Here is a concrete example of a 2-layer fully connected network:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([64, 10])\n" ] } ], "source": [ "class TwoLayerFC(nn.Module):\n", " def __init__(self, input_size, hidden_size, num_classes):\n", " super().__init__()\n", " # assign layer objects to class attributes\n", " self.fc1 = nn.Linear(input_size, hidden_size)\n", " # nn.init package contains convenient initialization methods\n", " # http://pytorch.org/docs/master/nn.html#torch-nn-init \n", " nn.init.kaiming_normal_(self.fc1.weight)\n", " self.fc2 = nn.Linear(hidden_size, num_classes)\n", " nn.init.kaiming_normal_(self.fc2.weight)\n", " \n", " def forward(self, x):\n", " # forward always defines connectivity\n", " x = flatten(x)\n", " scores = self.fc2(F.relu(self.fc1(x)))\n", " return scores\n", "\n", "def test_TwoLayerFC():\n", " input_size = 50\n", " x = torch.zeros((64, input_size), dtype=dtype) # minibatch size 64, feature dimension 50\n", " model = TwoLayerFC(input_size, 42, 10)\n", " scores = model(x)\n", " print(scores.size()) # you should see [64, 10]\n", "test_TwoLayerFC()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Module API: Three-Layer ConvNet\n", "It's your turn to implement a 3-layer ConvNet followed by a fully connected layer. The network architecture should be the same as in Part II:\n", "\n", "1. Convolutional layer with `channel_1` 5x5 filters with zero-padding of 2\n", "2. ReLU\n", "3. Convolutional layer with `channel_2` 3x3 filters with zero-padding of 1\n", "4. ReLU\n", "5. Fully-connected layer to `num_classes` classes\n", "\n", "You should initialize the weight matrices of the model using the Kaiming normal initialization method.\n", "\n", "**HINT**: http://pytorch.org/docs/stable/nn.html#conv2d\n", "\n", "After you implement the three-layer ConvNet, the `test_ThreeLayerConvNet` function will run your implementation; it should print `(64, 10)` for the shape of the output scores." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([64, 10])\n" ] } ], "source": [ "class ThreeLayerConvNet(nn.Module):\n", " def __init__(self, in_channel, channel_1, channel_2, num_classes):\n", " super().__init__()\n", " ########################################################################\n", " # TODO: Set up the layers you need for a three-layer ConvNet with the #\n", " # architecture defined above. #\n", " ########################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " self.conv1 = nn.Conv2d(in_channel, channel_1, 5, 1, 2)\n", " self.conv2 = nn.Conv2d(channel_1, channel_2, 3, 1, 1)\n", " self.fc = nn.Linear(channel_2*32*32, num_classes)\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ########################################################################\n", " # END OF YOUR CODE # \n", " ########################################################################\n", "\n", " def forward(self, x):\n", " scores = None\n", " ########################################################################\n", " # TODO: Implement the forward function for a 3-layer ConvNet. you #\n", " # should use the layers you defined in __init__ and specify the #\n", " # connectivity of those layers in forward() #\n", " ########################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " x = self.conv1(x)\n", " x = F.relu(x)\n", " x = self.conv2(x)\n", " x = F.relu(x)\n", " x = flatten(x)\n", " scores = self.fc(x)\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ########################################################################\n", " # END OF YOUR CODE #\n", " ########################################################################\n", " return scores\n", "\n", "\n", "def test_ThreeLayerConvNet():\n", " x = torch.zeros((64, 3, 32, 32), dtype=dtype) # minibatch size 64, image size [3, 32, 32]\n", " model = ThreeLayerConvNet(in_channel=3, channel_1=12, channel_2=8, num_classes=10)\n", " scores = model(x)\n", " print(scores.size()) # you should see [64, 10]\n", "test_ThreeLayerConvNet()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Module API: Check Accuracy\n", "Given the validation or test set, we can check the classification accuracy of a neural network. \n", "\n", "This version is slightly different from the one in part II. You don't manually pass in the parameters anymore." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def check_accuracy_part34(loader, model):\n", " if loader.dataset.train:\n", " print('Checking accuracy on validation set')\n", " else:\n", " print('Checking accuracy on test set') \n", " num_correct = 0\n", " num_samples = 0\n", " model.eval() # set model to evaluation mode\n", " with torch.no_grad():\n", " for x, y in loader:\n", " x = x.to(device=device, dtype=dtype) # move to device, e.g. GPU\n", " y = y.to(device=device, dtype=torch.long)\n", " scores = model(x)\n", " _, preds = scores.max(1)\n", " num_correct += (preds == y).sum()\n", " num_samples += preds.size(0)\n", " acc = float(num_correct) / num_samples\n", " print('Got %d / %d correct (%.2f)' % (num_correct, num_samples, 100 * acc))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Module API: Training Loop\n", "We also use a slightly different training loop. Rather than updating the values of the weights ourselves, we use an Optimizer object from the `torch.optim` package, which abstract the notion of an optimization algorithm and provides implementations of most of the algorithms commonly used to optimize neural networks." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def train_part34(model, optimizer, epochs=1):\n", " \"\"\"\n", " Train a model on CIFAR-10 using the PyTorch Module API.\n", " \n", " Inputs:\n", " - model: A PyTorch Module giving the model to train.\n", " - optimizer: An Optimizer object we will use to train the model\n", " - epochs: (Optional) A Python integer giving the number of epochs to train for\n", " \n", " Returns: Nothing, but prints model accuracies during training.\n", " \"\"\"\n", " model = model.to(device=device) # move the model parameters to CPU/GPU\n", " for e in range(epochs):\n", " for t, (x, y) in enumerate(loader_train):\n", " model.train() # put model to training mode\n", " x = x.to(device=device, dtype=dtype) # move to device, e.g. GPU\n", " y = y.to(device=device, dtype=torch.long)\n", "\n", " scores = model(x)\n", " loss = F.cross_entropy(scores, y)\n", "\n", " # Zero out all of the gradients for the variables which the optimizer\n", " # will update.\n", " optimizer.zero_grad()\n", "\n", " # This is the backwards pass: compute the gradient of the loss with\n", " # respect to each parameter of the model.\n", " loss.backward()\n", "\n", " # Actually update the parameters of the model using the gradients\n", " # computed by the backwards pass.\n", " optimizer.step()\n", "\n", " if t % print_every == 0:\n", " print('Iteration %d, loss = %.4f' % (t, loss.item()))\n", " check_accuracy_part34(loader_val, model)\n", " print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Module API: Train a Two-Layer Network\n", "Now we are ready to run the training loop. In contrast to part II, we don't explicitly allocate parameter tensors anymore.\n", "\n", "Simply pass the input size, hidden layer size, and number of classes (i.e. output size) to the constructor of `TwoLayerFC`. \n", "\n", "You also need to define an optimizer that tracks all the learnable parameters inside `TwoLayerFC`.\n", "\n", "You don't need to tune any hyperparameters, but you should see model accuracies above 40% after training for one epoch." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration 0, loss = 3.2963\n", "Checking accuracy on validation set\n", "Got 144 / 1000 correct (14.40)\n", "\n", "Iteration 100, loss = 1.6664\n", "Checking accuracy on validation set\n", "Got 372 / 1000 correct (37.20)\n", "\n", "Iteration 200, loss = 2.0858\n", "Checking accuracy on validation set\n", "Got 371 / 1000 correct (37.10)\n", "\n", "Iteration 300, loss = 1.9164\n", "Checking accuracy on validation set\n", "Got 384 / 1000 correct (38.40)\n", "\n", "Iteration 400, loss = 1.6098\n", "Checking accuracy on validation set\n", "Got 408 / 1000 correct (40.80)\n", "\n", "Iteration 500, loss = 1.6403\n", "Checking accuracy on validation set\n", "Got 419 / 1000 correct (41.90)\n", "\n", "Iteration 600, loss = 1.7362\n", "Checking accuracy on validation set\n", "Got 439 / 1000 correct (43.90)\n", "\n", "Iteration 700, loss = 1.7397\n", "Checking accuracy on validation set\n", "Got 444 / 1000 correct (44.40)\n", "\n" ] } ], "source": [ "hidden_layer_size = 4000\n", "learning_rate = 1e-2\n", "model = TwoLayerFC(3 * 32 * 32, hidden_layer_size, 10)\n", "optimizer = optim.SGD(model.parameters(), lr=learning_rate)\n", "\n", "train_part34(model, optimizer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Module API: Train a Three-Layer ConvNet\n", "You should now use the Module API to train a three-layer ConvNet on CIFAR. This should look very similar to training the two-layer network! You don't need to tune any hyperparameters, but you should achieve above above 45% after training for one epoch.\n", "\n", "You should train the model using stochastic gradient descent without momentum." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration 0, loss = 2.3036\n", "Checking accuracy on validation set\n", "Got 94 / 1000 correct (9.40)\n", "\n", "Iteration 100, loss = 1.9982\n", "Checking accuracy on validation set\n", "Got 292 / 1000 correct (29.20)\n", "\n", "Iteration 200, loss = 1.8504\n", "Checking accuracy on validation set\n", "Got 354 / 1000 correct (35.40)\n", "\n", "Iteration 300, loss = 1.8150\n", "Checking accuracy on validation set\n", "Got 376 / 1000 correct (37.60)\n", "\n", "Iteration 400, loss = 1.6066\n", "Checking accuracy on validation set\n", "Got 381 / 1000 correct (38.10)\n", "\n", "Iteration 500, loss = 1.9506\n", "Checking accuracy on validation set\n", "Got 413 / 1000 correct (41.30)\n", "\n", "Iteration 600, loss = 1.5607\n", "Checking accuracy on validation set\n", "Got 420 / 1000 correct (42.00)\n", "\n", "Iteration 700, loss = 1.5663\n", "Checking accuracy on validation set\n", "Got 415 / 1000 correct (41.50)\n", "\n", "Iteration 0, loss = 1.6995\n", "Checking accuracy on validation set\n", "Got 448 / 1000 correct (44.80)\n", "\n", "Iteration 100, loss = 1.6553\n", "Checking accuracy on validation set\n", "Got 457 / 1000 correct (45.70)\n", "\n", "Iteration 200, loss = 1.6451\n", "Checking accuracy on validation set\n", "Got 461 / 1000 correct (46.10)\n", "\n", "Iteration 300, loss = 1.5031\n", "Checking accuracy on validation set\n", "Got 456 / 1000 correct (45.60)\n", "\n", "Iteration 400, loss = 1.3955\n", "Checking accuracy on validation set\n", "Got 473 / 1000 correct (47.30)\n", "\n", "Iteration 500, loss = 1.6361\n", "Checking accuracy on validation set\n", "Got 455 / 1000 correct (45.50)\n", "\n", "Iteration 600, loss = 1.5233\n", "Checking accuracy on validation set\n", "Got 489 / 1000 correct (48.90)\n", "\n", "Iteration 700, loss = 1.6239\n", "Checking accuracy on validation set\n", "Got 497 / 1000 correct (49.70)\n", "\n" ] } ], "source": [ "learning_rate = 3e-3\n", "channel_1 = 32\n", "channel_2 = 16\n", "\n", "model = None\n", "optimizer = None\n", "################################################################################\n", "# TODO: Instantiate your ThreeLayerConvNet model and a corresponding optimizer #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "model = ThreeLayerConvNet(3, channel_1, channel_2, 10)\n", "optimizer = optim.SGD(model.parameters(), lr = learning_rate)\n", "train_part34(model, optimizer, epochs=1)\n", "\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "################################################################################\n", "# END OF YOUR CODE \n", "################################################################################\n", "\n", "train_part34(model, optimizer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part IV. PyTorch Sequential API\n", "\n", "Part III introduced the PyTorch Module API, which allows you to define arbitrary learnable layers and their connectivity. \n", "\n", "For simple models like a stack of feed forward layers, you still need to go through 3 steps: subclass `nn.Module`, assign layers to class attributes in `__init__`, and call each layer one by one in `forward()`. Is there a more convenient way? \n", "\n", "Fortunately, PyTorch provides a container Module called `nn.Sequential`, which merges the above steps into one. It is not as flexible as `nn.Module`, because you cannot specify more complex topology than a feed-forward stack, but it's good enough for many use cases.\n", "\n", "### Sequential API: Two-Layer Network\n", "Let's see how to rewrite our two-layer fully connected network example with `nn.Sequential`, and train it using the training loop defined above.\n", "\n", "Again, you don't need to tune any hyperparameters here, but you shoud achieve above 40% accuracy after one epoch of training." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration 0, loss = 2.3663\n", "Checking accuracy on validation set\n", "Got 161 / 1000 correct (16.10)\n", "\n", "Iteration 100, loss = 1.8476\n", "Checking accuracy on validation set\n", "Got 395 / 1000 correct (39.50)\n", "\n", "Iteration 200, loss = 1.6605\n", "Checking accuracy on validation set\n", "Got 405 / 1000 correct (40.50)\n", "\n", "Iteration 300, loss = 1.7247\n", "Checking accuracy on validation set\n", "Got 409 / 1000 correct (40.90)\n", "\n", "Iteration 400, loss = 1.8678\n", "Checking accuracy on validation set\n", "Got 433 / 1000 correct (43.30)\n", "\n", "Iteration 500, loss = 1.9044\n", "Checking accuracy on validation set\n", "Got 420 / 1000 correct (42.00)\n", "\n", "Iteration 600, loss = 1.3088\n", "Checking accuracy on validation set\n", "Got 434 / 1000 correct (43.40)\n", "\n", "Iteration 700, loss = 1.5709\n", "Checking accuracy on validation set\n", "Got 434 / 1000 correct (43.40)\n", "\n" ] } ], "source": [ "# We need to wrap `flatten` function in a module in order to stack it\n", "# in nn.Sequential\n", "class Flatten(nn.Module):\n", " def forward(self, x):\n", " return flatten(x)\n", "\n", "hidden_layer_size = 4000\n", "learning_rate = 1e-2\n", "\n", "model = nn.Sequential(\n", " Flatten(),\n", " nn.Linear(3 * 32 * 32, hidden_layer_size),\n", " nn.ReLU(),\n", " nn.Linear(hidden_layer_size, 10),\n", ")\n", "\n", "# you can use Nesterov momentum in optim.SGD\n", "optimizer = optim.SGD(model.parameters(), lr=learning_rate,\n", " momentum=0.9, nesterov=True)\n", "\n", "train_part34(model, optimizer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sequential API: Three-Layer ConvNet\n", "Here you should use `nn.Sequential` to define and train a three-layer ConvNet with the same architecture we used in Part III:\n", "\n", "1. Convolutional layer (with bias) with 32 5x5 filters, with zero-padding of 2\n", "2. ReLU\n", "3. Convolutional layer (with bias) with 16 3x3 filters, with zero-padding of 1\n", "4. ReLU\n", "5. Fully-connected layer (with bias) to compute scores for 10 classes\n", "\n", "You should initialize your weight matrices using the `random_weight` function defined above, and you should initialize your bias vectors using the `zero_weight` function above.\n", "\n", "You should optimize your model using stochastic gradient descent with Nesterov momentum 0.9.\n", "\n", "Again, you don't need to tune any hyperparameters but you should see accuracy above 55% after one epoch of training." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration 0, loss = 2.3158\n", "Checking accuracy on validation set\n", "Got 112 / 1000 correct (11.20)\n", "\n", "Iteration 100, loss = 1.5114\n", "Checking accuracy on validation set\n", "Got 468 / 1000 correct (46.80)\n", "\n", "Iteration 200, loss = 1.5410\n", "Checking accuracy on validation set\n", "Got 522 / 1000 correct (52.20)\n", "\n", "Iteration 300, loss = 1.3325\n", "Checking accuracy on validation set\n", "Got 528 / 1000 correct (52.80)\n", "\n", "Iteration 400, loss = 1.5070\n", "Checking accuracy on validation set\n", "Got 509 / 1000 correct (50.90)\n", "\n", "Iteration 500, loss = 1.1276\n", "Checking accuracy on validation set\n", "Got 548 / 1000 correct (54.80)\n", "\n", "Iteration 600, loss = 1.0590\n", "Checking accuracy on validation set\n", "Got 568 / 1000 correct (56.80)\n", "\n", "Iteration 700, loss = 1.2779\n", "Checking accuracy on validation set\n", "Got 576 / 1000 correct (57.60)\n", "\n" ] } ], "source": [ "channel_1 = 32\n", "channel_2 = 16\n", "learning_rate = 1e-2\n", "\n", "model = None\n", "optimizer = None\n", "\n", "################################################################################\n", "# TODO: Rewrite the 2-layer ConvNet with bias from Part III with the #\n", "# Sequential API. #\n", "################################################################################\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "model = nn.Sequential(\n", " nn.Conv2d(3, channel_1, 5, 1, 2),\n", " nn.ReLU(),\n", " nn.Conv2d(channel_1, channel_2, 3, 1, 1),\n", " nn.ReLU(),\n", " Flatten(),\n", " nn.Linear(channel_2*32*32, 10)\n", ")\n", "\n", "optimizer = optim.SGD(model.parameters(), lr = learning_rate,\n", " momentum = 0.9, nesterov = True)\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "################################################################################\n", "# END OF YOUR CODE \n", "################################################################################\n", "\n", "train_part34(model, optimizer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Part V. CIFAR-10 open-ended challenge\n", "\n", "In this section, you can experiment with whatever ConvNet architecture you'd like on CIFAR-10. \n", "\n", "Now it's your job to experiment with architectures, hyperparameters, loss functions, and optimizers to train a model that achieves **at least 70%** accuracy on the CIFAR-10 **validation** set within 10 epochs. You can use the check_accuracy and train functions from above. You can use either `nn.Module` or `nn.Sequential` API. \n", "\n", "Describe what you did at the end of this notebook.\n", "\n", "Here are the official API documentation for each component. One note: what we call in the class \"spatial batch norm\" is called \"BatchNorm2D\" in PyTorch.\n", "\n", "* Layers in torch.nn package: http://pytorch.org/docs/stable/nn.html\n", "* Activations: http://pytorch.org/docs/stable/nn.html#non-linear-activations\n", "* Loss functions: http://pytorch.org/docs/stable/nn.html#loss-functions\n", "* Optimizers: http://pytorch.org/docs/stable/optim.html\n", "\n", "\n", "### Things you might try:\n", "- **Filter size**: Above we used 5x5; would smaller filters be more efficient?\n", "- **Number of filters**: Above we used 32 filters. Do more or fewer do better?\n", "- **Pooling vs Strided Convolution**: Do you use max pooling or just stride convolutions?\n", "- **Batch normalization**: Try adding spatial batch normalization after convolution layers and vanilla batch normalization after affine layers. Do your networks train faster?\n", "- **Network architecture**: The network above has two layers of trainable parameters. Can you do better with a deep network? Good architectures to try include:\n", " - [conv-relu-pool]xN -> [affine]xM -> [softmax or SVM]\n", " - [conv-relu-conv-relu-pool]xN -> [affine]xM -> [softmax or SVM]\n", " - [batchnorm-relu-conv]xN -> [affine]xM -> [softmax or SVM]\n", "- **Global Average Pooling**: Instead of flattening and then having multiple affine layers, perform convolutions until your image gets small (7x7 or so) and then perform an average pooling operation to get to a 1x1 image picture (1, 1 , Filter#), which is then reshaped into a (Filter#) vector. This is used in [Google's Inception Network](https://arxiv.org/abs/1512.00567) (See Table 1 for their architecture).\n", "- **Regularization**: Add l2 weight regularization, or perhaps use Dropout.\n", "\n", "### Tips for training\n", "For each network architecture that you try, you should tune the learning rate and other hyperparameters. When doing this there are a couple important things to keep in mind:\n", "\n", "- If the parameters are working well, you should see improvement within a few hundred iterations\n", "- Remember the coarse-to-fine approach for hyperparameter tuning: start by testing a large range of hyperparameters for just a few training iterations to find the combinations of parameters that are working at all.\n", "- Once you have found some sets of parameters that seem to work, search more finely around these parameters. You may need to train for more epochs.\n", "- You should use the validation set for hyperparameter search, and save your test set for evaluating your architecture on the best parameters as selected by the validation set.\n", "\n", "### Going above and beyond\n", "If you are feeling adventurous there are many other features you can implement to try and improve your performance. You are **not required** to implement any of these, but don't miss the fun if you have time!\n", "\n", "- Alternative optimizers: you can try Adam, Adagrad, RMSprop, etc.\n", "- Alternative activation functions such as leaky ReLU, parametric ReLU, ELU, or MaxOut.\n", "- Model ensembles\n", "- Data augmentation\n", "- New Architectures\n", " - [ResNets](https://arxiv.org/abs/1512.03385) where the input from the previous layer is added to the output.\n", " - [DenseNets](https://arxiv.org/abs/1608.06993) where inputs into previous layers are concatenated together.\n", " - [This blog has an in-depth overview](https://chatbotslife.com/resnets-highwaynets-and-densenets-oh-my-9bb15918ee32)\n", "\n", "### Have fun and happy training! " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "################################################################################\n", "# TODO: # \n", "# Experiment with any architectures, optimizers, and hyperparameters. #\n", "# Achieve AT LEAST 70% accuracy on the *validation set* within 10 epochs. #\n", "# #\n", "# Note that you can use the check_accuracy function to evaluate on either #\n", "# the test set or the validation set, by passing either loader_test or #\n", "# loader_val as the second argument to check_accuracy. You should not touch #\n", "# the test set until you have finished your architecture and hyperparameter #\n", "# tuning, and only run the test set once at the end to report a final value. #\n", "################################################################################\n", "model = None\n", "optimizer = None\n", "\n", "# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", "pass\n", "\n", "# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "################################################################################\n", "# END OF YOUR CODE \n", "################################################################################\n", "\n", "# You should get at least 70% accuracy\n", "train_part34(model, optimizer, epochs=10)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## Describe what you did \n", "\n", "In the cell below you should write an explanation of what you did, any additional features that you implemented, and/or any graphs that you made in the process of training and evaluating your network." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "TODO: Describe what you did" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Test set -- run this only once\n", "\n", "Now that we've gotten a result we're happy with, we test our final model on the test set (which you should store in best_model). Think about how this compares to your validation set accuracy." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "best_model = model\n", "check_accuracy_part34(loader_test, best_model)" ] } ], "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.7.1" }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "toc_cell": false, "toc_position": {}, "toc_section_display": "block", "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment2/TensorFlow.ipynb ================================================ { "nbformat_minor": 2, "nbformat": 4, "cells": [ { "source": [ "# What's this TensorFlow business?\n", "\n", "You've written a lot of code in this assignment to provide a whole host of neural network functionality. Dropout, Batch Norm, and 2D convolutions are some of the workhorses of deep learning in computer vision. You've also worked hard to make your code efficient and vectorized.\n", "\n", "For the last part of this assignment, though, we're going to leave behind your beautiful codebase and instead migrate to one of two popular deep learning frameworks: in this instance, TensorFlow (or PyTorch, if you choose to work with that notebook)." ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] } }, { "source": [ "#### What is it?\n", "TensorFlow is a system for executing computational graphs over Tensor objects, with native support for performing backpropogation for its Variables. In it, we work with Tensors which are n-dimensional arrays analogous to the numpy ndarray.\n", "\n", "#### Why?\n", "\n", "* Our code will now run on GPUs! Much faster training. Writing your own modules to run on GPUs is beyond the scope of this class, unfortunately.\n", "* We want you to be ready to use one of these frameworks for your project so you can experiment more efficiently than if you were writing every feature you want to use by hand. \n", "* We want you to stand on the shoulders of giants! TensorFlow and PyTorch are both excellent frameworks that will make your lives a lot easier, and now that you understand their guts, you are free to use them :) \n", "* We want you to be exposed to the sort of deep learning code you might run into in academia or industry. " ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] } }, { "source": [ "## How will I learn TensorFlow?\n", "\n", "TensorFlow has many excellent tutorials available, including those from [Google themselves](https://www.tensorflow.org/get_started/get_started).\n", "\n", "Otherwise, this notebook will walk you through much of what you need to do to train models in TensorFlow. See the end of the notebook for some links to helpful tutorials if you want to learn more or need further clarification on topics that aren't fully explained here.\n", "\n", "**NOTE: This notebook is meant to teach you the latest version of Tensorflow 2.0. Most examples on the web today are still in 1.x, so be careful not to confuse the two when looking up documentation**.\n", "\n", "## Install Tensorflow 2.0\n", "Tensorflow 2.0 is still not in a fully 100% stable release, but it's still usable and more intuitive than TF 1.x. Please make sure you have it installed before moving on in this notebook! Here are some steps to get started:\n", "\n", "1. Have the latest version of Anaconda installed on your machine.\n", "2. Create a new conda environment starting from Python 3.7. In this setup example, we'll call it `tf_20_env`.\n", "3. Run the command: `source activate tf_20_env`\n", "4. Then pip install TF 2.0 as described here: https://www.tensorflow.org/install/pip \n", "\n", "A guide on creating Anaconda enviornments: https://uoa-eresearch.github.io/eresearch-cookbook/recipe/2014/11/20/conda/\n", "\n", "This will give you an new enviornemnt to play in TF 2.0. Generally, if you plan to also use TensorFlow in your other projects, you might also want to keep a seperate Conda environment or virtualenv in Python 3.7 that has Tensorflow 1.9, so you can switch back and forth at will. " ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] } }, { "source": [ "# Table of Contents\n", "\n", "This notebook has 5 parts. We will walk through TensorFlow at **three different levels of abstraction**, which should help you better understand it and prepare you for working on your project.\n", "\n", "1. Part I, Preparation: load the CIFAR-10 dataset.\n", "2. Part II, Barebone TensorFlow: **Abstraction Level 1**, we will work directly with low-level TensorFlow graphs. \n", "3. Part III, Keras Model API: **Abstraction Level 2**, we will use `tf.keras.Model` to define arbitrary neural network architecture. \n", "4. Part IV, Keras Sequential + Functional API: **Abstraction Level 3**, we will use `tf.keras.Sequential` to define a linear feed-forward network very conveniently, and then explore the functional libraries for building unique and uncommon models that require more flexibility.\n", "5. Part V, CIFAR-10 open-ended challenge: please implement your own network to get as high accuracy as possible on CIFAR-10. You can experiment with any layer, optimizer, hyperparameters or other advanced features. \n", "\n", "We will discuss Keras in more detail later in the notebook.\n", "\n", "Here is a table of comparison:\n", "\n", "| API | Flexibility | Convenience |\n", "|---------------|-------------|-------------|\n", "| Barebone | High | Low |\n", "| `tf.keras.Model` | High | Medium |\n", "| `tf.keras.Sequential` | Low | High |" ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] } }, { "source": [ "# Part I: Preparation\n", "\n", "First, we load the CIFAR-10 dataset. This might take a few minutes to download the first time you run it, but after that the files should be cached on disk and loading should be faster.\n", "\n", "In previous parts of the assignment we used CS231N-specific code to download and read the CIFAR-10 dataset; however the `tf.keras.datasets` package in TensorFlow provides prebuilt utility functions for loading many common datasets.\n", "\n", "For the purposes of this assignment we will still write our own code to preprocess the data and iterate through it in minibatches. The `tf.data` package in TensorFlow provides tools for automating this process, but working with this package adds extra complication and is beyond the scope of this notebook. However using `tf.data` can be much more efficient than the simple approach used in this notebook, so you should consider using it for your project." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "import os\n", "import tensorflow as tf\n", "import numpy as np\n", "import math\n", "import timeit\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "def load_cifar10(num_training=49000, num_validation=1000, num_test=10000):\n", " \"\"\"\n", " Fetch the CIFAR-10 dataset from the web and perform preprocessing to prepare\n", " it for the two-layer neural net classifier. These are the same steps as\n", " we used for the SVM, but condensed to a single function.\n", " \"\"\"\n", " # Load the raw CIFAR-10 dataset and use appropriate data types and shapes\n", " cifar10 = tf.keras.datasets.cifar10.load_data()\n", " (X_train, y_train), (X_test, y_test) = cifar10\n", " X_train = np.asarray(X_train, dtype=np.float32)\n", " y_train = np.asarray(y_train, dtype=np.int32).flatten()\n", " X_test = np.asarray(X_test, dtype=np.float32)\n", " y_test = np.asarray(y_test, dtype=np.int32).flatten()\n", "\n", " # Subsample the data\n", " mask = range(num_training, num_training + num_validation)\n", " X_val = X_train[mask]\n", " y_val = y_train[mask]\n", " mask = range(num_training)\n", " X_train = X_train[mask]\n", " y_train = y_train[mask]\n", " mask = range(num_test)\n", " X_test = X_test[mask]\n", " y_test = y_test[mask]\n", "\n", " # Normalize the data: subtract the mean pixel and divide by std\n", " mean_pixel = X_train.mean(axis=(0, 1, 2), keepdims=True)\n", " std_pixel = X_train.std(axis=(0, 1, 2), keepdims=True)\n", " X_train = (X_train - mean_pixel) / std_pixel\n", " X_val = (X_val - mean_pixel) / std_pixel\n", " X_test = (X_test - mean_pixel) / std_pixel\n", "\n", " return X_train, y_train, X_val, y_val, X_test, y_test\n", "\n", "# If there are errors with SSL downloading involving self-signed certificates,\n", "# it may be that your Python version was recently installed on the current machine.\n", "# See: https://github.com/tensorflow/tensorflow/issues/10779\n", "# To fix, run the command: /Applications/Python\\ 3.7/Install\\ Certificates.command\n", "# ...replacing paths as necessary.\n", "\n", "# Invoke the above function to get our data.\n", "NHW = (0, 1, 2)\n", "X_train, y_train, X_val, y_val, X_test, y_test = load_cifar10()\n", "print('Train data shape: ', X_train.shape)\n", "print('Train labels shape: ', y_train.shape, y_train.dtype)\n", "print('Validation data shape: ', X_val.shape)\n", "print('Validation labels shape: ', y_val.shape)\n", "print('Test data shape: ', X_test.shape)\n", "print('Test labels shape: ', y_test.shape)" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "class Dataset(object):\n", " def __init__(self, X, y, batch_size, shuffle=False):\n", " \"\"\"\n", " Construct a Dataset object to iterate over data X and labels y\n", " \n", " Inputs:\n", " - X: Numpy array of data, of any shape\n", " - y: Numpy array of labels, of any shape but with y.shape[0] == X.shape[0]\n", " - batch_size: Integer giving number of elements per minibatch\n", " - shuffle: (optional) Boolean, whether to shuffle the data on each epoch\n", " \"\"\"\n", " assert X.shape[0] == y.shape[0], 'Got different numbers of data and labels'\n", " self.X, self.y = X, y\n", " self.batch_size, self.shuffle = batch_size, shuffle\n", "\n", " def __iter__(self):\n", " N, B = self.X.shape[0], self.batch_size\n", " idxs = np.arange(N)\n", " if self.shuffle:\n", " np.random.shuffle(idxs)\n", " return iter((self.X[i:i+B], self.y[i:i+B]) for i in range(0, N, B))\n", "\n", "\n", "train_dset = Dataset(X_train, y_train, batch_size=64, shuffle=True)\n", "val_dset = Dataset(X_val, y_val, batch_size=64, shuffle=False)\n", "test_dset = Dataset(X_test, y_test, batch_size=64)" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "# We can iterate through a dataset like this:\n", "for t, (x, y) in enumerate(train_dset):\n", " print(t, x.shape, y.shape)\n", " if t > 5: break" ], "outputs": [], "metadata": {} }, { "source": [ "You can optionally **use GPU by setting the flag to True below**. It's not neccessary to use a GPU for this assignment; if you are working on Google Cloud then we recommend that you do not use a GPU, as it will be significantly more expensive." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "# Set up some global variables\n", "USE_GPU = True\n", "\n", "if USE_GPU:\n", " device = '/device:GPU:0'\n", "else:\n", " device = '/cpu:0'\n", "\n", "# Constant to control how often we print when training models\n", "print_every = 100\n", "\n", "print('Using device: ', device)" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore-input" ] } }, { "source": [ "# Part II: Barebones TensorFlow\n", "TensorFlow ships with various high-level APIs which make it very convenient to define and train neural networks; we will cover some of these constructs in Part III and Part IV of this notebook. In this section we will start by building a model with basic TensorFlow constructs to help you better understand what's going on under the hood of the higher-level APIs.\n", "\n", "**\"Barebones Tensorflow\" is important to understanding the building blocks of TensorFlow, but much of it involves concepts from TensorFlow 1.x.** We will be working with legacy modules such as `tf.Variable`.\n", "\n", "Therefore, please read and understand the differences between legacy (1.x) TF and the new (2.0) TF.\n", "\n", "### Historical background on TensorFlow 1.x\n", "\n", "TensorFlow 1.x is primarily a framework for working with **static computational graphs**. Nodes in the computational graph are Tensors which will hold n-dimensional arrays when the graph is run; edges in the graph represent functions that will operate on Tensors when the graph is run to actually perform useful computation.\n", "\n", "Before Tensorflow 2.0, we had to configure the graph into two phases. There are plenty of tutorials online that explain this two-step process. The process generally looks like the following for TF 1.x:\n", "1. **Build a computational graph that describes the computation that you want to perform**. This stage doesn't actually perform any computation; it just builds up a symbolic representation of your computation. This stage will typically define one or more `placeholder` objects that represent inputs to the computational graph.\n", "2. **Run the computational graph many times.** Each time the graph is run (e.g. for one gradient descent step) you will specify which parts of the graph you want to compute, and pass a `feed_dict` dictionary that will give concrete values to any `placeholder`s in the graph.\n", "\n", "### The new paradigm in Tensorflow 2.0\n", "Now, with Tensorflow 2.0, we can simply adopt a functional form that is more Pythonic and similar in spirit to PyTorch and direct Numpy operation. Instead of the 2-step paradigm with computation graphs, making it (among other things) easier to debug TF code. You can read more details at https://www.tensorflow.org/guide/eager.\n", "\n", "The main difference between the TF 1.x and 2.0 approach is that the 2.0 approach doesn't make use of `tf.Session`, `tf.run`, `placeholder`, `feed_dict`. To get more details of what's different between the two version and how to convert between the two, check out the official migration guide: https://www.tensorflow.org/alpha/guide/migration_guide\n", "\n", "Later, in the rest of this notebook we'll focus on this new, simpler approach." ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] } }, { "source": [ "### TensorFlow warmup: Flatten Function\n", "\n", "We can see this in action by defining a simple `flatten` function that will reshape image data for use in a fully-connected network.\n", "\n", "In TensorFlow, data for convolutional feature maps is typically stored in a Tensor of shape N x H x W x C where:\n", "\n", "- N is the number of datapoints (minibatch size)\n", "- H is the height of the feature map\n", "- W is the width of the feature map\n", "- C is the number of channels in the feature map\n", "\n", "This is the right way to represent the data when we are doing something like a 2D convolution, that needs spatial understanding of where the intermediate features are relative to each other. When we use fully connected affine layers to process the image, however, we want each datapoint to be represented by a single vector -- it's no longer useful to segregate the different channels, rows, and columns of the data. So, we use a \"flatten\" operation to collapse the `H x W x C` values per representation into a single long vector. \n", "\n", "Notice the `tf.reshape` call has the target shape as `(N, -1)`, meaning it will reshape/keep the first dimension to be N, and then infer as necessary what the second dimension is in the output, so we can collapse the remaining dimensions from the input properly.\n", "\n", "**NOTE**: TensorFlow and PyTorch differ on the default Tensor layout; TensorFlow uses N x H x W x C but PyTorch uses N x C x H x W." ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "def flatten(x):\n", " \"\"\" \n", " Input:\n", " - TensorFlow Tensor of shape (N, D1, ..., DM)\n", " \n", " Output:\n", " - TensorFlow Tensor of shape (N, D1 * ... * DM)\n", " \"\"\"\n", " N = tf.shape(x)[0]\n", " return tf.reshape(x, (N, -1))" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "def test_flatten():\n", " # Construct concrete values of the input data x using numpy\n", " x_np = np.arange(24).reshape((2, 3, 4))\n", " print('x_np:\\n', x_np, '\\n')\n", " # Compute a concrete output value.\n", " x_flat_np = flatten(x_np)\n", " print('x_flat_np:\\n', x_flat_np, '\\n')\n", "\n", "test_flatten()" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore-input" ] } }, { "source": [ "### Barebones TensorFlow: Define a Two-Layer Network\n", "We will now implement our first neural network with TensorFlow: a fully-connected ReLU network with two hidden layers and no biases on the CIFAR10 dataset. For now we will use only low-level TensorFlow operators to define the network; later we will see how to use the higher-level abstractions provided by `tf.keras` to simplify the process.\n", "\n", "We will define the forward pass of the network in the function `two_layer_fc`; this will accept TensorFlow Tensors for the inputs and weights of the network, and return a TensorFlow Tensor for the scores. \n", "\n", "After defining the network architecture in the `two_layer_fc` function, we will test the implementation by checking the shape of the output.\n", "\n", "**It's important that you read and understand this implementation.**" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def two_layer_fc(x, params):\n", " \"\"\"\n", " A fully-connected neural network; the architecture is:\n", " fully-connected layer -> ReLU -> fully connected layer.\n", " Note that we only need to define the forward pass here; TensorFlow will take\n", " care of computing the gradients for us.\n", " \n", " The input to the network will be a minibatch of data, of shape\n", " (N, d1, ..., dM) where d1 * ... * dM = D. The hidden layer will have H units,\n", " and the output layer will produce scores for C classes.\n", "\n", " Inputs:\n", " - x: A TensorFlow Tensor of shape (N, d1, ..., dM) giving a minibatch of\n", " input data.\n", " - params: A list [w1, w2] of TensorFlow Tensors giving weights for the\n", " network, where w1 has shape (D, H) and w2 has shape (H, C).\n", " \n", " Returns:\n", " - scores: A TensorFlow Tensor of shape (N, C) giving classification scores\n", " for the input data x.\n", " \"\"\"\n", " w1, w2 = params # Unpack the parameters\n", " x = flatten(x) # Flatten the input; now x has shape (N, D)\n", " h = tf.nn.relu(tf.matmul(x, w1)) # Hidden layer: h has shape (N, H)\n", " scores = tf.matmul(h, w2) # Compute scores of shape (N, C)\n", " return scores" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "def two_layer_fc_test():\n", " hidden_layer_size = 42\n", "\n", " # Scoping our TF operations under a tf.device context manager \n", " # lets us tell TensorFlow where we want these Tensors to be\n", " # multiplied and/or operated on, e.g. on a CPU or a GPU.\n", " with tf.device(device): \n", " x = tf.zeros((64, 32, 32, 3))\n", " w1 = tf.zeros((32 * 32 * 3, hidden_layer_size))\n", " w2 = tf.zeros((hidden_layer_size, 10))\n", "\n", " # Call our two_layer_fc function for the forward pass of the network.\n", " scores = two_layer_fc(x, [w1, w2])\n", "\n", " print(scores.shape)\n", "\n", "two_layer_fc_test()" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore-input" ] } }, { "source": [ "### Barebones TensorFlow: Three-Layer ConvNet\n", "Here you will complete the implementation of the function `three_layer_convnet` which will perform the forward pass of a three-layer convolutional network. The network should have the following architecture:\n", "\n", "1. A convolutional layer (with bias) with `channel_1` filters, each with shape `KW1 x KH1`, and zero-padding of two\n", "2. ReLU nonlinearity\n", "3. A convolutional layer (with bias) with `channel_2` filters, each with shape `KW2 x KH2`, and zero-padding of one\n", "4. ReLU nonlinearity\n", "5. Fully-connected layer with bias, producing scores for `C` classes.\n", "\n", "**HINT**: For convolutions: https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/nn/conv2d; be careful with padding!\n", "\n", "**HINT**: For biases: https://www.tensorflow.org/performance/xla/broadcasting" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def three_layer_convnet(x, params):\n", " \"\"\"\n", " A three-layer convolutional network with the architecture described above.\n", " \n", " Inputs:\n", " - x: A TensorFlow Tensor of shape (N, H, W, 3) giving a minibatch of images\n", " - params: A list of TensorFlow Tensors giving the weights and biases for the\n", " network; should contain the following:\n", " - conv_w1: TensorFlow Tensor of shape (KH1, KW1, 3, channel_1) giving\n", " weights for the first convolutional layer.\n", " - conv_b1: TensorFlow Tensor of shape (channel_1,) giving biases for the\n", " first convolutional layer.\n", " - conv_w2: TensorFlow Tensor of shape (KH2, KW2, channel_1, channel_2)\n", " giving weights for the second convolutional layer\n", " - conv_b2: TensorFlow Tensor of shape (channel_2,) giving biases for the\n", " second convolutional layer.\n", " - fc_w: TensorFlow Tensor giving weights for the fully-connected layer.\n", " Can you figure out what the shape should be?\n", " - fc_b: TensorFlow Tensor giving biases for the fully-connected layer.\n", " Can you figure out what the shape should be?\n", " \"\"\"\n", " conv_w1, conv_b1, conv_w2, conv_b2, fc_w, fc_b = params\n", " scores = None\n", " ############################################################################\n", " # TODO: Implement the forward pass for the three-layer ConvNet. #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " return scores" ], "outputs": [], "metadata": {} }, { "source": [ "After defing the forward pass of the three-layer ConvNet above, run the following cell to test your implementation. Like the two-layer network, we run the graph on a batch of zeros just to make sure the function doesn't crash, and produces outputs of the correct shape.\n", "\n", "When you run this function, `scores_np` should have shape `(64, 10)`." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def three_layer_convnet_test():\n", " \n", " with tf.device(device):\n", " x = tf.zeros((64, 32, 32, 3))\n", " conv_w1 = tf.zeros((5, 5, 3, 6))\n", " conv_b1 = tf.zeros((6,))\n", " conv_w2 = tf.zeros((3, 3, 6, 9))\n", " conv_b2 = tf.zeros((9,))\n", " fc_w = tf.zeros((32 * 32 * 9, 10))\n", " fc_b = tf.zeros((10,))\n", " params = [conv_w1, conv_b1, conv_w2, conv_b2, fc_w, fc_b]\n", " scores = three_layer_convnet(x, params)\n", "\n", " # Inputs to convolutional layers are 4-dimensional arrays with shape\n", " # [batch_size, height, width, channels]\n", " print('scores_np has shape: ', scores.shape)\n", "\n", "three_layer_convnet_test()" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore-input" ] } }, { "source": [ "### Barebones TensorFlow: Training Step\n", "\n", "We now define the `training_step` function performs a single training step. This will take three basic steps:\n", "\n", "1. Compute the loss\n", "2. Compute the gradient of the loss with respect to all network weights\n", "3. Make a weight update step using (stochastic) gradient descent.\n", "\n", "\n", "We need to use a few new TensorFlow functions to do all of this:\n", "- For computing the cross-entropy loss we'll use `tf.nn.sparse_softmax_cross_entropy_with_logits`: https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/nn/sparse_softmax_cross_entropy_with_logits\n", "\n", "- For averaging the loss across a minibatch of data we'll use `tf.reduce_mean`:\n", "https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/reduce_mean\n", "\n", "- For computing gradients of the loss with respect to the weights we'll use `tf.GradientTape` (useful for Eager execution): https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/GradientTape\n", "\n", "- We'll mutate the weight values stored in a TensorFlow Tensor using `tf.assign_sub` (\"sub\" is for subtraction): https://www.tensorflow.org/api_docs/python/tf/assign_sub \n" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def training_step(model_fn, x, y, params, learning_rate):\n", " with tf.GradientTape() as tape:\n", " scores = model_fn(x, params) # Forward pass of the model\n", " loss = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=scores)\n", " total_loss = tf.reduce_mean(loss)\n", " grad_params = tape.gradient(total_loss, params)\n", "\n", " # Make a vanilla gradient descent step on all of the model parameters\n", " # Manually update the weights using assign_sub()\n", " for w, grad_w in zip(params, grad_params):\n", " w.assign_sub(learning_rate * grad_w)\n", " \n", " return total_loss" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "def train_part2(model_fn, init_fn, learning_rate):\n", " \"\"\"\n", " Train a model on CIFAR-10.\n", " \n", " Inputs:\n", " - model_fn: A Python function that performs the forward pass of the model\n", " using TensorFlow; it should have the following signature:\n", " scores = model_fn(x, params) where x is a TensorFlow Tensor giving a\n", " minibatch of image data, params is a list of TensorFlow Tensors holding\n", " the model weights, and scores is a TensorFlow Tensor of shape (N, C)\n", " giving scores for all elements of x.\n", " - init_fn: A Python function that initializes the parameters of the model.\n", " It should have the signature params = init_fn() where params is a list\n", " of TensorFlow Tensors holding the (randomly initialized) weights of the\n", " model.\n", " - learning_rate: Python float giving the learning rate to use for SGD.\n", " \"\"\"\n", " \n", " \n", " params = init_fn() # Initialize the model parameters \n", " \n", " for t, (x_np, y_np) in enumerate(train_dset):\n", " # Run the graph on a batch of training data.\n", " loss = training_step(model_fn, x_np, y_np, params, learning_rate)\n", " \n", " # Periodically print the loss and check accuracy on the val set.\n", " if t % print_every == 0:\n", " print('Iteration %d, loss = %.4f' % (t, loss))\n", " check_accuracy(val_dset, x_np, model_fn, params)" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "def check_accuracy(dset, x, model_fn, params):\n", " \"\"\"\n", " Check accuracy on a classification model, e.g. for validation.\n", " \n", " Inputs:\n", " - dset: A Dataset object against which to check accuracy\n", " - x: A TensorFlow placeholder Tensor where input images should be fed\n", " - model_fn: the Model we will be calling to make predictions on x\n", " - params: parameters for the model_fn to work with\n", " \n", " Returns: Nothing, but prints the accuracy of the model\n", " \"\"\"\n", " num_correct, num_samples = 0, 0\n", " for x_batch, y_batch in dset:\n", " scores_np = model_fn(x_batch, params).numpy()\n", " y_pred = scores_np.argmax(axis=1)\n", " num_samples += x_batch.shape[0]\n", " num_correct += (y_pred == y_batch).sum()\n", " acc = float(num_correct) / num_samples\n", " print('Got %d / %d correct (%.2f%%)' % (num_correct, num_samples, 100 * acc))" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "source": [ "### Barebones TensorFlow: Initialization\n", "We'll use the following utility method to initialize the weight matrices for our models using Kaiming's normalization method.\n", "\n", "[1] He et al, *Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification\n", "*, ICCV 2015, https://arxiv.org/abs/1502.01852" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def create_matrix_with_kaiming_normal(shape):\n", " if len(shape) == 2:\n", " fan_in, fan_out = shape[0], shape[1]\n", " elif len(shape) == 4:\n", " fan_in, fan_out = np.prod(shape[:3]), shape[3]\n", " return tf.keras.backend.random_normal(shape) * np.sqrt(2.0 / fan_in)" ], "outputs": [], "metadata": {} }, { "source": [ "### Barebones TensorFlow: Train a Two-Layer Network\n", "We are finally ready to use all of the pieces defined above to train a two-layer fully-connected network on CIFAR-10.\n", "\n", "We just need to define a function to initialize the weights of the model, and call `train_part2`.\n", "\n", "Defining the weights of the network introduces another important piece of TensorFlow API: `tf.Variable`. A TensorFlow Variable is a Tensor whose value is stored in the graph and persists across runs of the computational graph; however unlike constants defined with `tf.zeros` or `tf.random_normal`, the values of a Variable can be mutated as the graph runs; these mutations will persist across graph runs. Learnable parameters of the network are usually stored in Variables.\n", "\n", "You don't need to tune any hyperparameters, but you should achieve validation accuracies above 40% after one epoch of training." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def two_layer_fc_init():\n", " \"\"\"\n", " Initialize the weights of a two-layer network, for use with the\n", " two_layer_network function defined above. \n", " You can use the `create_matrix_with_kaiming_normal` helper!\n", " \n", " Inputs: None\n", " \n", " Returns: A list of:\n", " - w1: TensorFlow tf.Variable giving the weights for the first layer\n", " - w2: TensorFlow tf.Variable giving the weights for the second layer\n", " \"\"\"\n", " hidden_layer_size = 4000\n", " w1 = tf.Variable(create_matrix_with_kaiming_normal((3 * 32 * 32, 4000)))\n", " w2 = tf.Variable(create_matrix_with_kaiming_normal((4000, 10)))\n", " return [w1, w2]\n", "\n", "learning_rate = 1e-2\n", "train_part2(two_layer_fc, two_layer_fc_init, learning_rate)" ], "outputs": [], "metadata": {} }, { "source": [ "### Barebones TensorFlow: Train a three-layer ConvNet\n", "We will now use TensorFlow to train a three-layer ConvNet on CIFAR-10.\n", "\n", "You need to implement the `three_layer_convnet_init` function. Recall that the architecture of the network is:\n", "\n", "1. Convolutional layer (with bias) with 32 5x5 filters, with zero-padding 2\n", "2. ReLU\n", "3. Convolutional layer (with bias) with 16 3x3 filters, with zero-padding 1\n", "4. ReLU\n", "5. Fully-connected layer (with bias) to compute scores for 10 classes\n", "\n", "You don't need to do any hyperparameter tuning, but you should see validation accuracies above 43% after one epoch of training." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def three_layer_convnet_init():\n", " \"\"\"\n", " Initialize the weights of a Three-Layer ConvNet, for use with the\n", " three_layer_convnet function defined above.\n", " You can use the `create_matrix_with_kaiming_normal` helper!\n", " \n", " Inputs: None\n", " \n", " Returns a list containing:\n", " - conv_w1: TensorFlow tf.Variable giving weights for the first conv layer\n", " - conv_b1: TensorFlow tf.Variable giving biases for the first conv layer\n", " - conv_w2: TensorFlow tf.Variable giving weights for the second conv layer\n", " - conv_b2: TensorFlow tf.Variable giving biases for the second conv layer\n", " - fc_w: TensorFlow tf.Variable giving weights for the fully-connected layer\n", " - fc_b: TensorFlow tf.Variable giving biases for the fully-connected layer\n", " \"\"\"\n", " params = None\n", " ############################################################################\n", " # TODO: Initialize the parameters of the three-layer network. #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " return params\n", "\n", "learning_rate = 3e-3\n", "train_part2(three_layer_convnet, three_layer_convnet_init, learning_rate)" ], "outputs": [], "metadata": {} }, { "source": [ "# Part III: Keras Model Subclassing API\n", "\n", "Implementing a neural network using the low-level TensorFlow API is a good way to understand how TensorFlow works, but it's a little inconvenient - we had to manually keep track of all Tensors holding learnable parameters. This was fine for a small network, but could quickly become unweildy for a large complex model.\n", "\n", "Fortunately TensorFlow 2.0 provides higher-level APIs such as `tf.keras` which make it easy to build models out of modular, object-oriented layers. Further, TensorFlow 2.0 uses eager execution that evaluates operations immediately, without explicitly constructing any computational graphs. This makes it easy to write and debug models, and reduces the boilerplate code.\n", "\n", "In this part of the notebook we will define neural network models using the `tf.keras.Model` API. To implement your own model, you need to do the following:\n", "\n", "1. Define a new class which subclasses `tf.keras.Model`. Give your class an intuitive name that describes it, like `TwoLayerFC` or `ThreeLayerConvNet`.\n", "2. In the initializer `__init__()` for your new class, define all the layers you need as class attributes. The `tf.keras.layers` package provides many common neural-network layers, like `tf.keras.layers.Dense` for fully-connected layers and `tf.keras.layers.Conv2D` for convolutional layers. Under the hood, these layers will construct `Variable` Tensors for any learnable parameters. **Warning**: Don't forget to call `super(YourModelName, self).__init__()` as the first line in your initializer!\n", "3. Implement the `call()` method for your class; this implements the forward pass of your model, and defines the *connectivity* of your network. Layers defined in `__init__()` implement `__call__()` so they can be used as function objects that transform input Tensors into output Tensors. Don't define any new layers in `call()`; any layers you want to use in the forward pass should be defined in `__init__()`.\n", "\n", "After you define your `tf.keras.Model` subclass, you can instantiate it and use it like the model functions from Part II.\n", "\n", "### Keras Model Subclassing API: Two-Layer Network\n", "\n", "Here is a concrete example of using the `tf.keras.Model` API to define a two-layer network. There are a few new bits of API to be aware of here:\n", "\n", "We use an `Initializer` object to set up the initial values of the learnable parameters of the layers; in particular `tf.initializers.VarianceScaling` gives behavior similar to the Kaiming initialization method we used in Part II. You can read more about it here: https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/initializers/VarianceScaling\n", "\n", "We construct `tf.keras.layers.Dense` objects to represent the two fully-connected layers of the model. In addition to multiplying their input by a weight matrix and adding a bias vector, these layer can also apply a nonlinearity for you. For the first layer we specify a ReLU activation function by passing `activation='relu'` to the constructor; the second layer uses softmax activation function. Finally, we use `tf.keras.layers.Flatten` to flatten the output from the previous fully-connected layer." ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] } }, { "execution_count": null, "cell_type": "code", "source": [ "class TwoLayerFC(tf.keras.Model):\n", " def __init__(self, hidden_size, num_classes):\n", " super(TwoLayerFC, self).__init__() \n", " initializer = tf.initializers.VarianceScaling(scale=2.0)\n", " self.fc1 = tf.keras.layers.Dense(hidden_size, activation='relu',\n", " kernel_initializer=initializer)\n", " self.fc2 = tf.keras.layers.Dense(num_classes, activation='softmax',\n", " kernel_initializer=initializer)\n", " self.flatten = tf.keras.layers.Flatten()\n", " \n", " def call(self, x, training=False):\n", " x = self.flatten(x)\n", " x = self.fc1(x)\n", " x = self.fc2(x)\n", " return x\n", "\n", "\n", "def test_TwoLayerFC():\n", " \"\"\" A small unit test to exercise the TwoLayerFC model above. \"\"\"\n", " input_size, hidden_size, num_classes = 50, 42, 10\n", " x = tf.zeros((64, input_size))\n", " model = TwoLayerFC(hidden_size, num_classes)\n", " with tf.device(device):\n", " scores = model(x)\n", " print(scores.shape)\n", " \n", "test_TwoLayerFC()" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore-input" ] } }, { "source": [ "### Keras Model Subclassing API: Three-Layer ConvNet\n", "Now it's your turn to implement a three-layer ConvNet using the `tf.keras.Model` API. Your model should have the same architecture used in Part II:\n", "\n", "1. Convolutional layer with 5 x 5 kernels, with zero-padding of 2\n", "2. ReLU nonlinearity\n", "3. Convolutional layer with 3 x 3 kernels, with zero-padding of 1\n", "4. ReLU nonlinearity\n", "5. Fully-connected layer to give class scores\n", "6. Softmax nonlinearity\n", "\n", "You should initialize the weights of your network using the same initialization method as was used in the two-layer network above.\n", "\n", "**Hint**: Refer to the documentation for `tf.keras.layers.Conv2D` and `tf.keras.layers.Dense`:\n", "\n", "https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/layers/Conv2D\n", "\n", "https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/layers/Dense" ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "class ThreeLayerConvNet(tf.keras.Model):\n", " def __init__(self, channel_1, channel_2, num_classes):\n", " super(ThreeLayerConvNet, self).__init__()\n", " ########################################################################\n", " # TODO: Implement the __init__ method for a three-layer ConvNet. You #\n", " # should instantiate layer objects to be used in the forward pass. #\n", " ########################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ########################################################################\n", " # END OF YOUR CODE #\n", " ########################################################################\n", " \n", " def call(self, x, training=False):\n", " scores = None\n", " ########################################################################\n", " # TODO: Implement the forward pass for a three-layer ConvNet. You #\n", " # should use the layer objects defined in the __init__ method. #\n", " ########################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ########################################################################\n", " # END OF YOUR CODE #\n", " ######################################################################## \n", " return scores" ], "outputs": [], "metadata": {} }, { "source": [ "Once you complete the implementation of the `ThreeLayerConvNet` above you can run the following to ensure that your implementation does not crash and produces outputs of the expected shape." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def test_ThreeLayerConvNet(): \n", " channel_1, channel_2, num_classes = 12, 8, 10\n", " model = ThreeLayerConvNet(channel_1, channel_2, num_classes)\n", " with tf.device(device):\n", " x = tf.zeros((64, 3, 32, 32))\n", " scores = model(x)\n", " print(scores.shape)\n", "\n", "test_ThreeLayerConvNet()" ], "outputs": [], "metadata": {} }, { "source": [ "### Keras Model Subclassing API: Eager Training\n", "\n", "While keras models have a builtin training loop (using the `model.fit`), sometimes you need more customization. Here's an example, of a training loop implemented with eager execution.\n", "\n", "In particular, notice `tf.GradientTape`. Automatic differentiation is used in the backend for implementing backpropagation in frameworks like TensorFlow. During eager execution, `tf.GradientTape` is used to trace operations for computing gradients later. A particular `tf.GradientTape` can only compute one gradient; subsequent calls to tape will throw a runtime error. \n", "\n", "TensorFlow 2.0 ships with easy-to-use built-in metrics under `tf.keras.metrics` module. Each metric is an object, and we can use `update_state()` to add observations and `reset_state()` to clear all observations. We can get the current result of a metric by calling `result()` on the metric object." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def train_part34(model_init_fn, optimizer_init_fn, num_epochs=1, is_training=False):\n", " \"\"\"\n", " Simple training loop for use with models defined using tf.keras. It trains\n", " a model for one epoch on the CIFAR-10 training set and periodically checks\n", " accuracy on the CIFAR-10 validation set.\n", " \n", " Inputs:\n", " - model_init_fn: A function that takes no parameters; when called it\n", " constructs the model we want to train: model = model_init_fn()\n", " - optimizer_init_fn: A function which takes no parameters; when called it\n", " constructs the Optimizer object we will use to optimize the model:\n", " optimizer = optimizer_init_fn()\n", " - num_epochs: The number of epochs to train for\n", " \n", " Returns: Nothing, but prints progress during trainingn\n", " \"\"\" \n", " with tf.device(device):\n", "\n", " # Compute the loss like we did in Part II\n", " loss_fn = tf.keras.losses.SparseCategoricalCrossentropy()\n", " \n", " model = model_init_fn()\n", " optimizer = optimizer_init_fn()\n", " \n", " train_loss = tf.keras.metrics.Mean(name='train_loss')\n", " train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')\n", " \n", " val_loss = tf.keras.metrics.Mean(name='val_loss')\n", " val_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='val_accuracy')\n", " \n", " t = 0\n", " for epoch in range(num_epochs):\n", " \n", " # Reset the metrics - https://www.tensorflow.org/alpha/guide/migration_guide#new-style_metrics\n", " train_loss.reset_states()\n", " train_accuracy.reset_states()\n", " \n", " for x_np, y_np in train_dset:\n", " with tf.GradientTape() as tape:\n", " \n", " # Use the model function to build the forward pass.\n", " scores = model(x_np, training=is_training)\n", " loss = loss_fn(y_np, scores)\n", " \n", " gradients = tape.gradient(loss, model.trainable_variables)\n", " optimizer.apply_gradients(zip(gradients, model.trainable_variables))\n", " \n", " # Update the metrics\n", " train_loss.update_state(loss)\n", " train_accuracy.update_state(y_np, scores)\n", " \n", " if t % print_every == 0:\n", " val_loss.reset_states()\n", " val_accuracy.reset_states()\n", " for test_x, test_y in val_dset:\n", " # During validation at end of epoch, training set to False\n", " prediction = model(test_x, training=False)\n", " t_loss = loss_fn(test_y, prediction)\n", "\n", " val_loss.update_state(t_loss)\n", " val_accuracy.update_state(test_y, prediction)\n", " \n", " template = 'Iteration {}, Epoch {}, Loss: {}, Accuracy: {}, Val Loss: {}, Val Accuracy: {}'\n", " print (template.format(t, epoch+1,\n", " train_loss.result(),\n", " train_accuracy.result()*100,\n", " val_loss.result(),\n", " val_accuracy.result()*100))\n", " t += 1" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "source": [ "### Keras Model Subclassing API: Train a Two-Layer Network\n", "We can now use the tools defined above to train a two-layer network on CIFAR-10. We define the `model_init_fn` and `optimizer_init_fn` that construct the model and optimizer respectively when called. Here we want to train the model using stochastic gradient descent with no momentum, so we construct a `tf.keras.optimizers.SGD` function; you can [read about it here](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/optimizers/SGD).\n", "\n", "You don't need to tune any hyperparameters here, but you should achieve validation accuracies above 40% after one epoch of training." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "hidden_size, num_classes = 4000, 10\n", "learning_rate = 1e-2\n", "\n", "def model_init_fn():\n", " return TwoLayerFC(hidden_size, num_classes)\n", "\n", "def optimizer_init_fn():\n", " return tf.keras.optimizers.SGD(learning_rate=learning_rate)\n", "\n", "train_part34(model_init_fn, optimizer_init_fn)" ], "outputs": [], "metadata": {} }, { "source": [ "### Keras Model Subclassing API: Train a Three-Layer ConvNet\n", "Here you should use the tools we've defined above to train a three-layer ConvNet on CIFAR-10. Your ConvNet should use 32 filters in the first convolutional layer and 16 filters in the second layer.\n", "\n", "To train the model you should use gradient descent with Nesterov momentum 0.9. \n", "\n", "**HINT**: https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/optimizers/SGD\n", "\n", "You don't need to perform any hyperparameter tuning, but you should achieve validation accuracies above 50% after training for one epoch." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "learning_rate = 3e-3\n", "channel_1, channel_2, num_classes = 32, 16, 10\n", "\n", "def model_init_fn():\n", " model = None\n", " ############################################################################\n", " # TODO: Complete the implementation of model_fn. #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " return model\n", "\n", "def optimizer_init_fn():\n", " optimizer = None\n", " ############################################################################\n", " # TODO: Complete the implementation of model_fn. #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " return optimizer\n", "\n", "train_part34(model_init_fn, optimizer_init_fn)" ], "outputs": [], "metadata": {} }, { "source": [ "# Part IV: Keras Sequential API\n", "In Part III we introduced the `tf.keras.Model` API, which allows you to define models with any number of learnable layers and with arbitrary connectivity between layers.\n", "\n", "However for many models you don't need such flexibility - a lot of models can be expressed as a sequential stack of layers, with the output of each layer fed to the next layer as input. If your model fits this pattern, then there is an even easier way to define your model: using `tf.keras.Sequential`. You don't need to write any custom classes; you simply call the `tf.keras.Sequential` constructor with a list containing a sequence of layer objects.\n", "\n", "One complication with `tf.keras.Sequential` is that you must define the shape of the input to the model by passing a value to the `input_shape` of the first layer in your model.\n", "\n", "### Keras Sequential API: Two-Layer Network\n", "In this subsection, we will rewrite the two-layer fully-connected network using `tf.keras.Sequential`, and train it using the training loop defined above.\n", "\n", "You don't need to perform any hyperparameter tuning here, but you should see validation accuracies above 40% after training for one epoch." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "learning_rate = 1e-2\n", "\n", "def model_init_fn():\n", " input_shape = (32, 32, 3)\n", " hidden_layer_size, num_classes = 4000, 10\n", " initializer = tf.initializers.VarianceScaling(scale=2.0)\n", " layers = [\n", " tf.keras.layers.Flatten(input_shape=input_shape),\n", " tf.keras.layers.Dense(hidden_layer_size, activation='relu',\n", " kernel_initializer=initializer),\n", " tf.keras.layers.Dense(num_classes, activation='softmax', \n", " kernel_initializer=initializer),\n", " ]\n", " model = tf.keras.Sequential(layers)\n", " return model\n", "\n", "def optimizer_init_fn():\n", " return tf.keras.optimizers.SGD(learning_rate=learning_rate) \n", "\n", "train_part34(model_init_fn, optimizer_init_fn)" ], "outputs": [], "metadata": {} }, { "source": [ "### Abstracting Away the Training Loop\n", "In the previous examples, we used a customised training loop to train models (e.g. `train_part34`). Writing your own training loop is only required if you need more flexibility and control during training your model. Alternately, you can also use built-in APIs like `tf.keras.Model.fit()` and `tf.keras.Model.evaluate` to train and evaluate a model. Also remember to configure your model for training by calling `tf.keras.Model.compile.\n", "\n", "You don't need to perform any hyperparameter tuning here, but you should see validation and test accuracies above 42% after training for one epoch." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "model = model_init_fn()\n", "model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=learning_rate),\n", " loss='sparse_categorical_crossentropy',\n", " metrics=[tf.keras.metrics.sparse_categorical_accuracy])\n", "model.fit(X_train, y_train, batch_size=64, epochs=1, validation_data=(X_val, y_val))\n", "model.evaluate(X_test, y_test)" ], "outputs": [], "metadata": {} }, { "source": [ "### Keras Sequential API: Three-Layer ConvNet\n", "Here you should use `tf.keras.Sequential` to reimplement the same three-layer ConvNet architecture used in Part II and Part III. As a reminder, your model should have the following architecture:\n", "\n", "1. Convolutional layer with 32 5x5 kernels, using zero padding of 2\n", "2. ReLU nonlinearity\n", "3. Convolutional layer with 16 3x3 kernels, using zero padding of 1\n", "4. ReLU nonlinearity\n", "5. Fully-connected layer giving class scores\n", "6. Softmax nonlinearity\n", "\n", "You should initialize the weights of the model using a `tf.initializers.VarianceScaling` as above.\n", "\n", "You should train the model using Nesterov momentum 0.9.\n", "\n", "You don't need to perform any hyperparameter search, but you should achieve accuracy above 45% after training for one epoch." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def model_init_fn():\n", " model = None\n", " ############################################################################\n", " # TODO: Construct a three-layer ConvNet using tf.keras.Sequential. #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " return model\n", "\n", "learning_rate = 5e-4\n", "def optimizer_init_fn():\n", " optimizer = None\n", " ############################################################################\n", " # TODO: Complete the implementation of model_fn. #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " return optimizer\n", "\n", "train_part34(model_init_fn, optimizer_init_fn)" ], "outputs": [], "metadata": {} }, { "source": [ "We will also train this model with the built-in training loop APIs provided by TensorFlow." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "model = model_init_fn()\n", "model.compile(optimizer='sgd',\n", " loss='sparse_categorical_crossentropy',\n", " metrics=[tf.keras.metrics.sparse_categorical_accuracy])\n", "model.fit(X_train, y_train, batch_size=64, epochs=1, validation_data=(X_val, y_val))\n", "model.evaluate(X_test, y_test)" ], "outputs": [], "metadata": {} }, { "source": [ "## Part IV: Functional API\n", "### Demonstration with a Two-Layer Network \n", "\n", "In the previous section, we saw how we can use `tf.keras.Sequential` to stack layers to quickly build simple models. But this comes at the cost of losing flexibility.\n", "\n", "Often we will have to write complex models that have non-sequential data flows: a layer can have **multiple inputs and/or outputs**, such as stacking the output of 2 previous layers together to feed as input to a third! (Some examples are residual connections and dense blocks.)\n", "\n", "In such cases, we can use Keras functional API to write models with complex topologies such as:\n", "\n", " 1. Multi-input models\n", " 2. Multi-output models\n", " 3. Models with shared layers (the same layer called several times)\n", " 4. Models with non-sequential data flows (e.g. residual connections)\n", "\n", "Writing a model with Functional API requires us to create a `tf.keras.Model` instance and explicitly write input tensors and output tensors for this model. " ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "def two_layer_fc_functional(input_shape, hidden_size, num_classes): \n", " initializer = tf.initializers.VarianceScaling(scale=2.0)\n", " inputs = tf.keras.Input(shape=input_shape)\n", " flattened_inputs = tf.keras.layers.Flatten()(inputs)\n", " fc1_output = tf.keras.layers.Dense(hidden_size, activation='relu',\n", " kernel_initializer=initializer)(flattened_inputs)\n", " scores = tf.keras.layers.Dense(num_classes, activation='softmax',\n", " kernel_initializer=initializer)(fc1_output)\n", "\n", " # Instantiate the model given inputs and outputs.\n", " model = tf.keras.Model(inputs=inputs, outputs=scores)\n", " return model\n", "\n", "def test_two_layer_fc_functional():\n", " \"\"\" A small unit test to exercise the TwoLayerFC model above. \"\"\"\n", " input_size, hidden_size, num_classes = 50, 42, 10\n", " input_shape = (50,)\n", " \n", " x = tf.zeros((64, input_size))\n", " model = two_layer_fc_functional(input_shape, hidden_size, num_classes)\n", " \n", " with tf.device(device):\n", " scores = model(x)\n", " print(scores.shape)\n", " \n", "test_two_layer_fc_functional()" ], "outputs": [], "metadata": { "tags": [ "pdf-ignore" ] } }, { "source": [ "### Keras Functional API: Train a Two-Layer Network\n", "You can now train this two-layer network constructed using the functional API.\n", "\n", "You don't need to perform any hyperparameter tuning here, but you should see validation accuracies above 40% after training for one epoch." ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "input_shape = (32, 32, 3)\n", "hidden_size, num_classes = 4000, 10\n", "learning_rate = 1e-2\n", "\n", "def model_init_fn():\n", " return two_layer_fc_functional(input_shape, hidden_size, num_classes)\n", "\n", "def optimizer_init_fn():\n", " return tf.keras.optimizers.SGD(learning_rate=learning_rate)\n", "\n", "train_part34(model_init_fn, optimizer_init_fn)" ], "outputs": [], "metadata": {} }, { "source": [ "# Part V: CIFAR-10 open-ended challenge\n", "\n", "In this section you can experiment with whatever ConvNet architecture you'd like on CIFAR-10.\n", "\n", "You should experiment with architectures, hyperparameters, loss functions, regularization, or anything else you can think of to train a model that achieves **at least 70%** accuracy on the **validation** set within 10 epochs. You can use the built-in train function, the `train_part34` function from above, or implement your own training loop.\n", "\n", "Describe what you did at the end of the notebook.\n", "\n", "### Some things you can try:\n", "- **Filter size**: Above we used 5x5 and 3x3; is this optimal?\n", "- **Number of filters**: Above we used 16 and 32 filters. Would more or fewer do better?\n", "- **Pooling**: We didn't use any pooling above. Would this improve the model?\n", "- **Normalization**: Would your model be improved with batch normalization, layer normalization, group normalization, or some other normalization strategy?\n", "- **Network architecture**: The ConvNet above has only three layers of trainable parameters. Would a deeper model do better?\n", "- **Global average pooling**: Instead of flattening after the final convolutional layer, would global average pooling do better? This strategy is used for example in Google's Inception network and in Residual Networks.\n", "- **Regularization**: Would some kind of regularization improve performance? Maybe weight decay or dropout?\n", "\n", "### NOTE: Batch Normalization / Dropout\n", "If you are using Batch Normalization and Dropout, remember to pass `is_training=True` if you use the `train_part34()` function. BatchNorm and Dropout layers have different behaviors at training and inference time. `training` is a specific keyword argument reserved for this purpose in any `tf.keras.Model`'s `call()` function. Read more about this here : https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/layers/BatchNormalization#methods\n", "https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/layers/Dropout#methods\n", "\n", "### Tips for training\n", "For each network architecture that you try, you should tune the learning rate and other hyperparameters. When doing this there are a couple important things to keep in mind: \n", "\n", "- If the parameters are working well, you should see improvement within a few hundred iterations\n", "- Remember the coarse-to-fine approach for hyperparameter tuning: start by testing a large range of hyperparameters for just a few training iterations to find the combinations of parameters that are working at all.\n", "- Once you have found some sets of parameters that seem to work, search more finely around these parameters. You may need to train for more epochs.\n", "- You should use the validation set for hyperparameter search, and save your test set for evaluating your architecture on the best parameters as selected by the validation set.\n", "\n", "### Going above and beyond\n", "If you are feeling adventurous there are many other features you can implement to try and improve your performance. You are **not required** to implement any of these, but don't miss the fun if you have time!\n", "\n", "- Alternative optimizers: you can try Adam, Adagrad, RMSprop, etc.\n", "- Alternative activation functions such as leaky ReLU, parametric ReLU, ELU, or MaxOut.\n", "- Model ensembles\n", "- Data augmentation\n", "- New Architectures\n", " - [ResNets](https://arxiv.org/abs/1512.03385) where the input from the previous layer is added to the output.\n", " - [DenseNets](https://arxiv.org/abs/1608.06993) where inputs into previous layers are concatenated together.\n", " - [This blog has an in-depth overview](https://chatbotslife.com/resnets-highwaynets-and-densenets-oh-my-9bb15918ee32)\n", " \n", "### Have fun and happy training! " ], "cell_type": "markdown", "metadata": {} }, { "execution_count": null, "cell_type": "code", "source": [ "class CustomConvNet(tf.keras.Model):\n", " def __init__(self):\n", " super(CustomConvNet, self).__init__()\n", " ############################################################################\n", " # TODO: Construct a model that performs well on CIFAR-10 #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " \n", " def call(self, input_tensor, training=False):\n", " ############################################################################\n", " # TODO: Construct a model that performs well on CIFAR-10 #\n", " ############################################################################\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ############################################################################\n", " # END OF YOUR CODE #\n", " ############################################################################\n", " \n", " return x\n", "\n", "device = '/device:GPU:0' # Change this to a CPU/GPU as you wish!\n", "# device = '/cpu:0' # Change this to a CPU/GPU as you wish!\n", "print_every = 700\n", "num_epochs = 10\n", "\n", "model = CustomConvNet()\n", "\n", "def model_init_fn():\n", " return CustomConvNet()\n", "\n", "def optimizer_init_fn():\n", " learning_rate = 1e-3\n", " return tf.keras.optimizers.Adam(learning_rate) \n", "\n", "train_part34(model_init_fn, optimizer_init_fn, num_epochs=num_epochs, is_training=True)" ], "outputs": [], "metadata": {} }, { "source": [ "## Describe what you did \n", "\n", "In the cell below you should write an explanation of what you did, any additional features that you implemented, and/or any graphs that you made in the process of training and evaluating your network." ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] } }, { "source": [ "TODO: Tell us what you did" ], "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] } } ], "metadata": { "kernelspec": { "display_name": "Python 3", "name": "python3", "language": "python" }, "language_info": { "mimetype": "text/x-python", "nbconvert_exporter": "python", "name": "python", "file_extension": ".py", "version": "3.7.1", "pygments_lexer": "ipython3", "codemirror_mode": { "version": 3, "name": "ipython" } } } } ================================================ FILE: assignment2/collectSubmission.sh ================================================ #!/bin/bash #NOTE: DO NOT EDIT THIS FILE-- MAY RESULT IN INCOMPLETE SUBMISSIONS NOTEBOOKS="FullyConnectedNets.ipynb BatchNormalization.ipynb Dropout.ipynb ConvolutionalNetworks.ipynb PyTorch.ipynb TensorFlow.ipynb" CODE="cs231n/layers.py cs231n/classifiers/fc_net.py cs231n/optim.py cs231n/classifiers/cnn.py" REMOTE_DIR="cs231n-2019-assignment2" ZIP_FILENAME="a2.zip" FILES="${NOTEBOOKS} ${CODE}" for FILE in ${FILES} do if [ ! -f ${FILE} ]; then echo "Required file ${FILE} not found, Exiting." exit 0 fi done if [ -d ${REMOTE_DIR} ]; then rm -r ${REMOTE_DIR} fi mkdir -p ${REMOTE_DIR} cp ${FILES} ${REMOTE_DIR} echo "### Zipping file ###" zip -r ${REMOTE_DIR}/${ZIP_FILENAME} . -x "*.git*" "*cs231n/datasets*" "*.ipynb_checkpoints*" "*README.md" "collectSubmission.sh" "*requirements.txt" "*__pycache__*" ".env/*" > assignment_zip.log echo "" echo "### Submitting to myth ###" echo "Type in your Stanford student ID (alphanumeric, *not* the 8-digit ID):" read -p "Student ID: " SUID echo "" echo "### Copying to ${SUID}@myth.stanford.edu:${REMOTE_DIR} ###" echo "Note: if myth is under heavy use, this may hang: If this happens, rerun the script." scp -r ${REMOTE_DIR} ${SUID}@myth.stanford.edu:~/ echo "" echo "### Running remote submission script from ${SUID}@myth.stanford.edu:${REMOTE_DIR} ###" ssh ${SUID}@myth.stanford.edu "cd ${REMOTE_DIR} && /afs/ir/class/cs231n/grading/submit_a2 && exit" ================================================ FILE: assignment2/cs231n/classifiers/cnn.py ================================================ from builtins import object import numpy as np from cs231n.layers import * from cs231n.fast_layers import * from cs231n.layer_utils import * class ThreeLayerConvNet(object): """ A three-layer convolutional network with the following architecture: conv - relu - 2x2 max pool - affine - relu - affine - softmax The network operates on minibatches of data that have shape (N, C, H, W) consisting of N images, each with height H and width W and with C input channels. """ def __init__(self, input_dim=(3, 32, 32), num_filters=32, filter_size=7, hidden_dim=100, num_classes=10, weight_scale=1e-3, reg=0.0, dtype=np.float32): """ Initialize a new network. Inputs: - input_dim: Tuple (C, H, W) giving size of input data - num_filters: Number of filters to use in the convolutional layer - filter_size: Width/height of filters to use in the convolutional layer - hidden_dim: Number of units to use in the fully-connected hidden layer - num_classes: Number of scores to produce from the final affine layer. - weight_scale: Scalar giving standard deviation for random initialization of weights. - reg: Scalar giving L2 regularization strength - dtype: numpy datatype to use for computation. """ self.params = {} self.reg = reg self.dtype = dtype ############################################################################ # TODO: Initialize weights and biases for the three-layer convolutional # # network. Weights should be initialized from a Gaussian centered at 0.0 # # with standard deviation equal to weight_scale; biases should be # # initialized to zero. All weights and biases should be stored in the # # dictionary self.params. Store weights and biases for the convolutional # # layer using the keys 'W1' and 'b1'; use keys 'W2' and 'b2' for the # # weights and biases of the hidden affine layer, and keys 'W3' and 'b3' # # for the weights and biases of the output affine layer. # # # # IMPORTANT: For this assignment, you can assume that the padding # # and stride of the first convolutional layer are chosen so that # # **the width and height of the input are preserved**. Take a look at # # the start of the loss() function to see how that happens. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** W1 = weight_scale*np.random.randn(num_filters, input_dim[-3], filter_size, filter_size) b1 = np.zeros((num_filters,)) W2 = weight_scale*np.random.randn(int(input_dim[-1]**2/4*num_filters), hidden_dim) b2 = np.zeros((hidden_dim,)) W3 = weight_scale*np.random.randn(hidden_dim, num_classes) b3 = np.zeros((num_classes,)) self.params['W1'] = W1 self.params['b1'] = b1 self.params['W2'] = W2 self.params['b2'] = b2 self.params['W3'] = W3 self.params['b3'] = b3 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ for k, v in self.params.items(): self.params[k] = v.astype(dtype) def loss(self, X, y=None): """ Evaluate loss and gradient for the three-layer convolutional network. Input / output: Same API as TwoLayerNet in fc_net.py. """ W1, b1 = self.params['W1'], self.params['b1'] W2, b2 = self.params['W2'], self.params['b2'] W3, b3 = self.params['W3'], self.params['b3'] # pass conv_param to the forward pass for the convolutional layer # Padding and stride chosen to preserve the input spatial size filter_size = W1.shape[2] conv_param = {'stride': 1, 'pad': (filter_size - 1) // 2} # pass pool_param to the forward pass for the max-pooling layer pool_param = {'pool_height': 2, 'pool_width': 2, 'stride': 2} scores = None ############################################################################ # TODO: Implement the forward pass for the three-layer convolutional net, # # computing the class scores for X and storing them in the scores # # variable. # # # # Remember you can use the functions defined in cs231n/fast_layers.py and # # cs231n/layer_utils.py in your implementation (already imported). # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** out1, cache1 = conv_relu_pool_forward(X, W1, b1, conv_param, pool_param) out2, cache2 = affine_relu_forward(out1, W2, b2) scores, cache3 = affine_forward(out2, W3, b3) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ if y is None: return scores loss, grads = 0, {} ############################################################################ # TODO: Implement the backward pass for the three-layer convolutional net, # # storing the loss and gradients in the loss and grads variables. Compute # # data loss using softmax, and make sure that grads[k] holds the gradients # # for self.params[k]. Don't forget to add L2 regularization! # # # # NOTE: To ensure that your implementation matches ours and you pass the # # automated tests, make sure that your L2 regularization includes a factor # # of 0.5 to simplify the expression for the gradient. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** loss ,dout = softmax_loss(scores, y) loss += self.reg * np.sum(np.square(W1)) loss += self.reg * np.sum(np.square(W2)) loss += self.reg * np.sum(np.square(W3)) dout2, dW3, db3 = affine_backward(dout, cache3) dout3, dW2, db2 = affine_relu_backward(dout2, cache2) _, dW1, db1 = conv_relu_pool_backward(dout3, cache1) dW1 += 2 * self.reg * W1 dW2 += 2 * self.reg * W2 dW3 += 2 * self.reg * W3 grads['W1'] = dW1 grads['b1'] = db1 grads['W2'] = dW2 grads['b2'] = db2 grads['W3'] = dW3 grads['b3'] = db3 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ return loss, grads ================================================ FILE: assignment2/cs231n/classifiers/fc_net.py ================================================ from builtins import range from builtins import object import numpy as np from cs231n.layers import * from cs231n.layer_utils import * class TwoLayerNet(object): """ A two-layer fully-connected neural network with ReLU nonlinearity and softmax loss that uses a modular layer design. We assume an input dimension of D, a hidden dimension of H, and perform classification over C classes. The architecure should be affine - relu - affine - softmax. Note that this class does not implement gradient descent; instead, it will interact with a separate Solver object that is responsible for running optimization. The learnable parameters of the model are stored in the dictionary self.params that maps parameter names to numpy arrays. """ def __init__(self, input_dim=3*32*32, hidden_dim=100, num_classes=10, weight_scale=1e-3, reg=0.0): """ Initialize a new network. Inputs: - input_dim: An integer giving the size of the input - hidden_dim: An integer giving the size of the hidden layer - num_classes: An integer giving the number of classes to classify - weight_scale: Scalar giving the standard deviation for random initialization of the weights. - reg: Scalar giving L2 regularization strength. """ self.params = {} self.reg = reg ############################################################################ # TODO: Initialize the weights and biases of the two-layer net. Weights # # should be initialized from a Gaussian centered at 0.0 with # # standard deviation equal to weight_scale, and biases should be # # initialized to zero. All weights and biases should be stored in the # # dictionary self.params, with first layer weights # # and biases using the keys 'W1' and 'b1' and second layer # # weights and biases using the keys 'W2' and 'b2'. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** W1 = weight_scale*np.random.randn(input_dim,hidden_dim) W2 = weight_scale*np.random.randn(hidden_dim,num_classes) b1 = np.zeros((hidden_dim,)) b2 = np.zeros((num_classes,)) self.params['W1'] = W1 self.params['W2'] = W2 self.params['b1'] = b1 self.params['b2'] = b2 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ def loss(self, X, y=None): """ Compute loss and gradient for a minibatch of data. Inputs: - X: Array of input data of shape (N, d_1, ..., d_k) - y: Array of labels, of shape (N,). y[i] gives the label for X[i]. Returns: If y is None, then run a test-time forward pass of the model and return: - scores: Array of shape (N, C) giving classification scores, where scores[i, c] is the classification score for X[i] and class c. If y is not None, then run a training-time forward and backward pass and return a tuple of: - loss: Scalar value giving the loss - grads: Dictionary with the same keys as self.params, mapping parameter names to gradients of the loss with respect to those parameters. """ scores = None ############################################################################ # TODO: Implement the forward pass for the two-layer net, computing the # # class scores for X and storing them in the scores variable. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** W1 = self.params['W1'] W2 = self.params['W2'] b1 = self.params['b1'] b2 = self.params['b2'] out1, cache1 = affine_relu_forward(X, W1, b1) scores, cache2 = affine_forward(out1, W2, b2) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ # If y is None then we are in test mode so just return scores if y is None: return scores loss, grads = 0, {} ############################################################################ # TODO: Implement the backward pass for the two-layer net. Store the loss # # in the loss variable and gradients in the grads dictionary. Compute data # # loss using softmax, and make sure that grads[k] holds the gradients for # # self.params[k]. Don't forget to add L2 regularization! # # # # NOTE: To ensure that your implementation matches ours and you pass the # # automated tests, make sure that your L2 regularization includes a factor # # of 0.5 to simplify the expression for the gradient. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** loss, dx = softmax_loss(scores, y) loss += 0.5*self.reg*np.sum(np.square(W1)) loss += 0.5*self.reg*np.sum(np.square(W2)) dout1, dw2, db2 = affine_backward(dx, cache2) dX, dw1, db1 = affine_relu_backward(dout1, cache1) dw1 += self.reg*W1 dw2 += self.reg*W2 grads['W1'] = dw1 grads['W2'] = dw2 grads['b1'] = db1 grads['b2'] = db2 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ return loss, grads class FullyConnectedNet(object): """ A fully-connected neural network with an arbitrary number of hidden layers, ReLU nonlinearities, and a softmax loss function. This will also implement dropout and batch/layer normalization as options. For a network with L layers, the architecture will be {affine - [batch/layer norm] - relu - [dropout]} x (L - 1) - affine - softmax where batch/layer normalization and dropout are optional, and the {...} block is repeated L - 1 times. Similar to the TwoLayerNet above, learnable parameters are stored in the self.params dictionary and will be learned using the Solver class. """ def __init__(self, hidden_dims, input_dim=3*32*32, num_classes=10, dropout=1, normalization=None, reg=0.0, weight_scale=1e-2, dtype=np.float32, seed=None): """ Initialize a new FullyConnectedNet. Inputs: - hidden_dims: A list of integers giving the size of each hidden layer. - input_dim: An integer giving the size of the input. - num_classes: An integer giving the number of classes to classify. - dropout: Scalar between 0 and 1 giving dropout strength. If dropout=1 then the network should not use dropout at all. - normalization: What type of normalization the network should use. Valid values are "batchnorm", "layernorm", or None for no normalization (the default). - reg: Scalar giving L2 regularization strength. - weight_scale: Scalar giving the standard deviation for random initialization of the weights. - dtype: A numpy datatype object; all computations will be performed using this datatype. float32 is faster but less accurate, so you should use float64 for numeric gradient checking. - seed: If not None, then pass this random seed to the dropout layers. This will make the dropout layers deteriminstic so we can gradient check the model. """ self.normalization = normalization self.use_dropout = dropout != 1 self.reg = reg self.num_layers = 1 + len(hidden_dims) self.dtype = dtype self.params = {} ############################################################################ # TODO: Initialize the parameters of the network, storing all values in # # the self.params dictionary. Store weights and biases for the first layer # # in W1 and b1; for the second layer use W2 and b2, etc. Weights should be # # initialized from a normal distribution centered at 0 with standard # # deviation equal to weight_scale. Biases should be initialized to zero. # # # # When using batch normalization, store scale and shift parameters for the # # first layer in gamma1 and beta1; for the second layer use gamma2 and # # beta2, etc. Scale parameters should be initialized to ones and shift # # parameters should be initialized to zeros. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** self.params['W1'] = weight_scale*np.random.randn(input_dim,hidden_dims[0]) self.params['b1'] = np.zeros((hidden_dims[0],)) if self.normalization: self.params['gamma1'] = np.ones((hidden_dims[0],)) self.params['beta1'] = np.zeros((hidden_dims[0],)) for i in range(self.num_layers-2): self.params['W' + str(i+2)] = weight_scale*np.random.randn(hidden_dims[i],hidden_dims[i+1]) self.params['b' + str(i+2)] = np.zeros((hidden_dims[i+1],)) if self.normalization: self.params['gamma'+ str(i+2)] = np.ones((hidden_dims[i+1],)) self.params['beta'+ str(i+2)] = np.zeros((hidden_dims[i+1],)) self.params['W' + str(self.num_layers)] = weight_scale*np.random.randn(hidden_dims[-1],num_classes) self.params['b' + str(self.num_layers)] = np.zeros((num_classes,)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ # When using dropout we need to pass a dropout_param dictionary to each # dropout layer so that the layer knows the dropout probability and the mode # (train / test). You can pass the same dropout_param to each dropout layer. self.dropout_param = {} if self.use_dropout: self.dropout_param = {'mode': 'train', 'p': dropout} if seed is not None: self.dropout_param['seed'] = seed # With batch normalization we need to keep track of running means and # variances, so we need to pass a special bn_param object to each batch # normalization layer. You should pass self.bn_params[0] to the forward pass # of the first batch normalization layer, self.bn_params[1] to the forward # pass of the second batch normalization layer, etc. self.bn_params = [] if self.normalization=='batchnorm': self.bn_params = [{'mode': 'train'} for i in range(self.num_layers - 1)] if self.normalization=='layernorm': self.bn_params = [{} for i in range(self.num_layers - 1)] # Cast all parameters to the correct datatype for k, v in self.params.items(): self.params[k] = v.astype(dtype) def loss(self, X, y=None): """ Compute loss and gradient for the fully-connected net. Input / output: Same as TwoLayerNet above. """ X = X.astype(self.dtype) mode = 'test' if y is None else 'train' # Set train/test mode for batchnorm params and dropout param since they # behave differently during training and testing. if self.use_dropout: self.dropout_param['mode'] = mode if self.normalization=='batchnorm': for bn_param in self.bn_params: bn_param['mode'] = mode scores = None ############################################################################ # TODO: Implement the forward pass for the fully-connected net, computing # # the class scores for X and storing them in the scores variable. # # # # When using dropout, you'll need to pass self.dropout_param to each # # dropout forward pass. # # # # When using batch normalization, you'll need to pass self.bn_params[0] to # # the forward pass for the first batch normalization layer, pass # # self.bn_params[1] to the forward pass for the second batch normalization # # layer, etc. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** outs = {'out0' : X} caches = {} for i in range(self.num_layers-1): a, fc_cache = affine_forward(outs['out' + str(i)], self.params['W' + str(i+1)], self.params['b' + str(i+1)]) bn_cache = {} do_cache = {} if self.normalization=='batchnorm': a, bn_cache = batchnorm_forward(a, self.params['gamma' + str(i+1)], self.params['beta' + str(i+1)], self.bn_params[i]) elif self.normalization=='layernorm': a, bn_cache = layernorm_forward(a, self.params['gamma' + str(i+1)], self.params['beta' + str(i+1)], self.bn_params[i]) out, relu_cache = relu_forward(a) if self.use_dropout: out, do_cache = dropout_forward(out, self.dropout_param) cache = [fc_cache, relu_cache, bn_cache, do_cache] outs['out' + str(i+1)] = out caches['cache' + str(i+1)] = cache scores, fc_cache = affine_forward(outs['out' + str(self.num_layers-1)], self.params['W' + str(self.num_layers)], self.params['b' + str(self.num_layers)]) caches['cache' + str(self.num_layers)] = [fc_cache] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ # If test mode return early if mode == 'test': return scores loss, grads = 0.0, {} ############################################################################ # TODO: Implement the backward pass for the fully-connected net. Store the # # loss in the loss variable and gradients in the grads dictionary. Compute # # data loss using softmax, and make sure that grads[k] holds the gradients # # for self.params[k]. Don't forget to add L2 regularization! # # # # When using batch/layer normalization, you don't need to regularize the scale # # and shift parameters. # # # # NOTE: To ensure that your implementation matches ours and you pass the # # automated tests, make sure that your L2 regularization includes a factor # # of 0.5 to simplify the expression for the gradient. # ############################################################################ # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** loss ,dx = softmax_loss(scores, y) for i in range(self.num_layers): loss += 0.5*self.reg*np.sum(np.square(self.params['W' + str(i+1)])) douts = {} douts['dout' + str(self.num_layers-1)], grads['W' + str(self.num_layers)], grads['b'+ str(self.num_layers)] = affine_backward(dx, caches['cache' + str(self.num_layers)][0]) for i in range(self.num_layers-1,0,-1): if self.use_dropout: dx1 = dropout_backward(douts['dout' + str(i)], caches['cache' + str(i)][3]) else: dx1 = douts['dout' + str(i)] dx1 = relu_backward(dx1, caches['cache' + str(i)][1]) if self.normalization == 'batchnorm': dx1 ,grads['gamma' + str(i)] ,grads['beta' + str(i)] = batchnorm_backward_alt(dx1, caches['cache' + str(i)][2]) elif self.normalization == 'layernorm': dx1 ,grads['gamma' + str(i)] ,grads['beta' + str(i)] = layernorm_backward(dx1, caches['cache' + str(i)][2]) douts['dout' + str(i-1)], grads['W' + str(i)] ,grads['b' + str(i)] = affine_backward(dx1, caches['cache' + str(i)][0]) for i in range(self.num_layers): grads['W' + str(i+1)] += self.reg*self.params['W' + str(i+1)] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ############################################################################ # END OF YOUR CODE # ############################################################################ return loss, grads ================================================ FILE: assignment2/cs231n/data_utils.py ================================================ from __future__ import print_function from builtins import range from six.moves import cPickle as pickle import numpy as np import os from imageio import imread import platform def load_pickle(f): version = platform.python_version_tuple() if version[0] == '2': return pickle.load(f) elif version[0] == '3': return pickle.load(f, encoding='latin1') raise ValueError("invalid python version: {}".format(version)) def load_CIFAR_batch(filename): """ load single batch of cifar """ with open(filename, 'rb') as f: datadict = load_pickle(f) X = datadict['data'] Y = datadict['labels'] X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("float") Y = np.array(Y) return X, Y def load_CIFAR10(ROOT): """ load all of cifar """ xs = [] ys = [] for b in range(1,6): f = os.path.join(ROOT, 'data_batch_%d' % (b, )) X, Y = load_CIFAR_batch(f) xs.append(X) ys.append(Y) Xtr = np.concatenate(xs) Ytr = np.concatenate(ys) del X, Y Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch')) return Xtr, Ytr, Xte, Yte def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000, subtract_mean=True): """ Load the CIFAR-10 dataset from disk and perform preprocessing to prepare it for classifiers. These are the same steps as we used for the SVM, but condensed to a single function. """ # Load the raw CIFAR-10 data cifar10_dir = 'cs231n/datasets/cifar-10-batches-py' X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir) # Subsample the data mask = list(range(num_training, num_training + num_validation)) X_val = X_train[mask] y_val = y_train[mask] mask = list(range(num_training)) X_train = X_train[mask] y_train = y_train[mask] mask = list(range(num_test)) X_test = X_test[mask] y_test = y_test[mask] # Normalize the data: subtract the mean image if subtract_mean: mean_image = np.mean(X_train, axis=0) X_train -= mean_image X_val -= mean_image X_test -= mean_image # Transpose so that channels come first X_train = X_train.transpose(0, 3, 1, 2).copy() X_val = X_val.transpose(0, 3, 1, 2).copy() X_test = X_test.transpose(0, 3, 1, 2).copy() # Package data into a dictionary return { 'X_train': X_train, 'y_train': y_train, 'X_val': X_val, 'y_val': y_val, 'X_test': X_test, 'y_test': y_test, } def load_tiny_imagenet(path, dtype=np.float32, subtract_mean=True): """ Load TinyImageNet. Each of TinyImageNet-100-A, TinyImageNet-100-B, and TinyImageNet-200 have the same directory structure, so this can be used to load any of them. Inputs: - path: String giving path to the directory to load. - dtype: numpy datatype used to load the data. - subtract_mean: Whether to subtract the mean training image. Returns: A dictionary with the following entries: - class_names: A list where class_names[i] is a list of strings giving the WordNet names for class i in the loaded dataset. - X_train: (N_tr, 3, 64, 64) array of training images - y_train: (N_tr,) array of training labels - X_val: (N_val, 3, 64, 64) array of validation images - y_val: (N_val,) array of validation labels - X_test: (N_test, 3, 64, 64) array of testing images. - y_test: (N_test,) array of test labels; if test labels are not available (such as in student code) then y_test will be None. - mean_image: (3, 64, 64) array giving mean training image """ # First load wnids with open(os.path.join(path, 'wnids.txt'), 'r') as f: wnids = [x.strip() for x in f] # Map wnids to integer labels wnid_to_label = {wnid: i for i, wnid in enumerate(wnids)} # Use words.txt to get names for each class with open(os.path.join(path, 'words.txt'), 'r') as f: wnid_to_words = dict(line.split('\t') for line in f) for wnid, words in wnid_to_words.items(): wnid_to_words[wnid] = [w.strip() for w in words.split(',')] class_names = [wnid_to_words[wnid] for wnid in wnids] # Next load training data. X_train = [] y_train = [] for i, wnid in enumerate(wnids): if (i + 1) % 20 == 0: print('loading training data for synset %d / %d' % (i + 1, len(wnids))) # To figure out the filenames we need to open the boxes file boxes_file = os.path.join(path, 'train', wnid, '%s_boxes.txt' % wnid) with open(boxes_file, 'r') as f: filenames = [x.split('\t')[0] for x in f] num_images = len(filenames) X_train_block = np.zeros((num_images, 3, 64, 64), dtype=dtype) y_train_block = wnid_to_label[wnid] * \ np.ones(num_images, dtype=np.int64) for j, img_file in enumerate(filenames): img_file = os.path.join(path, 'train', wnid, 'images', img_file) img = imread(img_file) if img.ndim == 2: ## grayscale file img.shape = (64, 64, 1) X_train_block[j] = img.transpose(2, 0, 1) X_train.append(X_train_block) y_train.append(y_train_block) # We need to concatenate all training data X_train = np.concatenate(X_train, axis=0) y_train = np.concatenate(y_train, axis=0) # Next load validation data with open(os.path.join(path, 'val', 'val_annotations.txt'), 'r') as f: img_files = [] val_wnids = [] for line in f: img_file, wnid = line.split('\t')[:2] img_files.append(img_file) val_wnids.append(wnid) num_val = len(img_files) y_val = np.array([wnid_to_label[wnid] for wnid in val_wnids]) X_val = np.zeros((num_val, 3, 64, 64), dtype=dtype) for i, img_file in enumerate(img_files): img_file = os.path.join(path, 'val', 'images', img_file) img = imread(img_file) if img.ndim == 2: img.shape = (64, 64, 1) X_val[i] = img.transpose(2, 0, 1) # Next load test images # Students won't have test labels, so we need to iterate over files in the # images directory. img_files = os.listdir(os.path.join(path, 'test', 'images')) X_test = np.zeros((len(img_files), 3, 64, 64), dtype=dtype) for i, img_file in enumerate(img_files): img_file = os.path.join(path, 'test', 'images', img_file) img = imread(img_file) if img.ndim == 2: img.shape = (64, 64, 1) X_test[i] = img.transpose(2, 0, 1) y_test = None y_test_file = os.path.join(path, 'test', 'test_annotations.txt') if os.path.isfile(y_test_file): with open(y_test_file, 'r') as f: img_file_to_wnid = {} for line in f: line = line.split('\t') img_file_to_wnid[line[0]] = line[1] y_test = [wnid_to_label[img_file_to_wnid[img_file]] for img_file in img_files] y_test = np.array(y_test) mean_image = X_train.mean(axis=0) if subtract_mean: X_train -= mean_image[None] X_val -= mean_image[None] X_test -= mean_image[None] return { 'class_names': class_names, 'X_train': X_train, 'y_train': y_train, 'X_val': X_val, 'y_val': y_val, 'X_test': X_test, 'y_test': y_test, 'class_names': class_names, 'mean_image': mean_image, } def load_models(models_dir): """ Load saved models from disk. This will attempt to unpickle all files in a directory; any files that give errors on unpickling (such as README.txt) will be skipped. Inputs: - models_dir: String giving the path to a directory containing model files. Each model file is a pickled dictionary with a 'model' field. Returns: A dictionary mapping model file names to models. """ models = {} for model_file in os.listdir(models_dir): with open(os.path.join(models_dir, model_file), 'rb') as f: try: models[model_file] = load_pickle(f)['model'] except pickle.UnpicklingError: continue return models def load_imagenet_val(num=None): """Load a handful of validation images from ImageNet. Inputs: - num: Number of images to load (max of 25) Returns: - X: numpy array with shape [num, 224, 224, 3] - y: numpy array of integer image labels, shape [num] - class_names: dict mapping integer label to class name """ imagenet_fn = 'cs231n/datasets/imagenet_val_25.npz' if not os.path.isfile(imagenet_fn): print('file %s not found' % imagenet_fn) print('Run the following:') print('cd cs231n/datasets') print('bash get_imagenet_val.sh') assert False, 'Need to download imagenet_val_25.npz' f = np.load(imagenet_fn) X = f['X'] y = f['y'] class_names = f['label_map'].item() if num is not None: X = X[:num] y = y[:num] return X, y, class_names ================================================ FILE: assignment2/cs231n/datasets/get_datasets.sh ================================================ # Get CIFAR10 wget http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz tar -xzvf cifar-10-python.tar.gz rm cifar-10-python.tar.gz ================================================ FILE: assignment2/cs231n/fast_layers.py ================================================ from __future__ import print_function import numpy as np import torch import torch.nn as nn try: from cs231n.im2col_cython import col2im_cython, im2col_cython from cs231n.im2col_cython import col2im_6d_cython except ImportError: print('run the following from the cs231n directory and try again:') print('python setup.py build_ext --inplace') print('You may also need to restart your iPython kernel') from cs231n.im2col import * def conv_forward_im2col(x, w, b, conv_param): """ A fast implementation of the forward pass for a convolutional layer based on im2col and col2im. """ N, C, H, W = x.shape num_filters, _, filter_height, filter_width = w.shape stride, pad = conv_param['stride'], conv_param['pad'] # Check dimensions assert (W + 2 * pad - filter_width) % stride == 0, 'width does not work' assert (H + 2 * pad - filter_height) % stride == 0, 'height does not work' # Create output out_height = (H + 2 * pad - filter_height) // stride + 1 out_width = (W + 2 * pad - filter_width) // stride + 1 out = np.zeros((N, num_filters, out_height, out_width), dtype=x.dtype) # x_cols = im2col_indices(x, w.shape[2], w.shape[3], pad, stride) x_cols = im2col_cython(x, w.shape[2], w.shape[3], pad, stride) res = w.reshape((w.shape[0], -1)).dot(x_cols) + b.reshape(-1, 1) out = res.reshape(w.shape[0], out.shape[2], out.shape[3], x.shape[0]) out = out.transpose(3, 0, 1, 2) cache = (x, w, b, conv_param, x_cols) return out, cache def conv_forward_pytorch(x, w, b, conv_param): N, C, H, W = x.shape F, _, HH, WW = w.shape stride, pad = conv_param['stride'], conv_param['pad'] layer = nn.Conv2d(C, F, (HH, WW), stride=stride, padding=pad) layer.weight = nn.Parameter(torch.tensor(w)) layer.bias = nn.Parameter(torch.tensor(b)) tx = torch.tensor(x, requires_grad=True) out = layer(tx) cache = (x, w, b, conv_param, tx, out, layer) return out, cache def conv_backward_pytorch(dout, cache): x, _, _, _, tx, out, layer = cache out.backward(torch.tensor(dout)) dx = tx.grad.detach().numpy() dw = layer.weight.grad.detach().numpy() db = layer.bias.grad.detach().numpy() return dx, dw, db def conv_forward_strides(x, w, b, conv_param): N, C, H, W = x.shape F, _, HH, WW = w.shape stride, pad = conv_param['stride'], conv_param['pad'] # Check dimensions #assert (W + 2 * pad - WW) % stride == 0, 'width does not work' #assert (H + 2 * pad - HH) % stride == 0, 'height does not work' # Pad the input p = pad x_padded = np.pad(x, ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') # Figure out output dimensions H += 2 * pad W += 2 * pad out_h = (H - HH) // stride + 1 out_w = (W - WW) // stride + 1 # Perform an im2col operation by picking clever strides shape = (C, HH, WW, N, out_h, out_w) strides = (H * W, W, 1, C * H * W, stride * W, stride) strides = x.itemsize * np.array(strides) x_stride = np.lib.stride_tricks.as_strided(x_padded, shape=shape, strides=strides) x_cols = np.ascontiguousarray(x_stride) x_cols.shape = (C * HH * WW, N * out_h * out_w) # Now all our convolutions are a big matrix multiply res = w.reshape(F, -1).dot(x_cols) + b.reshape(-1, 1) # Reshape the output res.shape = (F, N, out_h, out_w) out = res.transpose(1, 0, 2, 3) # Be nice and return a contiguous array # The old version of conv_forward_fast doesn't do this, so for a fair # comparison we won't either out = np.ascontiguousarray(out) cache = (x, w, b, conv_param, x_cols) return out, cache def conv_backward_strides(dout, cache): x, w, b, conv_param, x_cols = cache stride, pad = conv_param['stride'], conv_param['pad'] N, C, H, W = x.shape F, _, HH, WW = w.shape _, _, out_h, out_w = dout.shape db = np.sum(dout, axis=(0, 2, 3)) dout_reshaped = dout.transpose(1, 0, 2, 3).reshape(F, -1) dw = dout_reshaped.dot(x_cols.T).reshape(w.shape) dx_cols = w.reshape(F, -1).T.dot(dout_reshaped) dx_cols.shape = (C, HH, WW, N, out_h, out_w) dx = col2im_6d_cython(dx_cols, N, C, H, W, HH, WW, pad, stride) return dx, dw, db def conv_backward_im2col(dout, cache): """ A fast implementation of the backward pass for a convolutional layer based on im2col and col2im. """ x, w, b, conv_param, x_cols = cache stride, pad = conv_param['stride'], conv_param['pad'] db = np.sum(dout, axis=(0, 2, 3)) num_filters, _, filter_height, filter_width = w.shape dout_reshaped = dout.transpose(1, 2, 3, 0).reshape(num_filters, -1) dw = dout_reshaped.dot(x_cols.T).reshape(w.shape) dx_cols = w.reshape(num_filters, -1).T.dot(dout_reshaped) # dx = col2im_indices(dx_cols, x.shape, filter_height, filter_width, pad, stride) dx = col2im_cython(dx_cols, x.shape[0], x.shape[1], x.shape[2], x.shape[3], filter_height, filter_width, pad, stride) return dx, dw, db conv_forward_fast = conv_forward_strides conv_backward_fast = conv_backward_strides def max_pool_forward_fast(x, pool_param): """ A fast implementation of the forward pass for a max pooling layer. This chooses between the reshape method and the im2col method. If the pooling regions are square and tile the input image, then we can use the reshape method which is very fast. Otherwise we fall back on the im2col method, which is not much faster than the naive method. """ N, C, H, W = x.shape pool_height, pool_width = pool_param['pool_height'], pool_param['pool_width'] stride = pool_param['stride'] same_size = pool_height == pool_width == stride tiles = H % pool_height == 0 and W % pool_width == 0 if same_size and tiles: out, reshape_cache = max_pool_forward_reshape(x, pool_param) cache = ('reshape', reshape_cache) else: out, im2col_cache = max_pool_forward_im2col(x, pool_param) cache = ('im2col', im2col_cache) return out, cache def max_pool_backward_fast(dout, cache): """ A fast implementation of the backward pass for a max pooling layer. This switches between the reshape method an the im2col method depending on which method was used to generate the cache. """ method, real_cache = cache if method == 'reshape': return max_pool_backward_reshape(dout, real_cache) elif method == 'im2col': return max_pool_backward_im2col(dout, real_cache) else: raise ValueError('Unrecognized method "%s"' % method) def max_pool_forward_reshape(x, pool_param): """ A fast implementation of the forward pass for the max pooling layer that uses some clever reshaping. This can only be used for square pooling regions that tile the input. """ N, C, H, W = x.shape pool_height, pool_width = pool_param['pool_height'], pool_param['pool_width'] stride = pool_param['stride'] assert pool_height == pool_width == stride, 'Invalid pool params' assert H % pool_height == 0 assert W % pool_height == 0 x_reshaped = x.reshape(N, C, H // pool_height, pool_height, W // pool_width, pool_width) out = x_reshaped.max(axis=3).max(axis=4) cache = (x, x_reshaped, out) return out, cache def max_pool_backward_reshape(dout, cache): """ A fast implementation of the backward pass for the max pooling layer that uses some clever broadcasting and reshaping. This can only be used if the forward pass was computed using max_pool_forward_reshape. NOTE: If there are multiple argmaxes, this method will assign gradient to ALL argmax elements of the input rather than picking one. In this case the gradient will actually be incorrect. However this is unlikely to occur in practice, so it shouldn't matter much. One possible solution is to split the upstream gradient equally among all argmax elements; this should result in a valid subgradient. You can make this happen by uncommenting the line below; however this results in a significant performance penalty (about 40% slower) and is unlikely to matter in practice so we don't do it. """ x, x_reshaped, out = cache dx_reshaped = np.zeros_like(x_reshaped) out_newaxis = out[:, :, :, np.newaxis, :, np.newaxis] mask = (x_reshaped == out_newaxis) dout_newaxis = dout[:, :, :, np.newaxis, :, np.newaxis] dout_broadcast, _ = np.broadcast_arrays(dout_newaxis, dx_reshaped) dx_reshaped[mask] = dout_broadcast[mask] dx_reshaped /= np.sum(mask, axis=(3, 5), keepdims=True) dx = dx_reshaped.reshape(x.shape) return dx def max_pool_forward_im2col(x, pool_param): """ An implementation of the forward pass for max pooling based on im2col. This isn't much faster than the naive version, so it should be avoided if possible. """ N, C, H, W = x.shape pool_height, pool_width = pool_param['pool_height'], pool_param['pool_width'] stride = pool_param['stride'] assert (H - pool_height) % stride == 0, 'Invalid height' assert (W - pool_width) % stride == 0, 'Invalid width' out_height = (H - pool_height) // stride + 1 out_width = (W - pool_width) // stride + 1 x_split = x.reshape(N * C, 1, H, W) x_cols = im2col(x_split, pool_height, pool_width, padding=0, stride=stride) x_cols_argmax = np.argmax(x_cols, axis=0) x_cols_max = x_cols[x_cols_argmax, np.arange(x_cols.shape[1])] out = x_cols_max.reshape(out_height, out_width, N, C).transpose(2, 3, 0, 1) cache = (x, x_cols, x_cols_argmax, pool_param) return out, cache def max_pool_backward_im2col(dout, cache): """ An implementation of the backward pass for max pooling based on im2col. This isn't much faster than the naive version, so it should be avoided if possible. """ x, x_cols, x_cols_argmax, pool_param = cache N, C, H, W = x.shape pool_height, pool_width = pool_param['pool_height'], pool_param['pool_width'] stride = pool_param['stride'] dout_reshaped = dout.transpose(2, 3, 0, 1).flatten() dx_cols = np.zeros_like(x_cols) dx_cols[x_cols_argmax, np.arange(dx_cols.shape[1])] = dout_reshaped dx = col2im_indices(dx_cols, (N * C, 1, H, W), pool_height, pool_width, padding=0, stride=stride) dx = dx.reshape(x.shape) return dx ================================================ FILE: assignment2/cs231n/gradient_check.py ================================================ from __future__ import print_function from builtins import range from past.builtins import xrange import numpy as np from random import randrange def eval_numerical_gradient(f, x, verbose=True, h=0.00001): """ a naive implementation of numerical gradient of f at x - f should be a function that takes a single argument - x is the point (numpy array) to evaluate the gradient at """ fx = f(x) # evaluate function value at original point grad = np.zeros_like(x) # iterate over all indexes in x it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite']) while not it.finished: # evaluate function at x+h ix = it.multi_index oldval = x[ix] x[ix] = oldval + h # increment by h fxph = f(x) # evalute f(x + h) x[ix] = oldval - h fxmh = f(x) # evaluate f(x - h) x[ix] = oldval # restore # compute the partial derivative with centered formula grad[ix] = (fxph - fxmh) / (2 * h) # the slope if verbose: print(ix, grad[ix]) it.iternext() # step to next dimension return grad def eval_numerical_gradient_array(f, x, df, h=1e-5): """ Evaluate a numeric gradient for a function that accepts a numpy array and returns a numpy array. """ grad = np.zeros_like(x) it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite']) while not it.finished: ix = it.multi_index oldval = x[ix] x[ix] = oldval + h pos = f(x).copy() x[ix] = oldval - h neg = f(x).copy() x[ix] = oldval grad[ix] = np.sum((pos - neg) * df) / (2 * h) it.iternext() return grad def eval_numerical_gradient_blobs(f, inputs, output, h=1e-5): """ Compute numeric gradients for a function that operates on input and output blobs. We assume that f accepts several input blobs as arguments, followed by a blob where outputs will be written. For example, f might be called like: f(x, w, out) where x and w are input Blobs, and the result of f will be written to out. Inputs: - f: function - inputs: tuple of input blobs - output: output blob - h: step size """ numeric_diffs = [] for input_blob in inputs: diff = np.zeros_like(input_blob.diffs) it = np.nditer(input_blob.vals, flags=['multi_index'], op_flags=['readwrite']) while not it.finished: idx = it.multi_index orig = input_blob.vals[idx] input_blob.vals[idx] = orig + h f(*(inputs + (output,))) pos = np.copy(output.vals) input_blob.vals[idx] = orig - h f(*(inputs + (output,))) neg = np.copy(output.vals) input_blob.vals[idx] = orig diff[idx] = np.sum((pos - neg) * output.diffs) / (2.0 * h) it.iternext() numeric_diffs.append(diff) return numeric_diffs def eval_numerical_gradient_net(net, inputs, output, h=1e-5): return eval_numerical_gradient_blobs(lambda *args: net.forward(), inputs, output, h=h) def grad_check_sparse(f, x, analytic_grad, num_checks=10, h=1e-5): """ sample a few random elements and only return numerical in this dimensions. """ for i in range(num_checks): ix = tuple([randrange(m) for m in x.shape]) oldval = x[ix] x[ix] = oldval + h # increment by h fxph = f(x) # evaluate f(x + h) x[ix] = oldval - h # increment by h fxmh = f(x) # evaluate f(x - h) x[ix] = oldval # reset grad_numerical = (fxph - fxmh) / (2 * h) grad_analytic = analytic_grad[ix] rel_error = (abs(grad_numerical - grad_analytic) / (abs(grad_numerical) + abs(grad_analytic))) print('numerical: %f analytic: %f, relative error: %e' %(grad_numerical, grad_analytic, rel_error)) ================================================ FILE: assignment2/cs231n/im2col.py ================================================ from builtins import range import numpy as np def get_im2col_indices(x_shape, field_height, field_width, padding=1, stride=1): # First figure out what the size of the output should be N, C, H, W = x_shape assert (H + 2 * padding - field_height) % stride == 0 assert (W + 2 * padding - field_height) % stride == 0 out_height = (H + 2 * padding - field_height) / stride + 1 out_width = (W + 2 * padding - field_width) / stride + 1 i0 = np.repeat(np.arange(field_height), field_width) i0 = np.tile(i0, C) i1 = stride * np.repeat(np.arange(out_height), out_width) j0 = np.tile(np.arange(field_width), field_height * C) j1 = stride * np.tile(np.arange(out_width), out_height) i = i0.reshape(-1, 1) + i1.reshape(1, -1) j = j0.reshape(-1, 1) + j1.reshape(1, -1) k = np.repeat(np.arange(C), field_height * field_width).reshape(-1, 1) return (k, i, j) def im2col_indices(x, field_height, field_width, padding=1, stride=1): """ An implementation of im2col based on some fancy indexing """ # Zero-pad the input p = padding x_padded = np.pad(x, ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') k, i, j = get_im2col_indices(x.shape, field_height, field_width, padding, stride) cols = x_padded[:, k, i, j] C = x.shape[1] cols = cols.transpose(1, 2, 0).reshape(field_height * field_width * C, -1) return cols def col2im_indices(cols, x_shape, field_height=3, field_width=3, padding=1, stride=1): """ An implementation of col2im based on fancy indexing and np.add.at """ N, C, H, W = x_shape H_padded, W_padded = H + 2 * padding, W + 2 * padding x_padded = np.zeros((N, C, H_padded, W_padded), dtype=cols.dtype) k, i, j = get_im2col_indices(x_shape, field_height, field_width, padding, stride) cols_reshaped = cols.reshape(C * field_height * field_width, -1, N) cols_reshaped = cols_reshaped.transpose(2, 0, 1) np.add.at(x_padded, (slice(None), k, i, j), cols_reshaped) if padding == 0: return x_padded return x_padded[:, :, padding:-padding, padding:-padding] ================================================ FILE: assignment2/cs231n/im2col_cython.c ================================================ /* Generated by Cython 0.29.2 */ /* BEGIN: Cython Metadata { "distutils": { "depends": [ "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\numpy\\core\\include\\numpy\\arrayobject.h", "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\numpy\\core\\include\\numpy\\ufuncobject.h" ], "include_dirs": [ "C:\\Users\\zhijiezheng\\Anaconda3\\lib\\site-packages\\numpy\\core\\include" ], "name": "im2col_cython", "sources": [ "im2col_cython.pyx" ] }, "module_name": "im2col_cython" } END: Cython Metadata */ #define PY_SSIZE_T_CLEAN #include "Python.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) #error Cython requires Python 2.6+ or Python 3.3+. #else #define CYTHON_ABI "0_29_2" #define CYTHON_HEX_VERSION 0x001D02F0 #define CYTHON_FUTURE_DIVISION 0 #include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif #if !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif #ifndef __cdecl #define __cdecl #endif #ifndef __fastcall #define __fastcall #endif #endif #ifndef DL_IMPORT #define DL_IMPORT(t) t #endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif #define __PYX_COMMA , #ifndef HAVE_LONG_LONG #if PY_VERSION_HEX >= 0x02070000 #define HAVE_LONG_LONG #endif #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif #ifdef PYPY_VERSION #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 0 #undef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 0 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #if PY_VERSION_HEX < 0x03050000 #undef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 0 #elif !defined(CYTHON_USE_ASYNC_SLOTS) #define CYTHON_USE_ASYNC_SLOTS 1 #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #undef CYTHON_USE_UNICODE_INTERNALS #define CYTHON_USE_UNICODE_INTERNALS 0 #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 #undef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 0 #undef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 1 #undef CYTHON_ASSUME_SAFE_MACROS #define CYTHON_ASSUME_SAFE_MACROS 0 #undef CYTHON_UNPACK_METHODS #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 #undef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 0 #undef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 0 #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #elif defined(PYSTON_VERSION) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_PYSTON 1 #define CYTHON_COMPILING_IN_CPYTHON 0 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #undef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 0 #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS #define CYTHON_USE_UNICODE_INTERNALS 1 #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 #undef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif #ifndef CYTHON_ASSUME_SAFE_MACROS #define CYTHON_ASSUME_SAFE_MACROS 1 #endif #ifndef CYTHON_UNPACK_METHODS #define CYTHON_UNPACK_METHODS 1 #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 #undef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 0 #undef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 0 #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 1 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif #if PY_VERSION_HEX < 0x02070000 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) #define CYTHON_USE_PYTYPE_LOOKUP 1 #endif #if PY_MAJOR_VERSION < 3 #undef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 0 #elif !defined(CYTHON_USE_ASYNC_SLOTS) #define CYTHON_USE_ASYNC_SLOTS 1 #endif #if PY_VERSION_HEX < 0x02070000 #undef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 0 #elif !defined(CYTHON_USE_PYLONG_INTERNALS) #define CYTHON_USE_PYLONG_INTERNALS 1 #endif #ifndef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 1 #endif #ifndef CYTHON_USE_UNICODE_INTERNALS #define CYTHON_USE_UNICODE_INTERNALS 1 #endif #if PY_VERSION_HEX < 0x030300F0 #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 #elif !defined(CYTHON_USE_UNICODE_WRITER) #define CYTHON_USE_UNICODE_WRITER 1 #endif #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif #ifndef CYTHON_ASSUME_SAFE_MACROS #define CYTHON_ASSUME_SAFE_MACROS 1 #endif #ifndef CYTHON_UNPACK_METHODS #define CYTHON_UNPACK_METHODS 1 #endif #ifndef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 1 #endif #ifndef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 1 #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) #endif #ifndef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) #endif #ifndef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) #endif #if CYTHON_USE_PYLONG_INTERNALS #include "longintrepr.h" #undef SHIFT #undef BASE #undef MASK #ifdef SIZEOF_VOID_P enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; #endif #endif #ifndef __has_attribute #define __has_attribute(x) 0 #endif #ifndef __has_cpp_attribute #define __has_cpp_attribute(x) 0 #endif #ifndef CYTHON_RESTRICT #if defined(__GNUC__) #define CYTHON_RESTRICT __restrict__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 #define CYTHON_RESTRICT __restrict #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_RESTRICT restrict #else #define CYTHON_RESTRICT #endif #endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) # define CYTHON_UNUSED __attribute__ ((__unused__)) # else # define CYTHON_UNUSED # endif #endif #ifndef CYTHON_MAYBE_UNUSED_VAR # if defined(__cplusplus) template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } # else # define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) # endif #endif #ifndef CYTHON_NCP_UNUSED # if CYTHON_COMPILING_IN_CPYTHON # define CYTHON_NCP_UNUSED # else # define CYTHON_NCP_UNUSED CYTHON_UNUSED # endif #endif #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) #ifdef _MSC_VER #ifndef _MSC_STDINT_H_ #if _MSC_VER < 1300 typedef unsigned char uint8_t; typedef unsigned int uint32_t; #else typedef unsigned __int8 uint8_t; typedef unsigned __int32 uint32_t; #endif #endif #else #include #endif #ifndef CYTHON_FALLTHROUGH #if defined(__cplusplus) && __cplusplus >= 201103L #if __has_cpp_attribute(fallthrough) #define CYTHON_FALLTHROUGH [[fallthrough]] #elif __has_cpp_attribute(clang::fallthrough) #define CYTHON_FALLTHROUGH [[clang::fallthrough]] #elif __has_cpp_attribute(gnu::fallthrough) #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] #endif #endif #ifndef CYTHON_FALLTHROUGH #if __has_attribute(fallthrough) #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) #else #define CYTHON_FALLTHROUGH #endif #endif #if defined(__clang__ ) && defined(__apple_build_version__) #if __apple_build_version__ < 7000000 #undef CYTHON_FALLTHROUGH #define CYTHON_FALLTHROUGH #endif #endif #endif #ifndef CYTHON_INLINE #if defined(__clang__) #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) #elif defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CYTHON_INLINE inline #else #define CYTHON_INLINE #endif #endif #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) #define Py_OptimizeFlag 0 #endif #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #define __Pyx_DefaultClassType PyClass_Type #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #define __Pyx_DefaultClassType PyType_Type #endif #ifndef Py_TPFLAGS_CHECKTYPES #define Py_TPFLAGS_CHECKTYPES 0 #endif #ifndef Py_TPFLAGS_HAVE_INDEX #define Py_TPFLAGS_HAVE_INDEX 0 #endif #ifndef Py_TPFLAGS_HAVE_NEWBUFFER #define Py_TPFLAGS_HAVE_NEWBUFFER 0 #endif #ifndef Py_TPFLAGS_HAVE_FINALIZE #define Py_TPFLAGS_HAVE_FINALIZE 0 #endif #ifndef METH_STACKLESS #define METH_STACKLESS 0 #endif #if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) #ifndef METH_FASTCALL #define METH_FASTCALL 0x80 #endif typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames); #else #define __Pyx_PyCFunctionFast _PyCFunctionFast #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords #endif #if CYTHON_FAST_PYCCALL #define __Pyx_PyFastCFunction_Check(func)\ ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) #else #define __Pyx_PyFastCFunction_Check(func) 0 #endif #if CYTHON_USE_DICT_VERSIONS #define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) #define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ (version_var) = __PYX_GET_DICT_VERSION(dict);\ (cache_var) = (value); #define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ static PY_UINT64_T __pyx_dict_version = 0;\ static PyObject *__pyx_dict_cached_value = NULL;\ if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ (VAR) = __pyx_dict_cached_value;\ } else {\ (VAR) = __pyx_dict_cached_value = (LOOKUP);\ __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ }\ } #else #define __PYX_GET_DICT_VERSION(dict) (0) #define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) #define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) #define PyObject_Malloc(s) PyMem_Malloc(s) #define PyObject_Free(p) PyMem_Free(p) #define PyObject_Realloc(p) PyMem_Realloc(p) #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 #define PyMem_RawMalloc(n) PyMem_Malloc(n) #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) #define PyMem_RawFree(p) PyMem_Free(p) #endif #if CYTHON_COMPILING_IN_PYSTON #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) #else #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) #endif #if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 #define __Pyx_PyThreadState_Current PyThreadState_GET() #elif PY_VERSION_HEX >= 0x03060000 #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() #elif PY_VERSION_HEX >= 0x03000000 #define __Pyx_PyThreadState_Current PyThreadState_GET() #else #define __Pyx_PyThreadState_Current _PyThreadState_Current #endif #if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) #include "pythread.h" #define Py_tss_NEEDS_INIT 0 typedef int Py_tss_t; static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { *key = PyThread_create_key(); return 0; // PyThread_create_key reports success always } static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); *key = Py_tss_NEEDS_INIT; return key; } static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { PyObject_Free(key); } static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { return *key != Py_tss_NEEDS_INIT; } static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { PyThread_delete_key(*key); *key = Py_tss_NEEDS_INIT; } static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { return PyThread_set_key_value(*key, value); } static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { return PyThread_get_key_value(*key); } #endif // TSS (Thread Specific Storage) API #if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) #define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) #else #define __Pyx_PyDict_NewPresized(n) PyDict_New() #endif #if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS #define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) #else #define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) #endif #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) #define CYTHON_PEP393_ENABLED 1 #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ 0 : _PyUnicode_Ready((PyObject *)(op))) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) #else #define CYTHON_PEP393_ENABLED 0 #define PyUnicode_1BYTE_KIND 1 #define PyUnicode_2BYTE_KIND 2 #define PyUnicode_4BYTE_KIND 4 #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) #endif #if CYTHON_COMPILING_IN_PYPY #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) #else #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) #endif #define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) #define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) #else #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) #endif #if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) #define PyObject_ASCII(o) PyObject_Repr(o) #endif #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact #define PyObject_Unicode PyObject_Str #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) #else #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) #endif #ifndef PySet_CheckExact #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) #endif #if CYTHON_ASSUME_SAFE_MACROS #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) #else #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) #endif #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong #define PyInt_FromSize_t PyLong_FromSize_t #define PyInt_FromSsize_t PyLong_FromSsize_t #define PyInt_AsLong PyLong_AsLong #define PyInt_AS_LONG PyLong_AS_LONG #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #define PyNumber_Int PyNumber_Long #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject #endif #if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY #ifndef PyUnicode_InternFromString #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) #endif #endif #if PY_VERSION_HEX < 0x030200A4 typedef long Py_hash_t; #define __Pyx_PyInt_FromHash_t PyInt_FromLong #define __Pyx_PyInt_AsHash_t PyInt_AsLong #else #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t #endif #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) #else #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) #endif #if CYTHON_USE_ASYNC_SLOTS #if PY_VERSION_HEX >= 0x030500B1 #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) #else #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) #endif #else #define __Pyx_PyType_AsAsync(obj) NULL #endif #ifndef __Pyx_PyAsyncMethodsStruct typedef struct { unaryfunc am_await; unaryfunc am_aiter; unaryfunc am_anext; } __Pyx_PyAsyncMethodsStruct; #endif #if defined(WIN32) || defined(MS_WINDOWS) #define _USE_MATH_DEFINES #endif #include #ifdef NAN #define __PYX_NAN() ((float) NAN) #else static CYTHON_INLINE float __PYX_NAN() { float value; memset(&value, 0xFF, sizeof(value)); return value; } #endif #if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) #define __Pyx_truncl trunc #else #define __Pyx_truncl truncl #endif #define __PYX_ERR(f_index, lineno, Ln_error) \ { \ __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ } #ifndef __PYX_EXTERN_C #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif #endif #define __PYX_HAVE__im2col_cython #define __PYX_HAVE_API__im2col_cython /* Early includes */ #include #include #include "numpy/arrayobject.h" #include "numpy/ufuncobject.h" #include "pythread.h" #include #include "pystate.h" #ifdef _OPENMP #include #endif /* _OPENMP */ #if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) #define CYTHON_WITHOUT_ASSERTIONS #endif typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 #define __PYX_DEFAULT_STRING_ENCODING "" #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #define __Pyx_uchar_cast(c) ((unsigned char)c) #define __Pyx_long_cast(x) ((long)x) #define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ (sizeof(type) < sizeof(Py_ssize_t)) ||\ (sizeof(type) > sizeof(Py_ssize_t) &&\ likely(v < (type)PY_SSIZE_T_MAX ||\ v == (type)PY_SSIZE_T_MAX) &&\ (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ v == (type)PY_SSIZE_T_MIN))) ||\ (sizeof(type) == sizeof(Py_ssize_t) &&\ (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ v == (type)PY_SSIZE_T_MAX))) ) static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { return (size_t) i < (size_t) limit; } #if defined (__cplusplus) && __cplusplus >= 201103L #include #define __Pyx_sst_abs(value) std::abs(value) #elif SIZEOF_INT >= SIZEOF_SIZE_T #define __Pyx_sst_abs(value) abs(value) #elif SIZEOF_LONG >= SIZEOF_SIZE_T #define __Pyx_sst_abs(value) labs(value) #elif defined (_MSC_VER) #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define __Pyx_sst_abs(value) llabs(value) #elif defined (__GNUC__) #define __Pyx_sst_abs(value) __builtin_llabs(value) #else #define __Pyx_sst_abs(value) ((value<0) ? -value : value) #endif static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); #define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #if PY_MAJOR_VERSION < 3 #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize #else #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize #endif #define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) #define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) #define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) #define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { const Py_UNICODE *u_end = u; while (*u_end++) ; return (size_t)(u_end - u - 1); } #define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) #define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); #define __Pyx_PySequence_Tuple(obj)\ (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); #if CYTHON_ASSUME_SAFE_MACROS #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) #else #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) #endif #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) #else #define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) #endif #define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params(void) { PyObject* sys; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; const char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (!sys) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); Py_DECREF(sys); if (!default_encoding) goto bad; default_encoding_c = PyBytes_AsString(default_encoding); if (!default_encoding_c) goto bad; if (strcmp(default_encoding_c, "ascii") == 0) { __Pyx_sys_getdefaultencoding_not_ascii = 0; } else { char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { ascii_chars[c] = c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); if (!ascii_chars_u) goto bad; ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { PyErr_Format( PyExc_ValueError, "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", default_encoding_c); goto bad; } Py_DECREF(ascii_chars_u); Py_DECREF(ascii_chars_b); } Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(default_encoding); Py_XDECREF(ascii_chars_u); Py_XDECREF(ascii_chars_b); return -1; } #endif #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params(void) { PyObject* sys; PyObject* default_encoding = NULL; char* default_encoding_c; sys = PyImport_ImportModule("sys"); if (!sys) goto bad; default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); Py_DECREF(sys); if (!default_encoding) goto bad; default_encoding_c = PyBytes_AsString(default_encoding); if (!default_encoding_c) goto bad; __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); Py_DECREF(default_encoding); return 0; bad: Py_XDECREF(default_encoding); return -1; } #endif #endif /* Test for GCC > 2.95 */ #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* !__GNUC__ or GCC < 2.95 */ #define likely(x) (x) #define unlikely(x) (x) #endif /* __GNUC__ */ static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } static PyObject *__pyx_m = NULL; static PyObject *__pyx_d; static PyObject *__pyx_b; static PyObject *__pyx_cython_runtime = NULL; static PyObject *__pyx_empty_tuple; static PyObject *__pyx_empty_bytes; static PyObject *__pyx_empty_unicode; static int __pyx_lineno; static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; /* Header.proto */ #if !defined(CYTHON_CCOMPLEX) #if defined(__cplusplus) #define CYTHON_CCOMPLEX 1 #elif defined(_Complex_I) #define CYTHON_CCOMPLEX 1 #else #define CYTHON_CCOMPLEX 0 #endif #endif #if CYTHON_CCOMPLEX #ifdef __cplusplus #include #else #include #endif #endif #if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) #undef _Complex_I #define _Complex_I 1.0fj #endif static const char *__pyx_f[] = { "im2col_cython.pyx", "__init__.pxd", "stringsource", "type.pxd", }; /* BufferFormatStructs.proto */ #define IS_UNSIGNED(type) (((type) -1) > 0) struct __Pyx_StructField_; #define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) typedef struct { const char* name; struct __Pyx_StructField_* fields; size_t size; size_t arraysize[8]; int ndim; char typegroup; char is_unsigned; int flags; } __Pyx_TypeInfo; typedef struct __Pyx_StructField_ { __Pyx_TypeInfo* type; const char* name; size_t offset; } __Pyx_StructField; typedef struct { __Pyx_StructField* field; size_t parent_offset; } __Pyx_BufFmt_StackElem; typedef struct { __Pyx_StructField root; __Pyx_BufFmt_StackElem* head; size_t fmt_offset; size_t new_count, enc_count; size_t struct_alignment; int is_complex; char enc_type; char new_packmode; char enc_packmode; char is_valid_array; } __Pyx_BufFmt_Context; /* ForceInitThreads.proto */ #ifndef __PYX_FORCE_INIT_THREADS #define __PYX_FORCE_INIT_THREADS 0 #endif /* NoFastGil.proto */ #define __Pyx_PyGILState_Ensure PyGILState_Ensure #define __Pyx_PyGILState_Release PyGILState_Release #define __Pyx_FastGIL_Remember() #define __Pyx_FastGIL_Forget() #define __Pyx_FastGilFuncInit() /* Atomics.proto */ #include #ifndef CYTHON_ATOMICS #define CYTHON_ATOMICS 1 #endif #define __pyx_atomic_int_type int #if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\ (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\ !defined(__i386__) #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1) #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1) #ifdef __PYX_DEBUG_ATOMICS #warning "Using GNU atomics" #endif #elif CYTHON_ATOMICS && defined(_MSC_VER) && 0 #include #undef __pyx_atomic_int_type #define __pyx_atomic_int_type LONG #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value) #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value) #ifdef __PYX_DEBUG_ATOMICS #pragma message ("Using MSVC atomics") #endif #elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0 #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value) #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value) #ifdef __PYX_DEBUG_ATOMICS #warning "Using Intel atomics" #endif #else #undef CYTHON_ATOMICS #define CYTHON_ATOMICS 0 #ifdef __PYX_DEBUG_ATOMICS #warning "Not using atomics" #endif #endif typedef volatile __pyx_atomic_int_type __pyx_atomic_int; #if CYTHON_ATOMICS #define __pyx_add_acquisition_count(memview)\ __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) #define __pyx_sub_acquisition_count(memview)\ __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock) #else #define __pyx_add_acquisition_count(memview)\ __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) #define __pyx_sub_acquisition_count(memview)\ __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock) #endif /* MemviewSliceStruct.proto */ struct __pyx_memoryview_obj; typedef struct { struct __pyx_memoryview_obj *memview; char *data; Py_ssize_t shape[8]; Py_ssize_t strides[8]; Py_ssize_t suboffsets[8]; } __Pyx_memviewslice; #define __Pyx_MemoryView_Len(m) (m.shape[0]) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":776 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t */ typedef npy_int8 __pyx_t_5numpy_int8_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":777 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t */ typedef npy_int16 __pyx_t_5numpy_int16_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":778 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< * ctypedef npy_int64 int64_t * #ctypedef npy_int96 int96_t */ typedef npy_int32 __pyx_t_5numpy_int32_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":779 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< * #ctypedef npy_int96 int96_t * #ctypedef npy_int128 int128_t */ typedef npy_int64 __pyx_t_5numpy_int64_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":783 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":784 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":785 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< * ctypedef npy_uint64 uint64_t * #ctypedef npy_uint96 uint96_t */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":786 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< * #ctypedef npy_uint96 uint96_t * #ctypedef npy_uint128 uint128_t */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":790 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< * ctypedef npy_float64 float64_t * #ctypedef npy_float80 float80_t */ typedef npy_float32 __pyx_t_5numpy_float32_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":791 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< * #ctypedef npy_float80 float80_t * #ctypedef npy_float128 float128_t */ typedef npy_float64 __pyx_t_5numpy_float64_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":800 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t */ typedef npy_long __pyx_t_5numpy_int_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":801 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< * ctypedef npy_longlong longlong_t * */ typedef npy_longlong __pyx_t_5numpy_long_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":802 * ctypedef npy_long int_t * ctypedef npy_longlong long_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< * * ctypedef npy_ulong uint_t */ typedef npy_longlong __pyx_t_5numpy_longlong_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":804 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t */ typedef npy_ulong __pyx_t_5numpy_uint_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":805 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< * ctypedef npy_ulonglong ulonglong_t * */ typedef npy_ulonglong __pyx_t_5numpy_ulong_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":806 * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulong_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< * * ctypedef npy_intp intp_t */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":808 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< * ctypedef npy_uintp uintp_t * */ typedef npy_intp __pyx_t_5numpy_intp_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":809 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< * * ctypedef npy_double float_t */ typedef npy_uintp __pyx_t_5numpy_uintp_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":811 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t */ typedef npy_double __pyx_t_5numpy_float_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":812 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< * ctypedef npy_longdouble longdouble_t * */ typedef npy_double __pyx_t_5numpy_double_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":813 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cfloat cfloat_t */ typedef npy_longdouble __pyx_t_5numpy_longdouble_t; /* Declarations.proto */ #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< float > __pyx_t_float_complex; #else typedef float _Complex __pyx_t_float_complex; #endif #else typedef struct { float real, imag; } __pyx_t_float_complex; #endif static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); /* Declarations.proto */ #if CYTHON_CCOMPLEX #ifdef __cplusplus typedef ::std::complex< double > __pyx_t_double_complex; #else typedef double _Complex __pyx_t_double_complex; #endif #else typedef struct { double real, imag; } __pyx_t_double_complex; #endif static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); /*--- Type declarations ---*/ struct __pyx_array_obj; struct __pyx_MemviewEnum_obj; struct __pyx_memoryview_obj; struct __pyx_memoryviewslice_obj; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":815 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":816 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< * ctypedef npy_clongdouble clongdouble_t * */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":817 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< * * ctypedef npy_cdouble complex_t */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":819 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew1(a): */ typedef npy_cdouble __pyx_t_5numpy_complex_t; /* "View.MemoryView":105 * * @cname("__pyx_array") * cdef class array: # <<<<<<<<<<<<<< * * cdef: */ struct __pyx_array_obj { PyObject_HEAD struct __pyx_vtabstruct_array *__pyx_vtab; char *data; Py_ssize_t len; char *format; int ndim; Py_ssize_t *_shape; Py_ssize_t *_strides; Py_ssize_t itemsize; PyObject *mode; PyObject *_format; void (*callback_free_data)(void *); int free_data; int dtype_is_object; }; /* "View.MemoryView":279 * * @cname('__pyx_MemviewEnum') * cdef class Enum(object): # <<<<<<<<<<<<<< * cdef object name * def __init__(self, name): */ struct __pyx_MemviewEnum_obj { PyObject_HEAD PyObject *name; }; /* "View.MemoryView":330 * * @cname('__pyx_memoryview') * cdef class memoryview(object): # <<<<<<<<<<<<<< * * cdef object obj */ struct __pyx_memoryview_obj { PyObject_HEAD struct __pyx_vtabstruct_memoryview *__pyx_vtab; PyObject *obj; PyObject *_size; PyObject *_array_interface; PyThread_type_lock lock; __pyx_atomic_int acquisition_count[2]; __pyx_atomic_int *acquisition_count_aligned_p; Py_buffer view; int flags; int dtype_is_object; __Pyx_TypeInfo *typeinfo; }; /* "View.MemoryView":961 * * @cname('__pyx_memoryviewslice') * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< * "Internal class for passing memoryview slices to Python" * */ struct __pyx_memoryviewslice_obj { struct __pyx_memoryview_obj __pyx_base; __Pyx_memviewslice from_slice; PyObject *from_object; PyObject *(*to_object_func)(char *); int (*to_dtype_func)(char *, PyObject *); }; /* "View.MemoryView":105 * * @cname("__pyx_array") * cdef class array: # <<<<<<<<<<<<<< * * cdef: */ struct __pyx_vtabstruct_array { PyObject *(*get_memview)(struct __pyx_array_obj *); }; static struct __pyx_vtabstruct_array *__pyx_vtabptr_array; /* "View.MemoryView":330 * * @cname('__pyx_memoryview') * cdef class memoryview(object): # <<<<<<<<<<<<<< * * cdef object obj */ struct __pyx_vtabstruct_memoryview { char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *); PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *); PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *); PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *); PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *); PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *); }; static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview; /* "View.MemoryView":961 * * @cname('__pyx_memoryviewslice') * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<< * "Internal class for passing memoryview slices to Python" * */ struct __pyx_vtabstruct__memoryviewslice { struct __pyx_vtabstruct_memoryview __pyx_base; }; static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice; /* --- Runtime support code (head) --- */ /* Refnanny.proto */ #ifndef CYTHON_REFNANNY #define CYTHON_REFNANNY 0 #endif #if CYTHON_REFNANNY typedef struct { void (*INCREF)(void*, PyObject*, int); void (*DECREF)(void*, PyObject*, int); void (*GOTREF)(void*, PyObject*, int); void (*GIVEREF)(void*, PyObject*, int); void* (*SetupContext)(const char*, int, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; #ifdef WITH_THREAD #define __Pyx_RefNannySetupContext(name, acquire_gil)\ if (acquire_gil) {\ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ PyGILState_Release(__pyx_gilstate_save);\ } else {\ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil)\ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) #endif #define __Pyx_RefNannyFinishContext()\ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) #define __Pyx_XINCREF(r) Py_XINCREF(r) #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif #define __Pyx_XDECREF_SET(r, v) do {\ PyObject *tmp = (PyObject *) r;\ r = v; __Pyx_XDECREF(tmp);\ } while (0) #define __Pyx_DECREF_SET(r, v) do {\ PyObject *tmp = (PyObject *) r;\ r = v; __Pyx_DECREF(tmp);\ } while (0) #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) /* PyObjectGetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); #else #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); /* RaiseArgTupleInvalid.proto */ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /* RaiseDoubleKeywords.proto */ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /* ParseKeywords.proto */ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ const char* function_name); /* GetItemInt.proto */ #define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ __Pyx_GetItemInt_Generic(o, to_py_func(i)))) #define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); #define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int wraparound, int boundscheck); static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, int wraparound, int boundscheck); /* PyDictContains.proto */ static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { int result = PyDict_Contains(dict, item); return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } /* DictGetItem.proto */ #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); #define __Pyx_PyObject_Dict_GetItem(obj, name)\ (likely(PyDict_CheckExact(obj)) ?\ __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) #else #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) #define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) #endif /* PyCFunctionFastCall.proto */ #if CYTHON_FAST_PYCCALL static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); #else #define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) #endif /* PyFunctionFastCall.proto */ #if CYTHON_FAST_PYCALL #define __Pyx_PyFunction_FastCall(func, args, nargs)\ __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) #if 1 || PY_VERSION_HEX < 0x030600B1 static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs); #else #define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) #endif #define __Pyx_BUILD_ASSERT_EXPR(cond)\ (sizeof(char [1 - 2*!(cond)]) - 1) #ifndef Py_MEMBER_SIZE #define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) #endif static size_t __pyx_pyframe_localsplus_offset = 0; #include "frameobject.h" #define __Pxy_PyFrame_Initialize_Offsets()\ ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) #define __Pyx_PyFrame_GetLocalsplus(frame)\ (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) #endif /* PyObjectCall.proto */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); #else #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) #endif /* PyObjectCallMethO.proto */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); #endif /* PyObjectCallOneArg.proto */ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); /* PyThreadStateGet.proto */ #if CYTHON_FAST_THREAD_STATE #define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; #define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; #define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type #else #define __Pyx_PyThreadState_declare #define __Pyx_PyThreadState_assign #define __Pyx_PyErr_Occurred() PyErr_Occurred() #endif /* PyErrFetchRestore.proto */ #if CYTHON_FAST_THREAD_STATE #define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) #define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) #define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) #define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) #define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) #else #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) #endif #else #define __Pyx_PyErr_Clear() PyErr_Clear() #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) #define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) #define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) #define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) #define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) #define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) #define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) #endif /* RaiseException.proto */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /* UnicodeAsUCS4.proto */ static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*); /* object_ord.proto */ #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyObject_Ord(c)\ (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c)) #else #define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c) #endif static long __Pyx__PyObject_Ord(PyObject* c); /* SetItemInt.proto */ #define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\ (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\ __Pyx_SetItemInt_Generic(o, to_py_func(i), v))) static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v); static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, int wraparound, int boundscheck); /* IterFinish.proto */ static CYTHON_INLINE int __Pyx_IterFinish(void); /* PyObjectCallNoArg.proto */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); #else #define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) #endif /* PyObjectGetMethod.proto */ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); /* PyObjectCallMethod0.proto */ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); /* RaiseNeedMoreValuesToUnpack.proto */ static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); /* RaiseTooManyValuesToUnpack.proto */ static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); /* UnpackItemEndCheck.proto */ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /* RaiseNoneIterError.proto */ static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); /* UnpackTupleError.proto */ static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /* UnpackTuple2.proto */ #define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ (likely(is_tuple || PyTuple_Check(tuple)) ?\ (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); static int __Pyx_unpack_tuple2_generic( PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); /* dict_iter.proto */ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, Py_ssize_t* p_orig_length, int* p_is_dict); static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); /* PyObjectCall2Args.proto */ static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); /* ListAppend.proto */ #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif /* ArgTypeTest.proto */ #define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ __Pyx__ArgTypeTest(obj, type, name, exact)) static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); /* IsLittleEndian.proto */ static CYTHON_INLINE int __Pyx_Is_Little_Endian(void); /* BufferFormatCheck.proto */ static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts); static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, __Pyx_BufFmt_StackElem* stack, __Pyx_TypeInfo* type); /* BufferGetAndValidate.proto */ #define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\ ((obj == Py_None || obj == NULL) ?\ (__Pyx_ZeroBuffer(buf), 0) :\ __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)) static int __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); static void __Pyx_ZeroBuffer(Py_buffer* buf); static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; /* None.proto */ static CYTHON_INLINE long __Pyx_div_long(long, long); /* UnaryNegOverflows.proto */ #define UNARY_NEG_WOULD_OVERFLOW(x)\ (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x))) /* GetModuleGlobalName.proto */ #if CYTHON_USE_DICT_VERSIONS #define __Pyx_GetModuleGlobalName(var, name) {\ static PY_UINT64_T __pyx_dict_version = 0;\ static PyObject *__pyx_dict_cached_value = NULL;\ (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ } #define __Pyx_GetModuleGlobalNameUncached(var, name) {\ PY_UINT64_T __pyx_dict_version;\ PyObject *__pyx_dict_cached_value;\ (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ } static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); #else #define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) #define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); #endif /* ExtTypeTest.proto */ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); #define __Pyx_BufPtrStrided4d(type, buf, i0, s0, i1, s1, i2, s2, i3, s3) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2 + i3 * s3) #define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1) /* ObjectGetItem.proto */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); #else #define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) #endif #define __Pyx_BufPtrStrided6d(type, buf, i0, s0, i1, s1, i2, s2, i3, s3, i4, s4, i5, s5) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2 + i3 * s3 + i4 * s4 + i5 * s5) /* GetTopmostException.proto */ #if CYTHON_USE_EXC_INFO_STACK static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); #endif /* SaveResetException.proto */ #if CYTHON_FAST_THREAD_STATE #define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); #define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); #else #define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) #define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) #endif /* PyErrExceptionMatches.proto */ #if CYTHON_FAST_THREAD_STATE #define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); #else #define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) #endif /* GetException.proto */ #if CYTHON_FAST_THREAD_STATE #define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); #else static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); #endif /* IncludeStringH.proto */ #include /* BytesEquals.proto */ static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /* UnicodeEquals.proto */ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /* StrEquals.proto */ #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals #else #define __Pyx_PyString_Equals __Pyx_PyBytes_Equals #endif /* None.proto */ static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t); static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/ /* GetAttr.proto */ static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /* decode_c_string_utf16.proto */ static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { int byteorder = 0; return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); } static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { int byteorder = -1; return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); } static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { int byteorder = 1; return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); } /* decode_c_string.proto */ static CYTHON_INLINE PyObject* __Pyx_decode_c_string( const char* cstring, Py_ssize_t start, Py_ssize_t stop, const char* encoding, const char* errors, PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); /* GetAttr3.proto */ static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); /* SwapException.proto */ #if CYTHON_FAST_THREAD_STATE #define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); #else static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); #endif /* Import.proto */ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /* FastTypeChecks.proto */ #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); #else #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) #define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) #endif #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ /* ListCompAppend.proto */ #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { PyListObject* L = (PyListObject*) list; Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len)) { Py_INCREF(x); PyList_SET_ITEM(list, len, x); Py_SIZE(list) = len+1; return 0; } return PyList_Append(list, x); } #else #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) #endif /* PyIntBinop.proto */ #if !CYTHON_COMPILING_IN_PYPY static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace); #else #define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace)\ (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) #endif /* ListExtend.proto */ static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) { #if CYTHON_COMPILING_IN_CPYTHON PyObject* none = _PyList_Extend((PyListObject*)L, v); if (unlikely(!none)) return -1; Py_DECREF(none); return 0; #else return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v); #endif } /* None.proto */ static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); /* WriteUnraisableException.proto */ static void __Pyx_WriteUnraisable(const char *name, int clineno, int lineno, const char *filename, int full_traceback, int nogil); /* ImportFrom.proto */ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /* HasAttr.proto */ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); /* PyObject_GenericGetAttrNoDict.proto */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); #else #define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr #endif /* PyObject_GenericGetAttr.proto */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); #else #define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr #endif /* SetVTable.proto */ static int __Pyx_SetVtable(PyObject *dict, void *vtable); /* SetupReduce.proto */ static int __Pyx_setup_reduce(PyObject* type_obj); /* TypeImport.proto */ #ifndef __PYX_HAVE_RT_ImportType_proto #define __PYX_HAVE_RT_ImportType_proto enum __Pyx_ImportType_CheckSize { __Pyx_ImportType_CheckSize_Error = 0, __Pyx_ImportType_CheckSize_Warn = 1, __Pyx_ImportType_CheckSize_Ignore = 2 }; static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); #endif /* FetchCommonType.proto */ static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); /* CythonFunction.proto */ #define __Pyx_CyFunction_USED 1 #define __Pyx_CYFUNCTION_STATICMETHOD 0x01 #define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 #define __Pyx_CYFUNCTION_CCLASS 0x04 #define __Pyx_CyFunction_GetClosure(f)\ (((__pyx_CyFunctionObject *) (f))->func_closure) #define __Pyx_CyFunction_GetClassObj(f)\ (((__pyx_CyFunctionObject *) (f))->func_classobj) #define __Pyx_CyFunction_Defaults(type, f)\ ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) #define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) typedef struct { PyCFunctionObject func; #if PY_VERSION_HEX < 0x030500A0 PyObject *func_weakreflist; #endif PyObject *func_dict; PyObject *func_name; PyObject *func_qualname; PyObject *func_doc; PyObject *func_globals; PyObject *func_code; PyObject *func_closure; PyObject *func_classobj; void *defaults; int defaults_pyobjects; int flags; PyObject *defaults_tuple; PyObject *defaults_kwdict; PyObject *(*defaults_getter)(PyObject *); PyObject *func_annotations; } __pyx_CyFunctionObject; static PyTypeObject *__pyx_CyFunctionType = 0; #define __Pyx_CyFunction_Check(obj) (__Pyx_TypeCheck(obj, __pyx_CyFunctionType)) #define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\ __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *self, PyObject *module, PyObject *globals, PyObject* code); static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, size_t size, int pyobjects); static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, PyObject *tuple); static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, PyObject *dict); static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, PyObject *dict); static int __pyx_CyFunction_init(void); /* FusedFunction.proto */ typedef struct { __pyx_CyFunctionObject func; PyObject *__signatures__; PyObject *type; PyObject *self; } __pyx_FusedFunctionObject; #define __pyx_FusedFunction_NewEx(ml, flags, qualname, self, module, globals, code)\ __pyx_FusedFunction_New(__pyx_FusedFunctionType, ml, flags, qualname, self, module, globals, code) static PyObject *__pyx_FusedFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject *qualname, PyObject *self, PyObject *module, PyObject *globals, PyObject *code); static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self); static PyTypeObject *__pyx_FusedFunctionType = NULL; static int __pyx_FusedFunction_init(void); #define __Pyx_FusedFunction_USED /* CLineInTraceback.proto */ #ifdef CYTHON_CLINE_IN_TRACEBACK #define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) #else static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); #endif /* CodeObjectCache.proto */ typedef struct { PyCodeObject* code_object; int code_line; } __Pyx_CodeObjectCacheEntry; struct __Pyx_CodeObjectCache { int count; int max_count; __Pyx_CodeObjectCacheEntry* entries; }; static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); /* AddTraceback.proto */ static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); #if PY_MAJOR_VERSION < 3 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); static void __Pyx_ReleaseBuffer(Py_buffer *view); #else #define __Pyx_GetBuffer PyObject_GetBuffer #define __Pyx_ReleaseBuffer PyBuffer_Release #endif /* BufferStructDeclare.proto */ typedef struct { Py_ssize_t shape, strides, suboffsets; } __Pyx_Buf_DimInfo; typedef struct { size_t refcount; Py_buffer pybuffer; } __Pyx_Buffer; typedef struct { __Pyx_Buffer *rcbuffer; char *data; __Pyx_Buf_DimInfo diminfo[8]; } __Pyx_LocalBuf_ND; /* MemviewSliceIsContig.proto */ static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim); /* OverlappingSlices.proto */ static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, __Pyx_memviewslice *slice2, int ndim, size_t itemsize); /* Capsule.proto */ static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig); /* TypeInfoCompare.proto */ static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b); /* MemviewSliceValidateAndInit.proto */ static int __Pyx_ValidateAndInit_memviewslice( int *axes_specs, int c_or_f_flag, int buf_flags, int ndim, __Pyx_TypeInfo *dtype, __Pyx_BufFmt_StackElem stack[], __Pyx_memviewslice *memviewslice, PyObject *original_obj); /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_nn___pyx_t_5numpy_float32_t(PyObject *, int writable_flag); /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_nn___pyx_t_5numpy_float64_t(PyObject *, int writable_flag); /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5numpy_float32_t(PyObject *, int writable_flag); /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5numpy_float64_t(PyObject *, int writable_flag); /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsds_nn___pyx_t_5numpy_float32_t(PyObject *, int writable_flag); /* ObjectToMemviewSlice.proto */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsds_nn___pyx_t_5numpy_float64_t(PyObject *, int writable_flag); /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); /* RealImag.proto */ #if CYTHON_CCOMPLEX #ifdef __cplusplus #define __Pyx_CREAL(z) ((z).real()) #define __Pyx_CIMAG(z) ((z).imag()) #else #define __Pyx_CREAL(z) (__real__(z)) #define __Pyx_CIMAG(z) (__imag__(z)) #endif #else #define __Pyx_CREAL(z) ((z).real) #define __Pyx_CIMAG(z) ((z).imag) #endif #if defined(__cplusplus) && CYTHON_CCOMPLEX\ && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103) #define __Pyx_SET_CREAL(z,x) ((z).real(x)) #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) #else #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) #endif /* Arithmetic.proto */ #if CYTHON_CCOMPLEX #define __Pyx_c_eq_float(a, b) ((a)==(b)) #define __Pyx_c_sum_float(a, b) ((a)+(b)) #define __Pyx_c_diff_float(a, b) ((a)-(b)) #define __Pyx_c_prod_float(a, b) ((a)*(b)) #define __Pyx_c_quot_float(a, b) ((a)/(b)) #define __Pyx_c_neg_float(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zero_float(z) ((z)==(float)0) #define __Pyx_c_conj_float(z) (::std::conj(z)) #if 1 #define __Pyx_c_abs_float(z) (::std::abs(z)) #define __Pyx_c_pow_float(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zero_float(z) ((z)==0) #define __Pyx_c_conj_float(z) (conjf(z)) #if 1 #define __Pyx_c_abs_float(z) (cabsf(z)) #define __Pyx_c_pow_float(a, b) (cpowf(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex); static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex); #if 1 static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex); static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex); #endif #endif /* Arithmetic.proto */ #if CYTHON_CCOMPLEX #define __Pyx_c_eq_double(a, b) ((a)==(b)) #define __Pyx_c_sum_double(a, b) ((a)+(b)) #define __Pyx_c_diff_double(a, b) ((a)-(b)) #define __Pyx_c_prod_double(a, b) ((a)*(b)) #define __Pyx_c_quot_double(a, b) ((a)/(b)) #define __Pyx_c_neg_double(a) (-(a)) #ifdef __cplusplus #define __Pyx_c_is_zero_double(z) ((z)==(double)0) #define __Pyx_c_conj_double(z) (::std::conj(z)) #if 1 #define __Pyx_c_abs_double(z) (::std::abs(z)) #define __Pyx_c_pow_double(a, b) (::std::pow(a, b)) #endif #else #define __Pyx_c_is_zero_double(z) ((z)==0) #define __Pyx_c_conj_double(z) (conj(z)) #if 1 #define __Pyx_c_abs_double(z) (cabs(z)) #define __Pyx_c_pow_double(a, b) (cpow(a, b)) #endif #endif #else static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex); static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex); #if 1 static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex); static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex); #endif #endif /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value); /* MemviewSliceCopyTemplate.proto */ static __Pyx_memviewslice __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, const char *mode, int ndim, size_t sizeof_dtype, int contig_flag, int dtype_is_object); /* MemviewSliceInit.proto */ #define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d #define __Pyx_MEMVIEW_DIRECT 1 #define __Pyx_MEMVIEW_PTR 2 #define __Pyx_MEMVIEW_FULL 4 #define __Pyx_MEMVIEW_CONTIG 8 #define __Pyx_MEMVIEW_STRIDED 16 #define __Pyx_MEMVIEW_FOLLOW 32 #define __Pyx_IS_C_CONTIG 1 #define __Pyx_IS_F_CONTIG 2 static int __Pyx_init_memviewslice( struct __pyx_memoryview_obj *memview, int ndim, __Pyx_memviewslice *memviewslice, int memview_is_new_reference); static CYTHON_INLINE int __pyx_add_acquisition_count_locked( __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( __pyx_atomic_int *acquisition_count, PyThread_type_lock lock); #define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p) #define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview)) #define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__) #define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__) static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int); /* CIntFromPy.proto */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); /* BytesContains.proto */ static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character); /* ImportNumPyArray.proto */ static PyObject *__pyx_numpy_ndarray = NULL; static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void); /* CIntFromPy.proto */ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); /* CIntFromPy.proto */ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); /* CheckBinaryVersion.proto */ static int __Pyx_check_binary_version(void); /* InitStrings.proto */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/ static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/ static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/ static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/ static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/ /* Module declarations from 'cpython.buffer' */ /* Module declarations from 'libc.string' */ /* Module declarations from 'libc.stdio' */ /* Module declarations from '__builtin__' */ /* Module declarations from 'cpython.type' */ static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; /* Module declarations from 'cpython' */ /* Module declarations from 'cpython.object' */ /* Module declarations from 'cpython.ref' */ /* Module declarations from 'cpython.mem' */ /* Module declarations from 'numpy' */ /* Module declarations from 'numpy' */ static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ /* Module declarations from 'cython' */ /* Module declarations from 'im2col_cython' */ static PyTypeObject *__pyx_array_type = 0; static PyTypeObject *__pyx_MemviewEnum_type = 0; static PyTypeObject *__pyx_memoryview_type = 0; static PyTypeObject *__pyx_memoryviewslice_type = 0; static PyObject *generic = 0; static PyObject *strided = 0; static PyObject *indirect = 0; static PyObject *contiguous = 0; static PyObject *indirect_contiguous = 0; static int __pyx_memoryview_thread_locks_used; static PyThread_type_lock __pyx_memoryview_thread_locks[8]; static int __pyx_fuse_0__pyx_f_13im2col_cython_im2col_cython_inner(PyArrayObject *, PyArrayObject *, int, int, int, int, int, int, int, int, int, int); /*proto*/ static int __pyx_fuse_1__pyx_f_13im2col_cython_im2col_cython_inner(PyArrayObject *, PyArrayObject *, int, int, int, int, int, int, int, int, int, int); /*proto*/ static int __pyx_fuse_0__pyx_f_13im2col_cython_col2im_cython_inner(PyArrayObject *, PyArrayObject *, int, int, int, int, int, int, int, int, int, int); /*proto*/ static int __pyx_fuse_1__pyx_f_13im2col_cython_col2im_cython_inner(PyArrayObject *, PyArrayObject *, int, int, int, int, int, int, int, int, int, int); /*proto*/ static PyObject *__pyx_fuse_0__pyx_f_13im2col_cython_col2im_6d_cython_inner(PyArrayObject *, PyArrayObject *, int, int, int, int, int, int, int, int, int, int); /*proto*/ static PyObject *__pyx_fuse_1__pyx_f_13im2col_cython_col2im_6d_cython_inner(PyArrayObject *, PyArrayObject *, int, int, int, int, int, int, int, int, int, int); /*proto*/ static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ static void *__pyx_align_pointer(void *, size_t); /*proto*/ static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/ static PyObject *_unellipsify(PyObject *, int); /*proto*/ static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/ static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/ static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/ static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/ static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/ static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/ static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/ static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/ static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/ static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/ static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/ static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/ static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/ static int __pyx_memoryview_err(PyObject *, char *); /*proto*/ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/ static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/ static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t = { "float32_t", NULL, sizeof(__pyx_t_5numpy_float32_t), { 0 }, 0, 'R', 0, 0 }; static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t = { "float64_t", NULL, sizeof(__pyx_t_5numpy_float64_t), { 0 }, 0, 'R', 0, 0 }; #define __Pyx_MODULE_NAME "im2col_cython" extern int __pyx_module_is_main_im2col_cython; int __pyx_module_is_main_im2col_cython = 0; /* Implementation of 'im2col_cython' */ static PyObject *__pyx_builtin_TypeError; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_ValueError; static PyObject *__pyx_builtin_RuntimeError; static PyObject *__pyx_builtin_ImportError; static PyObject *__pyx_builtin_MemoryError; static PyObject *__pyx_builtin_enumerate; static PyObject *__pyx_builtin_Ellipsis; static PyObject *__pyx_builtin_id; static PyObject *__pyx_builtin_IndexError; static const char __pyx_k_[] = "()"; static const char __pyx_k_C[] = "C"; static const char __pyx_k_H[] = "H"; static const char __pyx_k_N[] = "N"; static const char __pyx_k_O[] = "O"; static const char __pyx_k_W[] = "W"; static const char __pyx_k_c[] = "c"; static const char __pyx_k_p[] = "p"; static const char __pyx_k_s[] = "s"; static const char __pyx_k_x[] = "x"; static const char __pyx_k_HH[] = "HH"; static const char __pyx_k_WW[] = "WW"; static const char __pyx_k__2[] = "|"; static const char __pyx_k_id[] = "id"; static const char __pyx_k_np[] = "np"; static const char __pyx_k_new[] = "__new__"; static const char __pyx_k_obj[] = "obj"; static const char __pyx_k_pad[] = "pad"; static const char __pyx_k_args[] = "args"; static const char __pyx_k_base[] = "base"; static const char __pyx_k_cols[] = "cols"; static const char __pyx_k_dict[] = "__dict__"; static const char __pyx_k_kind[] = "kind"; static const char __pyx_k_main[] = "__main__"; static const char __pyx_k_mode[] = "mode"; static const char __pyx_k_name[] = "name"; static const char __pyx_k_ndim[] = "ndim"; static const char __pyx_k_pack[] = "pack"; static const char __pyx_k_size[] = "size"; static const char __pyx_k_step[] = "step"; static const char __pyx_k_stop[] = "stop"; static const char __pyx_k_test[] = "__test__"; static const char __pyx_k_ASCII[] = "ASCII"; static const char __pyx_k_class[] = "__class__"; static const char __pyx_k_dtype[] = "dtype"; static const char __pyx_k_empty[] = "empty"; static const char __pyx_k_error[] = "error"; static const char __pyx_k_flags[] = "flags"; static const char __pyx_k_numpy[] = "numpy"; static const char __pyx_k_out_h[] = "out_h"; static const char __pyx_k_out_w[] = "out_w"; static const char __pyx_k_range[] = "range"; static const char __pyx_k_shape[] = "shape"; static const char __pyx_k_split[] = "split"; static const char __pyx_k_start[] = "start"; static const char __pyx_k_strip[] = "strip"; static const char __pyx_k_zeros[] = "zeros"; static const char __pyx_k_encode[] = "encode"; static const char __pyx_k_format[] = "format"; static const char __pyx_k_import[] = "__import__"; static const char __pyx_k_kwargs[] = "kwargs"; static const char __pyx_k_name_2[] = "__name__"; static const char __pyx_k_pickle[] = "pickle"; static const char __pyx_k_reduce[] = "__reduce__"; static const char __pyx_k_stride[] = "stride"; static const char __pyx_k_struct[] = "struct"; static const char __pyx_k_unpack[] = "unpack"; static const char __pyx_k_update[] = "update"; static const char __pyx_k_fortran[] = "fortran"; static const char __pyx_k_memview[] = "memview"; static const char __pyx_k_padding[] = "padding"; static const char __pyx_k_Ellipsis[] = "Ellipsis"; static const char __pyx_k_constant[] = "constant"; static const char __pyx_k_defaults[] = "defaults"; static const char __pyx_k_getstate[] = "__getstate__"; static const char __pyx_k_itemsize[] = "itemsize"; static const char __pyx_k_pyx_type[] = "__pyx_type"; static const char __pyx_k_setstate[] = "__setstate__"; static const char __pyx_k_x_padded[] = "x_padded"; static const char __pyx_k_TypeError[] = "TypeError"; static const char __pyx_k_enumerate[] = "enumerate"; static const char __pyx_k_float32_t[] = "float32_t"; static const char __pyx_k_float64_t[] = "float64_t"; static const char __pyx_k_pyx_state[] = "__pyx_state"; static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; static const char __pyx_k_IndexError[] = "IndexError"; static const char __pyx_k_ValueError[] = "ValueError"; static const char __pyx_k_pyx_result[] = "__pyx_result"; static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; static const char __pyx_k_signatures[] = "signatures"; static const char __pyx_k_ImportError[] = "ImportError"; static const char __pyx_k_MemoryError[] = "MemoryError"; static const char __pyx_k_PickleError[] = "PickleError"; static const char __pyx_k_field_width[] = "field_width"; static const char __pyx_k_RuntimeError[] = "RuntimeError"; static const char __pyx_k_field_height[] = "field_height"; static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; static const char __pyx_k_stringsource[] = "stringsource"; static const char __pyx_k_col2im_cython[] = "col2im_cython"; static const char __pyx_k_im2col_cython[] = "im2col_cython"; static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer"; static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; static const char __pyx_k_View_MemoryView[] = "View.MemoryView"; static const char __pyx_k_allocate_buffer[] = "allocate_buffer"; static const char __pyx_k_dtype_is_object[] = "dtype_is_object"; static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; static const char __pyx_k_col2im_6d_cython[] = "col2im_6d_cython"; static const char __pyx_k_im2col_cython_pyx[] = "im2col_cython.pyx"; static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; static const char __pyx_k_strided_and_direct[] = ""; static const char __pyx_k_strided_and_indirect[] = ""; static const char __pyx_k_contiguous_and_direct[] = ""; static const char __pyx_k_MemoryView_of_r_object[] = ""; static const char __pyx_k_MemoryView_of_r_at_0x_x[] = ""; static const char __pyx_k_contiguous_and_indirect[] = ""; static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'"; static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d."; static const char __pyx_k_No_matching_signature_found[] = "No matching signature found"; static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; static const char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; static const char __pyx_k_strided_and_direct_or_indirect[] = ""; static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import"; static const char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory."; static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview"; static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview"; static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array"; static const char __pyx_k_Expected_at_least_d_argument_s_g[] = "Expected at least %d argument%s, got %d"; static const char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; static const char __pyx_k_Function_call_with_ambiguous_arg[] = "Function call with ambiguous argument types"; static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))"; static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported"; static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s"; static const char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)"; static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object"; static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)"; static const char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__"; static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import"; static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; static const char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; static PyObject *__pyx_kp_s_; static PyObject *__pyx_n_s_ASCII; static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri; static PyObject *__pyx_n_s_C; static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is; static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor; static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi; static PyObject *__pyx_kp_s_Cannot_index_with_type_s; static PyObject *__pyx_n_s_Ellipsis; static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; static PyObject *__pyx_kp_s_Expected_at_least_d_argument_s_g; static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; static PyObject *__pyx_kp_s_Function_call_with_ambiguous_arg; static PyObject *__pyx_n_s_H; static PyObject *__pyx_n_s_HH; static PyObject *__pyx_n_s_ImportError; static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0; static PyObject *__pyx_n_s_IndexError; static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr; static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d; static PyObject *__pyx_n_s_MemoryError; static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x; static PyObject *__pyx_kp_s_MemoryView_of_r_object; static PyObject *__pyx_n_s_N; static PyObject *__pyx_kp_s_No_matching_signature_found; static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; static PyObject *__pyx_n_b_O; static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a; static PyObject *__pyx_n_s_PickleError; static PyObject *__pyx_n_s_RuntimeError; static PyObject *__pyx_n_s_TypeError; static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; static PyObject *__pyx_n_s_ValueError; static PyObject *__pyx_n_s_View_MemoryView; static PyObject *__pyx_n_s_W; static PyObject *__pyx_n_s_WW; static PyObject *__pyx_kp_s__2; static PyObject *__pyx_n_s_allocate_buffer; static PyObject *__pyx_n_s_args; static PyObject *__pyx_n_s_base; static PyObject *__pyx_n_s_c; static PyObject *__pyx_n_u_c; static PyObject *__pyx_n_s_class; static PyObject *__pyx_n_s_cline_in_traceback; static PyObject *__pyx_n_s_col2im_6d_cython; static PyObject *__pyx_n_s_col2im_cython; static PyObject *__pyx_n_s_cols; static PyObject *__pyx_n_s_constant; static PyObject *__pyx_kp_s_contiguous_and_direct; static PyObject *__pyx_kp_s_contiguous_and_indirect; static PyObject *__pyx_n_s_defaults; static PyObject *__pyx_n_s_dict; static PyObject *__pyx_n_s_dtype; static PyObject *__pyx_n_s_dtype_is_object; static PyObject *__pyx_n_s_empty; static PyObject *__pyx_n_s_encode; static PyObject *__pyx_n_s_enumerate; static PyObject *__pyx_n_s_error; static PyObject *__pyx_n_s_field_height; static PyObject *__pyx_n_s_field_width; static PyObject *__pyx_n_s_flags; static PyObject *__pyx_n_s_float32_t; static PyObject *__pyx_n_s_float64_t; static PyObject *__pyx_n_s_format; static PyObject *__pyx_n_s_fortran; static PyObject *__pyx_n_u_fortran; static PyObject *__pyx_n_s_getstate; static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi; static PyObject *__pyx_n_s_id; static PyObject *__pyx_n_s_im2col_cython; static PyObject *__pyx_kp_s_im2col_cython_pyx; static PyObject *__pyx_n_s_import; static PyObject *__pyx_n_s_itemsize; static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; static PyObject *__pyx_n_s_kind; static PyObject *__pyx_n_s_kwargs; static PyObject *__pyx_n_s_main; static PyObject *__pyx_n_s_memview; static PyObject *__pyx_n_s_mode; static PyObject *__pyx_n_s_name; static PyObject *__pyx_n_s_name_2; static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; static PyObject *__pyx_n_s_ndim; static PyObject *__pyx_n_s_new; static PyObject *__pyx_kp_s_no_default___reduce___due_to_non; static PyObject *__pyx_n_s_np; static PyObject *__pyx_n_s_numpy; static PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to; static PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor; static PyObject *__pyx_n_s_obj; static PyObject *__pyx_n_s_out_h; static PyObject *__pyx_n_s_out_w; static PyObject *__pyx_n_s_p; static PyObject *__pyx_n_s_pack; static PyObject *__pyx_n_s_pad; static PyObject *__pyx_n_s_padding; static PyObject *__pyx_n_s_pickle; static PyObject *__pyx_n_s_pyx_PickleError; static PyObject *__pyx_n_s_pyx_checksum; static PyObject *__pyx_n_s_pyx_getbuffer; static PyObject *__pyx_n_s_pyx_result; static PyObject *__pyx_n_s_pyx_state; static PyObject *__pyx_n_s_pyx_type; static PyObject *__pyx_n_s_pyx_unpickle_Enum; static PyObject *__pyx_n_s_pyx_vtable; static PyObject *__pyx_n_s_range; static PyObject *__pyx_n_s_reduce; static PyObject *__pyx_n_s_reduce_cython; static PyObject *__pyx_n_s_reduce_ex; static PyObject *__pyx_n_s_s; static PyObject *__pyx_n_s_setstate; static PyObject *__pyx_n_s_setstate_cython; static PyObject *__pyx_n_s_shape; static PyObject *__pyx_n_s_signatures; static PyObject *__pyx_n_s_size; static PyObject *__pyx_n_s_split; static PyObject *__pyx_n_s_start; static PyObject *__pyx_n_s_step; static PyObject *__pyx_n_s_stop; static PyObject *__pyx_n_s_stride; static PyObject *__pyx_kp_s_strided_and_direct; static PyObject *__pyx_kp_s_strided_and_direct_or_indirect; static PyObject *__pyx_kp_s_strided_and_indirect; static PyObject *__pyx_kp_s_stringsource; static PyObject *__pyx_n_s_strip; static PyObject *__pyx_n_s_struct; static PyObject *__pyx_n_s_test; static PyObject *__pyx_kp_s_unable_to_allocate_array_data; static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str; static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; static PyObject *__pyx_n_s_unpack; static PyObject *__pyx_n_s_update; static PyObject *__pyx_n_s_x; static PyObject *__pyx_n_s_x_padded; static PyObject *__pyx_n_s_zeros; static PyObject *__pyx_pf_13im2col_cython_im2col_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */ static PyObject *__pyx_pf_13im2col_cython_6im2col_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride); /* proto */ static PyObject *__pyx_pf_13im2col_cython_8im2col_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride); /* proto */ static PyObject *__pyx_pf_13im2col_cython_2col2im_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */ static PyObject *__pyx_pf_13im2col_cython_12col2im_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride); /* proto */ static PyObject *__pyx_pf_13im2col_cython_14col2im_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride); /* proto */ static PyObject *__pyx_pf_13im2col_cython_4col2im_6d_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */ static PyObject *__pyx_pf_13im2col_cython_18col2im_6d_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_pad, int __pyx_v_stride); /* proto */ static PyObject *__pyx_pf_13im2col_cython_20col2im_6d_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_pad, int __pyx_v_stride); /* proto */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */ static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */ static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */ static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_int_0; static PyObject *__pyx_int_1; static PyObject *__pyx_int_5; static PyObject *__pyx_int_9; static PyObject *__pyx_int_184977713; static PyObject *__pyx_int_neg_1; static PyObject *__pyx_slice__6; static PyObject *__pyx_slice__7; static PyObject *__pyx_slice__8; static PyObject *__pyx_slice__9; static PyObject *__pyx_tuple__3; static PyObject *__pyx_tuple__4; static PyObject *__pyx_tuple__5; static PyObject *__pyx_slice__10; static PyObject *__pyx_slice__11; static PyObject *__pyx_slice__12; static PyObject *__pyx_slice__13; static PyObject *__pyx_slice__35; static PyObject *__pyx_tuple__14; static PyObject *__pyx_tuple__15; static PyObject *__pyx_tuple__16; static PyObject *__pyx_tuple__17; static PyObject *__pyx_tuple__18; static PyObject *__pyx_tuple__19; static PyObject *__pyx_tuple__20; static PyObject *__pyx_tuple__21; static PyObject *__pyx_tuple__22; static PyObject *__pyx_tuple__23; static PyObject *__pyx_tuple__24; static PyObject *__pyx_tuple__25; static PyObject *__pyx_tuple__26; static PyObject *__pyx_tuple__27; static PyObject *__pyx_tuple__28; static PyObject *__pyx_tuple__29; static PyObject *__pyx_tuple__30; static PyObject *__pyx_tuple__31; static PyObject *__pyx_tuple__32; static PyObject *__pyx_tuple__33; static PyObject *__pyx_tuple__34; static PyObject *__pyx_tuple__36; static PyObject *__pyx_tuple__37; static PyObject *__pyx_tuple__38; static PyObject *__pyx_tuple__39; static PyObject *__pyx_tuple__41; static PyObject *__pyx_tuple__43; static PyObject *__pyx_tuple__45; static PyObject *__pyx_tuple__46; static PyObject *__pyx_tuple__47; static PyObject *__pyx_tuple__48; static PyObject *__pyx_tuple__49; static PyObject *__pyx_tuple__50; static PyObject *__pyx_codeobj__40; static PyObject *__pyx_codeobj__42; static PyObject *__pyx_codeobj__44; static PyObject *__pyx_codeobj__51; /* Late includes */ /* "im2col_cython.pyx":12 * np.float64_t * * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, # <<<<<<<<<<<<<< * int field_width, int padding, int stride): * cdef int N = x.shape[0] */ /* Python wrapper */ static PyObject *__pyx_pw_13im2col_cython_1im2col_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_13im2col_cython_1im2col_cython = {"im2col_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13im2col_cython_1im2col_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_13im2col_cython_1im2col_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_signatures = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; CYTHON_UNUSED PyObject *__pyx_v_defaults = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0}; PyObject* values[4] = {0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 12, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 12, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); } __pyx_v_signatures = values[0]; __pyx_v_args = values[1]; __pyx_v_kwargs = values[2]; __pyx_v_defaults = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 12, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_13im2col_cython_im2col_cython(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_im2col_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) { PyObject *__pyx_v_dest_sig = NULL; Py_ssize_t __pyx_v_i; PyTypeObject *__pyx_v_ndarray = 0; __Pyx_memviewslice __pyx_v_memslice; Py_ssize_t __pyx_v_itemsize; CYTHON_UNUSED int __pyx_v_dtype_signed; char __pyx_v_kind; PyObject *__pyx_v_arg = NULL; PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_arg_base = NULL; PyObject *__pyx_v_candidates = NULL; PyObject *__pyx_v_sig = NULL; int __pyx_v_match_found; PyObject *__pyx_v_src_sig = NULL; PyObject *__pyx_v_dst_type = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; Py_ssize_t __pyx_t_5; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; __Pyx_memviewslice __pyx_t_8; Py_ssize_t __pyx_t_9; int __pyx_t_10; int __pyx_t_11; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; int __pyx_t_18; __Pyx_RefNannySetupContext("im2col_cython", 0); __Pyx_INCREF(__pyx_v_kwargs); __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); PyList_SET_ITEM(__pyx_t_1, 0, Py_None); __pyx_v_dest_sig = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_v_kwargs != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_t_3 = ((!__pyx_t_4) != 0); __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None); } __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1); __pyx_t_1 = 0; __pyx_v_itemsize = -1L; if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_t_2 = ((0 < __pyx_t_5) != 0); if (__pyx_t_2) { if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_1 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_v_args), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_arg = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6; } __pyx_t_3 = (__pyx_v_kwargs != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L7_bool_binop_done; } if (unlikely(__pyx_v_kwargs == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_x, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_t_3 = (__pyx_t_4 != 0); __pyx_t_2 = __pyx_t_3; __pyx_L7_bool_binop_done:; if (__pyx_t_2) { if (unlikely(__pyx_v_kwargs == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_arg = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6; } /*else*/ { if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_int_5); __Pyx_GIVEREF(__pyx_int_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_5); __Pyx_INCREF(__pyx_n_s_s); __Pyx_GIVEREF(__pyx_n_s_s); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_L6:; while (1) { __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_dtype = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L12; } __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_arg_base = __pyx_t_6; __pyx_t_6 = 0; __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_dtype = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L13; } /*else*/ { __Pyx_INCREF(Py_None); __pyx_v_dtype = Py_None; } __pyx_L13:; goto __pyx_L12; } /*else*/ { __Pyx_INCREF(Py_None); __pyx_v_dtype = Py_None; } __pyx_L12:; __pyx_v_itemsize = -1L; __pyx_t_2 = (__pyx_v_dtype != Py_None); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_itemsize = __pyx_t_5; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_kind = __pyx_t_7; __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); switch (__pyx_v_kind) { case 'i': case 'u': break; case 'f': __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0); if (__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L16_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 4) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L16_bool_binop_done:; if (__pyx_t_3) { if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 12, __pyx_L1_error) goto __pyx_L10_break; } __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0); if (__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L19_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 4) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L19_bool_binop_done:; if (__pyx_t_3) { if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 12, __pyx_L1_error) goto __pyx_L10_break; } break; case 'c': break; case 'O': break; default: break; } } } __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L22_bool_binop_done; } __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L22_bool_binop_done:; if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); __pyx_v_memslice = __pyx_t_8; __pyx_t_3 = (__pyx_v_memslice.memview != 0); if (__pyx_t_3) { __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 12, __pyx_L1_error) goto __pyx_L10_break; } /*else*/ { PyErr_Clear(); } } __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L26_bool_binop_done; } __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L26_bool_binop_done:; if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); __pyx_v_memslice = __pyx_t_8; __pyx_t_3 = (__pyx_v_memslice.memview != 0); if (__pyx_t_3) { __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 12, __pyx_L1_error) goto __pyx_L10_break; } /*else*/ { PyErr_Clear(); } } if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 12, __pyx_L1_error) goto __pyx_L10_break; } __pyx_L10_break:; __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_candidates = ((PyObject*)__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = 0; if (unlikely(__pyx_v_signatures == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = __pyx_t_1; __pyx_t_1 = 0; while (1) { __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10); if (unlikely(__pyx_t_11 == 0)) break; if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1); __pyx_t_1 = 0; __pyx_v_match_found = 0; __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_14)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_14); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); } } __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_); __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_12)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); } } __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_t_16 = __pyx_t_15; for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { __pyx_v_i = __pyx_t_17; __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_dest_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_v_dst_type != Py_None); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (__pyx_t_2) { __pyx_v_match_found = 1; goto __pyx_L34; } /*else*/ { __pyx_v_match_found = 0; goto __pyx_L32_break; } __pyx_L34:; } } __pyx_L32_break:; __pyx_t_2 = (__pyx_v_match_found != 0); if (__pyx_t_2) { __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 12, __pyx_L1_error) } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0); __pyx_t_3 = ((!__pyx_t_2) != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_t_3 = ((__pyx_t_9 > 1) != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 12, __pyx_L1_error) } /*else*/ { __Pyx_XDECREF(__pyx_r); if (unlikely(__pyx_v_signatures == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_candidates, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_13 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), __pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_r = __pyx_t_13; __pyx_t_13 = 0; goto __pyx_L0; } /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_AddTraceback("im2col_cython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dest_sig); __Pyx_XDECREF(__pyx_v_ndarray); __Pyx_XDECREF(__pyx_v_arg); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_arg_base); __Pyx_XDECREF(__pyx_v_candidates); __Pyx_XDECREF(__pyx_v_sig); __Pyx_XDECREF(__pyx_v_src_sig); __Pyx_XDECREF(__pyx_v_dst_type); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_fuse_0__pyx_pw_13im2col_cython_7im2col_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_fuse_0__pyx_mdef_13im2col_cython_7im2col_cython = {"__pyx_fuse_0im2col_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_13im2col_cython_7im2col_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_fuse_0__pyx_pw_13im2col_cython_7im2col_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_x = 0; int __pyx_v_field_height; int __pyx_v_field_width; int __pyx_v_padding; int __pyx_v_stride; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("im2col_cython (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_field_height,&__pyx_n_s_field_width,&__pyx_n_s_padding,&__pyx_n_s_stride,0}; PyObject* values[5] = {0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_height)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 1); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_width)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 2); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_padding)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 3); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 4); __PYX_ERR(0, 12, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "im2col_cython") < 0)) __PYX_ERR(0, 12, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); } __pyx_v_x = ((PyArrayObject *)values[0]); __pyx_v_field_height = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_field_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) __pyx_v_field_width = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_field_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13, __pyx_L3_error) __pyx_v_padding = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_padding == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13, __pyx_L3_error) __pyx_v_stride = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_stride == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 12, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.im2col_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_r = __pyx_pf_13im2col_cython_6im2col_cython(__pyx_self, __pyx_v_x, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_6im2col_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride) { int __pyx_v_N; int __pyx_v_C; int __pyx_v_H; int __pyx_v_W; int __pyx_v_HH; int __pyx_v_WW; int __pyx_v_p; PyArrayObject *__pyx_v_x_padded = 0; PyArrayObject *__pyx_v_cols = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x; __Pyx_Buffer __pyx_pybuffer_x; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations long __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyArrayObject *__pyx_t_7 = NULL; PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; __Pyx_RefNannySetupContext("__pyx_fuse_0im2col_cython", 0); __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x.pybuffer.buf = NULL; __pyx_pybuffer_x.refcount = 0; __pyx_pybuffernd_x.data = NULL; __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x.diminfo[2].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x.diminfo[2].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x.diminfo[3].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x.diminfo[3].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":14 * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, * int field_width, int padding, int stride): * cdef int N = x.shape[0] # <<<<<<<<<<<<<< * cdef int C = x.shape[1] * cdef int H = x.shape[2] */ __pyx_v_N = (__pyx_v_x->dimensions[0]); /* "im2col_cython.pyx":15 * int field_width, int padding, int stride): * cdef int N = x.shape[0] * cdef int C = x.shape[1] # <<<<<<<<<<<<<< * cdef int H = x.shape[2] * cdef int W = x.shape[3] */ __pyx_v_C = (__pyx_v_x->dimensions[1]); /* "im2col_cython.pyx":16 * cdef int N = x.shape[0] * cdef int C = x.shape[1] * cdef int H = x.shape[2] # <<<<<<<<<<<<<< * cdef int W = x.shape[3] * */ __pyx_v_H = (__pyx_v_x->dimensions[2]); /* "im2col_cython.pyx":17 * cdef int C = x.shape[1] * cdef int H = x.shape[2] * cdef int W = x.shape[3] # <<<<<<<<<<<<<< * * cdef int HH = (H + 2 * padding - field_height) / stride + 1 */ __pyx_v_W = (__pyx_v_x->dimensions[3]); /* "im2col_cython.pyx":19 * cdef int W = x.shape[3] * * cdef int HH = (H + 2 * padding - field_height) / stride + 1 # <<<<<<<<<<<<<< * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * */ __pyx_t_1 = ((__pyx_v_H + (2 * __pyx_v_padding)) - __pyx_v_field_height); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 19, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_1))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 19, __pyx_L1_error) } __pyx_v_HH = (__Pyx_div_long(__pyx_t_1, __pyx_v_stride) + 1); /* "im2col_cython.pyx":20 * * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 # <<<<<<<<<<<<<< * * cdef int p = padding */ __pyx_t_1 = ((__pyx_v_W + (2 * __pyx_v_padding)) - __pyx_v_field_width); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 20, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_1))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 20, __pyx_L1_error) } __pyx_v_WW = (__Pyx_div_long(__pyx_t_1, __pyx_v_stride) + 1); /* "im2col_cython.pyx":22 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * * cdef int p = padding # <<<<<<<<<<<<<< * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') */ __pyx_v_p = __pyx_v_padding; /* "im2col_cython.pyx":23 * * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, # <<<<<<<<<<<<<< * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_pad); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":24 * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') # <<<<<<<<<<<<<< * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( */ __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); __pyx_t_4 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_tuple__5); __Pyx_INCREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_tuple__5); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); __pyx_t_5 = 0; __pyx_t_6 = 0; /* "im2col_cython.pyx":23 * * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, # <<<<<<<<<<<<<< * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * */ __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(((PyObject *)__pyx_v_x)); __Pyx_GIVEREF(((PyObject *)__pyx_v_x)); PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_x)); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":24 * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') # <<<<<<<<<<<<<< * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( */ __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mode, __pyx_n_s_constant) < 0) __PYX_ERR(0, 24, __pyx_L1_error) /* "im2col_cython.pyx":23 * * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, # <<<<<<<<<<<<<< * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * */ __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 23, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) { __pyx_v_x_padded = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 23, __pyx_L1_error) } else {__pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; } } __pyx_t_7 = 0; __pyx_v_x_padded = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":26 * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( # <<<<<<<<<<<<<< * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) */ __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":27 * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( * (C * field_height * field_width, N * HH * WW), # <<<<<<<<<<<<<< * dtype=x.dtype) * */ __pyx_t_5 = __Pyx_PyInt_From_int(((__pyx_v_C * __pyx_v_field_height) * __pyx_v_field_width)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_N * __pyx_v_HH) * __pyx_v_WW)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6); __pyx_t_5 = 0; __pyx_t_6 = 0; /* "im2col_cython.pyx":26 * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( # <<<<<<<<<<<<<< * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) */ __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = 0; /* "im2col_cython.pyx":28 * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) # <<<<<<<<<<<<<< * * # Moving the inner loop to a C function with no bounds checking works, but does */ __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":26 * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( # <<<<<<<<<<<<<< * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) */ __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 26, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_cols = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 26, __pyx_L1_error) } else {__pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; } } __pyx_t_8 = 0; __pyx_v_cols = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":33 * # not seem to help performance in any measurable way. * * im2col_cython_inner(cols, x_padded, N, C, H, W, HH, WW, # <<<<<<<<<<<<<< * field_height, field_width, padding, stride) * return cols */ __pyx_t_9 = __pyx_fuse_0__pyx_f_13im2col_cython_im2col_cython_inner(((PyArrayObject *)__pyx_v_cols), ((PyArrayObject *)__pyx_v_x_padded), __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); if (unlikely(__pyx_t_9 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L1_error) /* "im2col_cython.pyx":35 * im2col_cython_inner(cols, x_padded, N, C, H, W, HH, WW, * field_height, field_width, padding, stride) * return cols # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_cols)); __pyx_r = ((PyObject *)__pyx_v_cols); goto __pyx_L0; /* "im2col_cython.pyx":12 * np.float64_t * * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, # <<<<<<<<<<<<<< * int field_width, int padding, int stride): * cdef int N = x.shape[0] */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.im2col_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_x_padded); __Pyx_XDECREF((PyObject *)__pyx_v_cols); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_fuse_1__pyx_pw_13im2col_cython_9im2col_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_fuse_1__pyx_mdef_13im2col_cython_9im2col_cython = {"__pyx_fuse_1im2col_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_13im2col_cython_9im2col_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_fuse_1__pyx_pw_13im2col_cython_9im2col_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_x = 0; int __pyx_v_field_height; int __pyx_v_field_width; int __pyx_v_padding; int __pyx_v_stride; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("im2col_cython (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_field_height,&__pyx_n_s_field_width,&__pyx_n_s_padding,&__pyx_n_s_stride,0}; PyObject* values[5] = {0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_height)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 1); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_width)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 2); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_padding)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 3); __PYX_ERR(0, 12, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, 4); __PYX_ERR(0, 12, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "im2col_cython") < 0)) __PYX_ERR(0, 12, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 5) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); } __pyx_v_x = ((PyArrayObject *)values[0]); __pyx_v_field_height = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_field_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) __pyx_v_field_width = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_field_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13, __pyx_L3_error) __pyx_v_padding = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_padding == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13, __pyx_L3_error) __pyx_v_stride = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_stride == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("im2col_cython", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 12, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.im2col_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_r = __pyx_pf_13im2col_cython_8im2col_cython(__pyx_self, __pyx_v_x, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_8im2col_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_x, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride) { int __pyx_v_N; int __pyx_v_C; int __pyx_v_H; int __pyx_v_W; int __pyx_v_HH; int __pyx_v_WW; int __pyx_v_p; PyArrayObject *__pyx_v_x_padded = 0; PyArrayObject *__pyx_v_cols = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x; __Pyx_Buffer __pyx_pybuffer_x; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations long __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyArrayObject *__pyx_t_7 = NULL; PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; __Pyx_RefNannySetupContext("__pyx_fuse_1im2col_cython", 0); __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x.pybuffer.buf = NULL; __pyx_pybuffer_x.refcount = 0; __pyx_pybuffernd_x.data = NULL; __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 12, __pyx_L1_error) } __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x.diminfo[1].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x.diminfo[1].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x.diminfo[2].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x.diminfo[2].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x.diminfo[3].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x.diminfo[3].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":14 * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, * int field_width, int padding, int stride): * cdef int N = x.shape[0] # <<<<<<<<<<<<<< * cdef int C = x.shape[1] * cdef int H = x.shape[2] */ __pyx_v_N = (__pyx_v_x->dimensions[0]); /* "im2col_cython.pyx":15 * int field_width, int padding, int stride): * cdef int N = x.shape[0] * cdef int C = x.shape[1] # <<<<<<<<<<<<<< * cdef int H = x.shape[2] * cdef int W = x.shape[3] */ __pyx_v_C = (__pyx_v_x->dimensions[1]); /* "im2col_cython.pyx":16 * cdef int N = x.shape[0] * cdef int C = x.shape[1] * cdef int H = x.shape[2] # <<<<<<<<<<<<<< * cdef int W = x.shape[3] * */ __pyx_v_H = (__pyx_v_x->dimensions[2]); /* "im2col_cython.pyx":17 * cdef int C = x.shape[1] * cdef int H = x.shape[2] * cdef int W = x.shape[3] # <<<<<<<<<<<<<< * * cdef int HH = (H + 2 * padding - field_height) / stride + 1 */ __pyx_v_W = (__pyx_v_x->dimensions[3]); /* "im2col_cython.pyx":19 * cdef int W = x.shape[3] * * cdef int HH = (H + 2 * padding - field_height) / stride + 1 # <<<<<<<<<<<<<< * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * */ __pyx_t_1 = ((__pyx_v_H + (2 * __pyx_v_padding)) - __pyx_v_field_height); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 19, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_1))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 19, __pyx_L1_error) } __pyx_v_HH = (__Pyx_div_long(__pyx_t_1, __pyx_v_stride) + 1); /* "im2col_cython.pyx":20 * * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 # <<<<<<<<<<<<<< * * cdef int p = padding */ __pyx_t_1 = ((__pyx_v_W + (2 * __pyx_v_padding)) - __pyx_v_field_width); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 20, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_1))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 20, __pyx_L1_error) } __pyx_v_WW = (__Pyx_div_long(__pyx_t_1, __pyx_v_stride) + 1); /* "im2col_cython.pyx":22 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * * cdef int p = padding # <<<<<<<<<<<<<< * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') */ __pyx_v_p = __pyx_v_padding; /* "im2col_cython.pyx":23 * * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, # <<<<<<<<<<<<<< * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_pad); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":24 * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') # <<<<<<<<<<<<<< * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( */ __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); __pyx_t_4 = 0; __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_tuple__5); __Pyx_INCREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_tuple__5); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); __pyx_t_5 = 0; __pyx_t_6 = 0; /* "im2col_cython.pyx":23 * * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, # <<<<<<<<<<<<<< * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * */ __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(((PyObject *)__pyx_v_x)); __Pyx_GIVEREF(((PyObject *)__pyx_v_x)); PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_x)); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":24 * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') # <<<<<<<<<<<<<< * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( */ __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_mode, __pyx_n_s_constant) < 0) __PYX_ERR(0, 24, __pyx_L1_error) /* "im2col_cython.pyx":23 * * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, # <<<<<<<<<<<<<< * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * */ __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 23, __pyx_L1_error) __pyx_t_7 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) { __pyx_v_x_padded = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 23, __pyx_L1_error) } else {__pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; } } __pyx_t_7 = 0; __pyx_v_x_padded = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":26 * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( # <<<<<<<<<<<<<< * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) */ __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":27 * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( * (C * field_height * field_width, N * HH * WW), # <<<<<<<<<<<<<< * dtype=x.dtype) * */ __pyx_t_5 = __Pyx_PyInt_From_int(((__pyx_v_C * __pyx_v_field_height) * __pyx_v_field_width)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_N * __pyx_v_HH) * __pyx_v_WW)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6); __pyx_t_5 = 0; __pyx_t_6 = 0; /* "im2col_cython.pyx":26 * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( # <<<<<<<<<<<<<< * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) */ __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = 0; /* "im2col_cython.pyx":28 * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) # <<<<<<<<<<<<<< * * # Moving the inner loop to a C function with no bounds checking works, but does */ __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_x), __pyx_n_s_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":26 * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( # <<<<<<<<<<<<<< * (C * field_height * field_width, N * HH * WW), * dtype=x.dtype) */ __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 26, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_cols = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 26, __pyx_L1_error) } else {__pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; } } __pyx_t_8 = 0; __pyx_v_cols = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; /* "im2col_cython.pyx":33 * # not seem to help performance in any measurable way. * * im2col_cython_inner(cols, x_padded, N, C, H, W, HH, WW, # <<<<<<<<<<<<<< * field_height, field_width, padding, stride) * return cols */ __pyx_t_9 = __pyx_fuse_1__pyx_f_13im2col_cython_im2col_cython_inner(((PyArrayObject *)__pyx_v_cols), ((PyArrayObject *)__pyx_v_x_padded), __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); if (unlikely(__pyx_t_9 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 33, __pyx_L1_error) /* "im2col_cython.pyx":35 * im2col_cython_inner(cols, x_padded, N, C, H, W, HH, WW, * field_height, field_width, padding, stride) * return cols # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_cols)); __pyx_r = ((PyObject *)__pyx_v_cols); goto __pyx_L0; /* "im2col_cython.pyx":12 * np.float64_t * * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, # <<<<<<<<<<<<<< * int field_width, int padding, int stride): * cdef int N = x.shape[0] */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.im2col_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_x_padded); __Pyx_XDECREF((PyObject *)__pyx_v_cols); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "im2col_cython.pyx":39 * * @cython.boundscheck(False) * cdef int im2col_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ static int __pyx_fuse_0__pyx_f_13im2col_cython_im2col_cython_inner(PyArrayObject *__pyx_v_cols, PyArrayObject *__pyx_v_x_padded, int __pyx_v_N, int __pyx_v_C, CYTHON_UNUSED int __pyx_v_H, CYTHON_UNUSED int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_field_height, int __pyx_v_field_width, CYTHON_UNUSED int __pyx_v_padding, int __pyx_v_stride) { int __pyx_v_c; int __pyx_v_ii; int __pyx_v_jj; int __pyx_v_row; int __pyx_v_yy; int __pyx_v_xx; int __pyx_v_i; int __pyx_v_col; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_t_11; int __pyx_t_12; int __pyx_t_13; int __pyx_t_14; int __pyx_t_15; int __pyx_t_16; int __pyx_t_17; int __pyx_t_18; Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; __Pyx_RefNannySetupContext("__pyx_fuse_0im2col_cython_inner", 0); __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 39, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_padded, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 39, __pyx_L1_error) } __pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":45 * cdef int c, ii, jj, row, yy, xx, i, col * * for c in range(C): # <<<<<<<<<<<<<< * for yy in range(HH): * for xx in range(WW): */ __pyx_t_1 = __pyx_v_C; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_c = __pyx_t_3; /* "im2col_cython.pyx":46 * * for c in range(C): * for yy in range(HH): # <<<<<<<<<<<<<< * for xx in range(WW): * for ii in range(field_height): */ __pyx_t_4 = __pyx_v_HH; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_yy = __pyx_t_6; /* "im2col_cython.pyx":47 * for c in range(C): * for yy in range(HH): * for xx in range(WW): # <<<<<<<<<<<<<< * for ii in range(field_height): * for jj in range(field_width): */ __pyx_t_7 = __pyx_v_WW; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_xx = __pyx_t_9; /* "im2col_cython.pyx":48 * for yy in range(HH): * for xx in range(WW): * for ii in range(field_height): # <<<<<<<<<<<<<< * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj */ __pyx_t_10 = __pyx_v_field_height; __pyx_t_11 = __pyx_t_10; for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_ii = __pyx_t_12; /* "im2col_cython.pyx":49 * for xx in range(WW): * for ii in range(field_height): * for jj in range(field_width): # <<<<<<<<<<<<<< * row = c * field_width * field_height + ii * field_height + jj * for i in range(N): */ __pyx_t_13 = __pyx_v_field_width; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_jj = __pyx_t_15; /* "im2col_cython.pyx":50 * for ii in range(field_height): * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj # <<<<<<<<<<<<<< * for i in range(N): * col = yy * WW * N + xx * N + i */ __pyx_v_row = ((((__pyx_v_c * __pyx_v_field_width) * __pyx_v_field_height) + (__pyx_v_ii * __pyx_v_field_height)) + __pyx_v_jj); /* "im2col_cython.pyx":51 * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj * for i in range(N): # <<<<<<<<<<<<<< * col = yy * WW * N + xx * N + i * cols[row, col] = x_padded[i, c, stride * yy + ii, stride * xx + jj] */ __pyx_t_16 = __pyx_v_N; __pyx_t_17 = __pyx_t_16; for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { __pyx_v_i = __pyx_t_18; /* "im2col_cython.pyx":52 * row = c * field_width * field_height + ii * field_height + jj * for i in range(N): * col = yy * WW * N + xx * N + i # <<<<<<<<<<<<<< * cols[row, col] = x_padded[i, c, stride * yy + ii, stride * xx + jj] * */ __pyx_v_col = ((((__pyx_v_yy * __pyx_v_WW) * __pyx_v_N) + (__pyx_v_xx * __pyx_v_N)) + __pyx_v_i); /* "im2col_cython.pyx":53 * for i in range(N): * col = yy * WW * N + xx * N + i * cols[row, col] = x_padded[i, c, stride * yy + ii, stride * xx + jj] # <<<<<<<<<<<<<< * * */ __pyx_t_19 = __pyx_v_i; __pyx_t_20 = __pyx_v_c; __pyx_t_21 = ((__pyx_v_stride * __pyx_v_yy) + __pyx_v_ii); __pyx_t_22 = ((__pyx_v_stride * __pyx_v_xx) + __pyx_v_jj); if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_pybuffernd_x_padded.diminfo[0].shape; if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_pybuffernd_x_padded.diminfo[1].shape; if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_pybuffernd_x_padded.diminfo[2].shape; if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_pybuffernd_x_padded.diminfo[3].shape; __pyx_t_23 = __pyx_v_row; __pyx_t_24 = __pyx_v_col; if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_cols.diminfo[0].shape; if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_pybuffernd_cols.diminfo[1].shape; *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_cols.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_cols.diminfo[1].strides) = (*__Pyx_BufPtrStrided4d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x_padded.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x_padded.diminfo[1].strides, __pyx_t_21, __pyx_pybuffernd_x_padded.diminfo[2].strides, __pyx_t_22, __pyx_pybuffernd_x_padded.diminfo[3].strides)); } } } } } } /* "im2col_cython.pyx":39 * * @cython.boundscheck(False) * cdef int im2col_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.im2col_cython_inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_fuse_1__pyx_f_13im2col_cython_im2col_cython_inner(PyArrayObject *__pyx_v_cols, PyArrayObject *__pyx_v_x_padded, int __pyx_v_N, int __pyx_v_C, CYTHON_UNUSED int __pyx_v_H, CYTHON_UNUSED int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_field_height, int __pyx_v_field_width, CYTHON_UNUSED int __pyx_v_padding, int __pyx_v_stride) { int __pyx_v_c; int __pyx_v_ii; int __pyx_v_jj; int __pyx_v_row; int __pyx_v_yy; int __pyx_v_xx; int __pyx_v_i; int __pyx_v_col; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_t_11; int __pyx_t_12; int __pyx_t_13; int __pyx_t_14; int __pyx_t_15; int __pyx_t_16; int __pyx_t_17; int __pyx_t_18; Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; __Pyx_RefNannySetupContext("__pyx_fuse_1im2col_cython_inner", 0); __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 39, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_padded, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 39, __pyx_L1_error) } __pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":45 * cdef int c, ii, jj, row, yy, xx, i, col * * for c in range(C): # <<<<<<<<<<<<<< * for yy in range(HH): * for xx in range(WW): */ __pyx_t_1 = __pyx_v_C; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_c = __pyx_t_3; /* "im2col_cython.pyx":46 * * for c in range(C): * for yy in range(HH): # <<<<<<<<<<<<<< * for xx in range(WW): * for ii in range(field_height): */ __pyx_t_4 = __pyx_v_HH; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_yy = __pyx_t_6; /* "im2col_cython.pyx":47 * for c in range(C): * for yy in range(HH): * for xx in range(WW): # <<<<<<<<<<<<<< * for ii in range(field_height): * for jj in range(field_width): */ __pyx_t_7 = __pyx_v_WW; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_xx = __pyx_t_9; /* "im2col_cython.pyx":48 * for yy in range(HH): * for xx in range(WW): * for ii in range(field_height): # <<<<<<<<<<<<<< * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj */ __pyx_t_10 = __pyx_v_field_height; __pyx_t_11 = __pyx_t_10; for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_ii = __pyx_t_12; /* "im2col_cython.pyx":49 * for xx in range(WW): * for ii in range(field_height): * for jj in range(field_width): # <<<<<<<<<<<<<< * row = c * field_width * field_height + ii * field_height + jj * for i in range(N): */ __pyx_t_13 = __pyx_v_field_width; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_jj = __pyx_t_15; /* "im2col_cython.pyx":50 * for ii in range(field_height): * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj # <<<<<<<<<<<<<< * for i in range(N): * col = yy * WW * N + xx * N + i */ __pyx_v_row = ((((__pyx_v_c * __pyx_v_field_width) * __pyx_v_field_height) + (__pyx_v_ii * __pyx_v_field_height)) + __pyx_v_jj); /* "im2col_cython.pyx":51 * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj * for i in range(N): # <<<<<<<<<<<<<< * col = yy * WW * N + xx * N + i * cols[row, col] = x_padded[i, c, stride * yy + ii, stride * xx + jj] */ __pyx_t_16 = __pyx_v_N; __pyx_t_17 = __pyx_t_16; for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { __pyx_v_i = __pyx_t_18; /* "im2col_cython.pyx":52 * row = c * field_width * field_height + ii * field_height + jj * for i in range(N): * col = yy * WW * N + xx * N + i # <<<<<<<<<<<<<< * cols[row, col] = x_padded[i, c, stride * yy + ii, stride * xx + jj] * */ __pyx_v_col = ((((__pyx_v_yy * __pyx_v_WW) * __pyx_v_N) + (__pyx_v_xx * __pyx_v_N)) + __pyx_v_i); /* "im2col_cython.pyx":53 * for i in range(N): * col = yy * WW * N + xx * N + i * cols[row, col] = x_padded[i, c, stride * yy + ii, stride * xx + jj] # <<<<<<<<<<<<<< * * */ __pyx_t_19 = __pyx_v_i; __pyx_t_20 = __pyx_v_c; __pyx_t_21 = ((__pyx_v_stride * __pyx_v_yy) + __pyx_v_ii); __pyx_t_22 = ((__pyx_v_stride * __pyx_v_xx) + __pyx_v_jj); if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_pybuffernd_x_padded.diminfo[0].shape; if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_pybuffernd_x_padded.diminfo[1].shape; if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_pybuffernd_x_padded.diminfo[2].shape; if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_pybuffernd_x_padded.diminfo[3].shape; __pyx_t_23 = __pyx_v_row; __pyx_t_24 = __pyx_v_col; if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_cols.diminfo[0].shape; if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_pybuffernd_cols.diminfo[1].shape; *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_cols.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_cols.diminfo[1].strides) = (*__Pyx_BufPtrStrided4d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_x_padded.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_x_padded.diminfo[1].strides, __pyx_t_21, __pyx_pybuffernd_x_padded.diminfo[2].strides, __pyx_t_22, __pyx_pybuffernd_x_padded.diminfo[3].strides)); } } } } } } /* "im2col_cython.pyx":39 * * @cython.boundscheck(False) * cdef int im2col_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.im2col_cython_inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "im2col_cython.pyx":57 * * * def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ /* Python wrapper */ static PyObject *__pyx_pw_13im2col_cython_3col2im_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_13im2col_cython_3col2im_cython = {"col2im_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13im2col_cython_3col2im_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_13im2col_cython_3col2im_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_signatures = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; CYTHON_UNUSED PyObject *__pyx_v_defaults = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0}; PyObject* values[4] = {0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 57, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 57, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); } __pyx_v_signatures = values[0]; __pyx_v_args = values[1]; __pyx_v_kwargs = values[2]; __pyx_v_defaults = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 57, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_13im2col_cython_2col2im_cython(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_2col2im_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) { PyObject *__pyx_v_dest_sig = NULL; Py_ssize_t __pyx_v_i; PyTypeObject *__pyx_v_ndarray = 0; __Pyx_memviewslice __pyx_v_memslice; Py_ssize_t __pyx_v_itemsize; CYTHON_UNUSED int __pyx_v_dtype_signed; char __pyx_v_kind; PyObject *__pyx_v_arg = NULL; PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_arg_base = NULL; PyObject *__pyx_v_candidates = NULL; PyObject *__pyx_v_sig = NULL; int __pyx_v_match_found; PyObject *__pyx_v_src_sig = NULL; PyObject *__pyx_v_dst_type = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; Py_ssize_t __pyx_t_5; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; __Pyx_memviewslice __pyx_t_8; Py_ssize_t __pyx_t_9; int __pyx_t_10; int __pyx_t_11; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; int __pyx_t_18; __Pyx_RefNannySetupContext("col2im_cython", 0); __Pyx_INCREF(__pyx_v_kwargs); __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); PyList_SET_ITEM(__pyx_t_1, 0, Py_None); __pyx_v_dest_sig = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_v_kwargs != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_t_3 = ((!__pyx_t_4) != 0); __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None); } __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1); __pyx_t_1 = 0; __pyx_v_itemsize = -1L; if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_t_2 = ((0 < __pyx_t_5) != 0); if (__pyx_t_2) { if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_1 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_v_args), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_arg = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6; } __pyx_t_3 = (__pyx_v_kwargs != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L7_bool_binop_done; } if (unlikely(__pyx_v_kwargs == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_cols, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_t_3 = (__pyx_t_4 != 0); __pyx_t_2 = __pyx_t_3; __pyx_L7_bool_binop_done:; if (__pyx_t_2) { if (unlikely(__pyx_v_kwargs == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_cols); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_arg = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6; } /*else*/ { if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_int_9); __Pyx_GIVEREF(__pyx_int_9); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_9); __Pyx_INCREF(__pyx_n_s_s); __Pyx_GIVEREF(__pyx_n_s_s); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_L6:; while (1) { __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_dtype = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L12; } __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_arg_base = __pyx_t_6; __pyx_t_6 = 0; __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_dtype = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L13; } /*else*/ { __Pyx_INCREF(Py_None); __pyx_v_dtype = Py_None; } __pyx_L13:; goto __pyx_L12; } /*else*/ { __Pyx_INCREF(Py_None); __pyx_v_dtype = Py_None; } __pyx_L12:; __pyx_v_itemsize = -1L; __pyx_t_2 = (__pyx_v_dtype != Py_None); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_itemsize = __pyx_t_5; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_kind = __pyx_t_7; __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); switch (__pyx_v_kind) { case 'i': case 'u': break; case 'f': __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0); if (__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L16_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L16_bool_binop_done:; if (__pyx_t_3) { if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 57, __pyx_L1_error) goto __pyx_L10_break; } __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0); if (__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L19_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 2) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L19_bool_binop_done:; if (__pyx_t_3) { if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 57, __pyx_L1_error) goto __pyx_L10_break; } break; case 'c': break; case 'O': break; default: break; } } } __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L22_bool_binop_done; } __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L22_bool_binop_done:; if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); __pyx_v_memslice = __pyx_t_8; __pyx_t_3 = (__pyx_v_memslice.memview != 0); if (__pyx_t_3) { __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 57, __pyx_L1_error) goto __pyx_L10_break; } /*else*/ { PyErr_Clear(); } } __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L26_bool_binop_done; } __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L26_bool_binop_done:; if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); __pyx_v_memslice = __pyx_t_8; __pyx_t_3 = (__pyx_v_memslice.memview != 0); if (__pyx_t_3) { __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 57, __pyx_L1_error) goto __pyx_L10_break; } /*else*/ { PyErr_Clear(); } } if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 57, __pyx_L1_error) goto __pyx_L10_break; } __pyx_L10_break:; __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_candidates = ((PyObject*)__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = 0; if (unlikely(__pyx_v_signatures == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = __pyx_t_1; __pyx_t_1 = 0; while (1) { __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10); if (unlikely(__pyx_t_11 == 0)) break; if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1); __pyx_t_1 = 0; __pyx_v_match_found = 0; __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_14)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_14); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); } } __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_); __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_12)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); } } __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_t_16 = __pyx_t_15; for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { __pyx_v_i = __pyx_t_17; __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_dest_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_v_dst_type != Py_None); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (__pyx_t_2) { __pyx_v_match_found = 1; goto __pyx_L34; } /*else*/ { __pyx_v_match_found = 0; goto __pyx_L32_break; } __pyx_L34:; } } __pyx_L32_break:; __pyx_t_2 = (__pyx_v_match_found != 0); if (__pyx_t_2) { __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 57, __pyx_L1_error) } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0); __pyx_t_3 = ((!__pyx_t_2) != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_t_3 = ((__pyx_t_9 > 1) != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 57, __pyx_L1_error) } /*else*/ { __Pyx_XDECREF(__pyx_r); if (unlikely(__pyx_v_signatures == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_candidates, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_13 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), __pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_r = __pyx_t_13; __pyx_t_13 = 0; goto __pyx_L0; } /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_AddTraceback("im2col_cython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dest_sig); __Pyx_XDECREF(__pyx_v_ndarray); __Pyx_XDECREF(__pyx_v_arg); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_arg_base); __Pyx_XDECREF(__pyx_v_candidates); __Pyx_XDECREF(__pyx_v_sig); __Pyx_XDECREF(__pyx_v_src_sig); __Pyx_XDECREF(__pyx_v_dst_type); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_fuse_0__pyx_pw_13im2col_cython_13col2im_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_fuse_0__pyx_mdef_13im2col_cython_13col2im_cython = {"__pyx_fuse_0col2im_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_13im2col_cython_13col2im_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_fuse_0__pyx_pw_13im2col_cython_13col2im_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_cols = 0; int __pyx_v_N; int __pyx_v_C; int __pyx_v_H; int __pyx_v_W; int __pyx_v_field_height; int __pyx_v_field_width; int __pyx_v_padding; int __pyx_v_stride; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("col2im_cython (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cols,&__pyx_n_s_N,&__pyx_n_s_C,&__pyx_n_s_H,&__pyx_n_s_W,&__pyx_n_s_field_height,&__pyx_n_s_field_width,&__pyx_n_s_padding,&__pyx_n_s_stride,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 1); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 2); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 3); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 4); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 5: if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_height)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 5); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 6: if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_width)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 6); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 7: if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_padding)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 7); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 8: if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 8); __PYX_ERR(0, 57, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "col2im_cython") < 0)) __PYX_ERR(0, 57, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[5] = PyTuple_GET_ITEM(__pyx_args, 5); values[6] = PyTuple_GET_ITEM(__pyx_args, 6); values[7] = PyTuple_GET_ITEM(__pyx_args, 7); values[8] = PyTuple_GET_ITEM(__pyx_args, 8); } __pyx_v_cols = ((PyArrayObject *)values[0]); __pyx_v_N = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_C = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_C == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_H = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_H == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_W = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_W == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_field_height = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_field_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) __pyx_v_field_width = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_field_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) __pyx_v_padding = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_padding == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) __pyx_v_stride = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_stride == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 57, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.col2im_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cols), __pyx_ptype_5numpy_ndarray, 1, "cols", 0))) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_r = __pyx_pf_13im2col_cython_12col2im_cython(__pyx_self, __pyx_v_cols, __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_12col2im_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride) { CYTHON_UNUSED PyArrayObject *__pyx_v_x = 0; int __pyx_v_HH; int __pyx_v_WW; PyArrayObject *__pyx_v_x_padded = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; int __pyx_t_10; __Pyx_RefNannySetupContext("__pyx_fuse_0col2im_cython", 0); __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; /* "im2col_cython.pyx":59 * def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) # <<<<<<<<<<<<<< * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_H); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_W); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 59, __pyx_L1_error) __pyx_v_x = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "im2col_cython.pyx":60 * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int HH = (H + 2 * padding - field_height) / stride + 1 # <<<<<<<<<<<<<< * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), */ __pyx_t_7 = ((__pyx_v_H + (2 * __pyx_v_padding)) - __pyx_v_field_height); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 60, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 60, __pyx_L1_error) } __pyx_v_HH = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":61 * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 # <<<<<<<<<<<<<< * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), * dtype=cols.dtype) */ __pyx_t_7 = ((__pyx_v_W + (2 * __pyx_v_padding)) - __pyx_v_field_width); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 61, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 61, __pyx_L1_error) } __pyx_v_WW = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":62 * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_H + (2 * __pyx_v_padding))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_W + (2 * __pyx_v_padding))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = 0; /* "im2col_cython.pyx":63 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), * dtype=cols.dtype) # <<<<<<<<<<<<<< * * # Moving the inner loop to a C-function with no bounds checking improves */ __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":62 * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 62, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) { __pyx_v_x_padded = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 62, __pyx_L1_error) } else {__pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; } } __pyx_t_8 = 0; __pyx_v_x_padded = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":67 * # Moving the inner loop to a C-function with no bounds checking improves * # performance quite a bit for col2im. * col2im_cython_inner(cols, x_padded, N, C, H, W, HH, WW, # <<<<<<<<<<<<<< * field_height, field_width, padding, stride) * if padding > 0: */ __pyx_t_9 = __pyx_fuse_0__pyx_f_13im2col_cython_col2im_cython_inner(((PyArrayObject *)__pyx_v_cols), ((PyArrayObject *)__pyx_v_x_padded), __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); if (unlikely(__pyx_t_9 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L1_error) /* "im2col_cython.pyx":69 * col2im_cython_inner(cols, x_padded, N, C, H, W, HH, WW, * field_height, field_width, padding, stride) * if padding > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, padding:-padding, padding:-padding] * return x_padded */ __pyx_t_10 = ((__pyx_v_padding > 0) != 0); if (__pyx_t_10) { /* "im2col_cython.pyx":70 * field_height, field_width, padding, stride) * if padding > 0: * return x_padded[:, :, padding:-padding, padding:-padding] # <<<<<<<<<<<<<< * return x_padded * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_padding); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyInt_From_int((-__pyx_v_padding)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySlice_New(__pyx_t_2, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_padding); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_int((-__pyx_v_padding)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySlice_New(__pyx_t_1, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_slice__6); __Pyx_GIVEREF(__pyx_slice__6); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__6); __Pyx_INCREF(__pyx_slice__7); __Pyx_GIVEREF(__pyx_slice__7); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_slice__7); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); __pyx_t_3 = 0; __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_x_padded), __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; /* "im2col_cython.pyx":69 * col2im_cython_inner(cols, x_padded, N, C, H, W, HH, WW, * field_height, field_width, padding, stride) * if padding > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, padding:-padding, padding:-padding] * return x_padded */ } /* "im2col_cython.pyx":71 * if padding > 0: * return x_padded[:, :, padding:-padding, padding:-padding] * return x_padded # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_x_padded)); __pyx_r = ((PyObject *)__pyx_v_x_padded); goto __pyx_L0; /* "im2col_cython.pyx":57 * * * def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_x); __Pyx_XDECREF((PyObject *)__pyx_v_x_padded); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_fuse_1__pyx_pw_13im2col_cython_15col2im_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_fuse_1__pyx_mdef_13im2col_cython_15col2im_cython = {"__pyx_fuse_1col2im_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_13im2col_cython_15col2im_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_fuse_1__pyx_pw_13im2col_cython_15col2im_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_cols = 0; int __pyx_v_N; int __pyx_v_C; int __pyx_v_H; int __pyx_v_W; int __pyx_v_field_height; int __pyx_v_field_width; int __pyx_v_padding; int __pyx_v_stride; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("col2im_cython (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cols,&__pyx_n_s_N,&__pyx_n_s_C,&__pyx_n_s_H,&__pyx_n_s_W,&__pyx_n_s_field_height,&__pyx_n_s_field_width,&__pyx_n_s_padding,&__pyx_n_s_stride,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 1); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 2); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 3); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 4); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 5: if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_height)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 5); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 6: if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_field_width)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 6); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 7: if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_padding)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 7); __PYX_ERR(0, 57, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 8: if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, 8); __PYX_ERR(0, 57, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "col2im_cython") < 0)) __PYX_ERR(0, 57, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[5] = PyTuple_GET_ITEM(__pyx_args, 5); values[6] = PyTuple_GET_ITEM(__pyx_args, 6); values[7] = PyTuple_GET_ITEM(__pyx_args, 7); values[8] = PyTuple_GET_ITEM(__pyx_args, 8); } __pyx_v_cols = ((PyArrayObject *)values[0]); __pyx_v_N = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_C = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_C == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_H = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_H == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_W = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_W == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 57, __pyx_L3_error) __pyx_v_field_height = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_field_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) __pyx_v_field_width = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_field_width == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) __pyx_v_padding = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_padding == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) __pyx_v_stride = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_stride == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("col2im_cython", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 57, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.col2im_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cols), __pyx_ptype_5numpy_ndarray, 1, "cols", 0))) __PYX_ERR(0, 57, __pyx_L1_error) __pyx_r = __pyx_pf_13im2col_cython_14col2im_cython(__pyx_self, __pyx_v_cols, __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_14col2im_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_field_height, int __pyx_v_field_width, int __pyx_v_padding, int __pyx_v_stride) { CYTHON_UNUSED PyArrayObject *__pyx_v_x = 0; int __pyx_v_HH; int __pyx_v_WW; PyArrayObject *__pyx_v_x_padded = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; int __pyx_t_10; __Pyx_RefNannySetupContext("__pyx_fuse_1col2im_cython", 0); __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; /* "im2col_cython.pyx":59 * def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) # <<<<<<<<<<<<<< * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_H); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_W); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 59, __pyx_L1_error) __pyx_v_x = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "im2col_cython.pyx":60 * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int HH = (H + 2 * padding - field_height) / stride + 1 # <<<<<<<<<<<<<< * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), */ __pyx_t_7 = ((__pyx_v_H + (2 * __pyx_v_padding)) - __pyx_v_field_height); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 60, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 60, __pyx_L1_error) } __pyx_v_HH = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":61 * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 # <<<<<<<<<<<<<< * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), * dtype=cols.dtype) */ __pyx_t_7 = ((__pyx_v_W + (2 * __pyx_v_padding)) - __pyx_v_field_width); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 61, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 61, __pyx_L1_error) } __pyx_v_WW = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":62 * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_H + (2 * __pyx_v_padding))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_W + (2 * __pyx_v_padding))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = 0; /* "im2col_cython.pyx":63 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), * dtype=cols.dtype) # <<<<<<<<<<<<<< * * # Moving the inner loop to a C-function with no bounds checking improves */ __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":62 * cdef int HH = (H + 2 * padding - field_height) / stride + 1 * cdef int WW = (W + 2 * padding - field_width) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 62, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) { __pyx_v_x_padded = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 62, __pyx_L1_error) } else {__pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; } } __pyx_t_8 = 0; __pyx_v_x_padded = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":67 * # Moving the inner loop to a C-function with no bounds checking improves * # performance quite a bit for col2im. * col2im_cython_inner(cols, x_padded, N, C, H, W, HH, WW, # <<<<<<<<<<<<<< * field_height, field_width, padding, stride) * if padding > 0: */ __pyx_t_9 = __pyx_fuse_1__pyx_f_13im2col_cython_col2im_cython_inner(((PyArrayObject *)__pyx_v_cols), ((PyArrayObject *)__pyx_v_x_padded), __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_field_height, __pyx_v_field_width, __pyx_v_padding, __pyx_v_stride); if (unlikely(__pyx_t_9 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L1_error) /* "im2col_cython.pyx":69 * col2im_cython_inner(cols, x_padded, N, C, H, W, HH, WW, * field_height, field_width, padding, stride) * if padding > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, padding:-padding, padding:-padding] * return x_padded */ __pyx_t_10 = ((__pyx_v_padding > 0) != 0); if (__pyx_t_10) { /* "im2col_cython.pyx":70 * field_height, field_width, padding, stride) * if padding > 0: * return x_padded[:, :, padding:-padding, padding:-padding] # <<<<<<<<<<<<<< * return x_padded * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_padding); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyInt_From_int((-__pyx_v_padding)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySlice_New(__pyx_t_2, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_padding); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_int((-__pyx_v_padding)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySlice_New(__pyx_t_1, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_slice__8); __Pyx_GIVEREF(__pyx_slice__8); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8); __Pyx_INCREF(__pyx_slice__9); __Pyx_GIVEREF(__pyx_slice__9); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_slice__9); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); __pyx_t_3 = 0; __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_x_padded), __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; /* "im2col_cython.pyx":69 * col2im_cython_inner(cols, x_padded, N, C, H, W, HH, WW, * field_height, field_width, padding, stride) * if padding > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, padding:-padding, padding:-padding] * return x_padded */ } /* "im2col_cython.pyx":71 * if padding > 0: * return x_padded[:, :, padding:-padding, padding:-padding] * return x_padded # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_x_padded)); __pyx_r = ((PyObject *)__pyx_v_x_padded); goto __pyx_L0; /* "im2col_cython.pyx":57 * * * def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_x); __Pyx_XDECREF((PyObject *)__pyx_v_x_padded); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "im2col_cython.pyx":75 * * @cython.boundscheck(False) * cdef int col2im_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ static int __pyx_fuse_0__pyx_f_13im2col_cython_col2im_cython_inner(PyArrayObject *__pyx_v_cols, PyArrayObject *__pyx_v_x_padded, int __pyx_v_N, int __pyx_v_C, CYTHON_UNUSED int __pyx_v_H, CYTHON_UNUSED int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_field_height, int __pyx_v_field_width, CYTHON_UNUSED int __pyx_v_padding, int __pyx_v_stride) { int __pyx_v_c; int __pyx_v_ii; int __pyx_v_jj; int __pyx_v_row; int __pyx_v_yy; int __pyx_v_xx; int __pyx_v_i; int __pyx_v_col; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_t_11; int __pyx_t_12; int __pyx_t_13; int __pyx_t_14; int __pyx_t_15; int __pyx_t_16; int __pyx_t_17; int __pyx_t_18; Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; __Pyx_RefNannySetupContext("__pyx_fuse_0col2im_cython_inner", 0); __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 75, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_padded, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 75, __pyx_L1_error) } __pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":81 * cdef int c, ii, jj, row, yy, xx, i, col * * for c in range(C): # <<<<<<<<<<<<<< * for ii in range(field_height): * for jj in range(field_width): */ __pyx_t_1 = __pyx_v_C; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_c = __pyx_t_3; /* "im2col_cython.pyx":82 * * for c in range(C): * for ii in range(field_height): # <<<<<<<<<<<<<< * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj */ __pyx_t_4 = __pyx_v_field_height; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_ii = __pyx_t_6; /* "im2col_cython.pyx":83 * for c in range(C): * for ii in range(field_height): * for jj in range(field_width): # <<<<<<<<<<<<<< * row = c * field_width * field_height + ii * field_height + jj * for yy in range(HH): */ __pyx_t_7 = __pyx_v_field_width; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_jj = __pyx_t_9; /* "im2col_cython.pyx":84 * for ii in range(field_height): * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj # <<<<<<<<<<<<<< * for yy in range(HH): * for xx in range(WW): */ __pyx_v_row = ((((__pyx_v_c * __pyx_v_field_width) * __pyx_v_field_height) + (__pyx_v_ii * __pyx_v_field_height)) + __pyx_v_jj); /* "im2col_cython.pyx":85 * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj * for yy in range(HH): # <<<<<<<<<<<<<< * for xx in range(WW): * for i in range(N): */ __pyx_t_10 = __pyx_v_HH; __pyx_t_11 = __pyx_t_10; for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_yy = __pyx_t_12; /* "im2col_cython.pyx":86 * row = c * field_width * field_height + ii * field_height + jj * for yy in range(HH): * for xx in range(WW): # <<<<<<<<<<<<<< * for i in range(N): * col = yy * WW * N + xx * N + i */ __pyx_t_13 = __pyx_v_WW; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_xx = __pyx_t_15; /* "im2col_cython.pyx":87 * for yy in range(HH): * for xx in range(WW): * for i in range(N): # <<<<<<<<<<<<<< * col = yy * WW * N + xx * N + i * x_padded[i, c, stride * yy + ii, stride * xx + jj] += cols[row, col] */ __pyx_t_16 = __pyx_v_N; __pyx_t_17 = __pyx_t_16; for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { __pyx_v_i = __pyx_t_18; /* "im2col_cython.pyx":88 * for xx in range(WW): * for i in range(N): * col = yy * WW * N + xx * N + i # <<<<<<<<<<<<<< * x_padded[i, c, stride * yy + ii, stride * xx + jj] += cols[row, col] * */ __pyx_v_col = ((((__pyx_v_yy * __pyx_v_WW) * __pyx_v_N) + (__pyx_v_xx * __pyx_v_N)) + __pyx_v_i); /* "im2col_cython.pyx":89 * for i in range(N): * col = yy * WW * N + xx * N + i * x_padded[i, c, stride * yy + ii, stride * xx + jj] += cols[row, col] # <<<<<<<<<<<<<< * * */ __pyx_t_19 = __pyx_v_row; __pyx_t_20 = __pyx_v_col; if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_pybuffernd_cols.diminfo[0].shape; if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_pybuffernd_cols.diminfo[1].shape; __pyx_t_21 = __pyx_v_i; __pyx_t_22 = __pyx_v_c; __pyx_t_23 = ((__pyx_v_stride * __pyx_v_yy) + __pyx_v_ii); __pyx_t_24 = ((__pyx_v_stride * __pyx_v_xx) + __pyx_v_jj); if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_pybuffernd_x_padded.diminfo[0].shape; if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_pybuffernd_x_padded.diminfo[1].shape; if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_x_padded.diminfo[2].shape; if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_pybuffernd_x_padded.diminfo[3].shape; *__Pyx_BufPtrStrided4d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x_padded.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x_padded.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_x_padded.diminfo[2].strides, __pyx_t_24, __pyx_pybuffernd_x_padded.diminfo[3].strides) += (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_cols.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_cols.diminfo[1].strides)); } } } } } } /* "im2col_cython.pyx":75 * * @cython.boundscheck(False) * cdef int col2im_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_cython_inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_fuse_1__pyx_f_13im2col_cython_col2im_cython_inner(PyArrayObject *__pyx_v_cols, PyArrayObject *__pyx_v_x_padded, int __pyx_v_N, int __pyx_v_C, CYTHON_UNUSED int __pyx_v_H, CYTHON_UNUSED int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_field_height, int __pyx_v_field_width, CYTHON_UNUSED int __pyx_v_padding, int __pyx_v_stride) { int __pyx_v_c; int __pyx_v_ii; int __pyx_v_jj; int __pyx_v_row; int __pyx_v_yy; int __pyx_v_xx; int __pyx_v_i; int __pyx_v_col; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_t_11; int __pyx_t_12; int __pyx_t_13; int __pyx_t_14; int __pyx_t_15; int __pyx_t_16; int __pyx_t_17; int __pyx_t_18; Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; __Pyx_RefNannySetupContext("__pyx_fuse_1col2im_cython_inner", 0); __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 75, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_padded, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 75, __pyx_L1_error) } __pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":81 * cdef int c, ii, jj, row, yy, xx, i, col * * for c in range(C): # <<<<<<<<<<<<<< * for ii in range(field_height): * for jj in range(field_width): */ __pyx_t_1 = __pyx_v_C; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_c = __pyx_t_3; /* "im2col_cython.pyx":82 * * for c in range(C): * for ii in range(field_height): # <<<<<<<<<<<<<< * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj */ __pyx_t_4 = __pyx_v_field_height; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_ii = __pyx_t_6; /* "im2col_cython.pyx":83 * for c in range(C): * for ii in range(field_height): * for jj in range(field_width): # <<<<<<<<<<<<<< * row = c * field_width * field_height + ii * field_height + jj * for yy in range(HH): */ __pyx_t_7 = __pyx_v_field_width; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_jj = __pyx_t_9; /* "im2col_cython.pyx":84 * for ii in range(field_height): * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj # <<<<<<<<<<<<<< * for yy in range(HH): * for xx in range(WW): */ __pyx_v_row = ((((__pyx_v_c * __pyx_v_field_width) * __pyx_v_field_height) + (__pyx_v_ii * __pyx_v_field_height)) + __pyx_v_jj); /* "im2col_cython.pyx":85 * for jj in range(field_width): * row = c * field_width * field_height + ii * field_height + jj * for yy in range(HH): # <<<<<<<<<<<<<< * for xx in range(WW): * for i in range(N): */ __pyx_t_10 = __pyx_v_HH; __pyx_t_11 = __pyx_t_10; for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_yy = __pyx_t_12; /* "im2col_cython.pyx":86 * row = c * field_width * field_height + ii * field_height + jj * for yy in range(HH): * for xx in range(WW): # <<<<<<<<<<<<<< * for i in range(N): * col = yy * WW * N + xx * N + i */ __pyx_t_13 = __pyx_v_WW; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_xx = __pyx_t_15; /* "im2col_cython.pyx":87 * for yy in range(HH): * for xx in range(WW): * for i in range(N): # <<<<<<<<<<<<<< * col = yy * WW * N + xx * N + i * x_padded[i, c, stride * yy + ii, stride * xx + jj] += cols[row, col] */ __pyx_t_16 = __pyx_v_N; __pyx_t_17 = __pyx_t_16; for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { __pyx_v_i = __pyx_t_18; /* "im2col_cython.pyx":88 * for xx in range(WW): * for i in range(N): * col = yy * WW * N + xx * N + i # <<<<<<<<<<<<<< * x_padded[i, c, stride * yy + ii, stride * xx + jj] += cols[row, col] * */ __pyx_v_col = ((((__pyx_v_yy * __pyx_v_WW) * __pyx_v_N) + (__pyx_v_xx * __pyx_v_N)) + __pyx_v_i); /* "im2col_cython.pyx":89 * for i in range(N): * col = yy * WW * N + xx * N + i * x_padded[i, c, stride * yy + ii, stride * xx + jj] += cols[row, col] # <<<<<<<<<<<<<< * * */ __pyx_t_19 = __pyx_v_row; __pyx_t_20 = __pyx_v_col; if (__pyx_t_19 < 0) __pyx_t_19 += __pyx_pybuffernd_cols.diminfo[0].shape; if (__pyx_t_20 < 0) __pyx_t_20 += __pyx_pybuffernd_cols.diminfo[1].shape; __pyx_t_21 = __pyx_v_i; __pyx_t_22 = __pyx_v_c; __pyx_t_23 = ((__pyx_v_stride * __pyx_v_yy) + __pyx_v_ii); __pyx_t_24 = ((__pyx_v_stride * __pyx_v_xx) + __pyx_v_jj); if (__pyx_t_21 < 0) __pyx_t_21 += __pyx_pybuffernd_x_padded.diminfo[0].shape; if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_pybuffernd_x_padded.diminfo[1].shape; if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_x_padded.diminfo[2].shape; if (__pyx_t_24 < 0) __pyx_t_24 += __pyx_pybuffernd_x_padded.diminfo[3].shape; *__Pyx_BufPtrStrided4d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_x_padded.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_x_padded.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_x_padded.diminfo[2].strides, __pyx_t_24, __pyx_pybuffernd_x_padded.diminfo[3].strides) += (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_cols.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_cols.diminfo[1].strides)); } } } } } } /* "im2col_cython.pyx":75 * * @cython.boundscheck(False) * cdef int col2im_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_cython_inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "im2col_cython.pyx":94 * @cython.boundscheck(False) * @cython.wraparound(False) * cdef col2im_6d_cython_inner(np.ndarray[DTYPE_t, ndim=6] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ static PyObject *__pyx_fuse_0__pyx_f_13im2col_cython_col2im_6d_cython_inner(PyArrayObject *__pyx_v_cols, PyArrayObject *__pyx_v_x_padded, int __pyx_v_N, int __pyx_v_C, CYTHON_UNUSED int __pyx_v_H, CYTHON_UNUSED int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_out_h, int __pyx_v_out_w, CYTHON_UNUSED int __pyx_v_pad, int __pyx_v_stride) { int __pyx_v_c; int __pyx_v_hh; int __pyx_v_ww; int __pyx_v_n; int __pyx_v_h; int __pyx_v_w; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_t_11; int __pyx_t_12; int __pyx_t_13; int __pyx_t_14; int __pyx_t_15; int __pyx_t_16; int __pyx_t_17; int __pyx_t_18; Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; Py_ssize_t __pyx_t_25; Py_ssize_t __pyx_t_26; Py_ssize_t __pyx_t_27; Py_ssize_t __pyx_t_28; __Pyx_RefNannySetupContext("__pyx_fuse_0col2im_6d_cython_inner", 0); __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 6, 0, __pyx_stack) == -1)) __PYX_ERR(0, 94, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_cols.diminfo[2].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_cols.diminfo[2].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_cols.diminfo[3].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_cols.diminfo[3].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[3]; __pyx_pybuffernd_cols.diminfo[4].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[4]; __pyx_pybuffernd_cols.diminfo[4].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[4]; __pyx_pybuffernd_cols.diminfo[5].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[5]; __pyx_pybuffernd_cols.diminfo[5].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[5]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_padded, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 94, __pyx_L1_error) } __pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":100 * * cdef int c, hh, ww, n, h, w * for n in range(N): # <<<<<<<<<<<<<< * for c in range(C): * for hh in range(HH): */ __pyx_t_1 = __pyx_v_N; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_n = __pyx_t_3; /* "im2col_cython.pyx":101 * cdef int c, hh, ww, n, h, w * for n in range(N): * for c in range(C): # <<<<<<<<<<<<<< * for hh in range(HH): * for ww in range(WW): */ __pyx_t_4 = __pyx_v_C; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_c = __pyx_t_6; /* "im2col_cython.pyx":102 * for n in range(N): * for c in range(C): * for hh in range(HH): # <<<<<<<<<<<<<< * for ww in range(WW): * for h in range(out_h): */ __pyx_t_7 = __pyx_v_HH; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_hh = __pyx_t_9; /* "im2col_cython.pyx":103 * for c in range(C): * for hh in range(HH): * for ww in range(WW): # <<<<<<<<<<<<<< * for h in range(out_h): * for w in range(out_w): */ __pyx_t_10 = __pyx_v_WW; __pyx_t_11 = __pyx_t_10; for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_ww = __pyx_t_12; /* "im2col_cython.pyx":104 * for hh in range(HH): * for ww in range(WW): * for h in range(out_h): # <<<<<<<<<<<<<< * for w in range(out_w): * x_padded[n, c, stride * h + hh, stride * w + ww] += cols[c, hh, ww, n, h, w] */ __pyx_t_13 = __pyx_v_out_h; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_h = __pyx_t_15; /* "im2col_cython.pyx":105 * for ww in range(WW): * for h in range(out_h): * for w in range(out_w): # <<<<<<<<<<<<<< * x_padded[n, c, stride * h + hh, stride * w + ww] += cols[c, hh, ww, n, h, w] * */ __pyx_t_16 = __pyx_v_out_w; __pyx_t_17 = __pyx_t_16; for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { __pyx_v_w = __pyx_t_18; /* "im2col_cython.pyx":106 * for h in range(out_h): * for w in range(out_w): * x_padded[n, c, stride * h + hh, stride * w + ww] += cols[c, hh, ww, n, h, w] # <<<<<<<<<<<<<< * * */ __pyx_t_19 = __pyx_v_c; __pyx_t_20 = __pyx_v_hh; __pyx_t_21 = __pyx_v_ww; __pyx_t_22 = __pyx_v_n; __pyx_t_23 = __pyx_v_h; __pyx_t_24 = __pyx_v_w; __pyx_t_25 = __pyx_v_n; __pyx_t_26 = __pyx_v_c; __pyx_t_27 = ((__pyx_v_stride * __pyx_v_h) + __pyx_v_hh); __pyx_t_28 = ((__pyx_v_stride * __pyx_v_w) + __pyx_v_ww); *__Pyx_BufPtrStrided4d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_x_padded.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_x_padded.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_x_padded.diminfo[2].strides, __pyx_t_28, __pyx_pybuffernd_x_padded.diminfo[3].strides) += (*__Pyx_BufPtrStrided6d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_cols.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_cols.diminfo[1].strides, __pyx_t_21, __pyx_pybuffernd_cols.diminfo[2].strides, __pyx_t_22, __pyx_pybuffernd_cols.diminfo[3].strides, __pyx_t_23, __pyx_pybuffernd_cols.diminfo[4].strides, __pyx_t_24, __pyx_pybuffernd_cols.diminfo[5].strides)); } } } } } } /* "im2col_cython.pyx":94 * @cython.boundscheck(False) * @cython.wraparound(False) * cdef col2im_6d_cython_inner(np.ndarray[DTYPE_t, ndim=6] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_6d_cython_inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_fuse_1__pyx_f_13im2col_cython_col2im_6d_cython_inner(PyArrayObject *__pyx_v_cols, PyArrayObject *__pyx_v_x_padded, int __pyx_v_N, int __pyx_v_C, CYTHON_UNUSED int __pyx_v_H, CYTHON_UNUSED int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_out_h, int __pyx_v_out_w, CYTHON_UNUSED int __pyx_v_pad, int __pyx_v_stride) { int __pyx_v_c; int __pyx_v_hh; int __pyx_v_ww; int __pyx_v_n; int __pyx_v_h; int __pyx_v_w; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; int __pyx_t_10; int __pyx_t_11; int __pyx_t_12; int __pyx_t_13; int __pyx_t_14; int __pyx_t_15; int __pyx_t_16; int __pyx_t_17; int __pyx_t_18; Py_ssize_t __pyx_t_19; Py_ssize_t __pyx_t_20; Py_ssize_t __pyx_t_21; Py_ssize_t __pyx_t_22; Py_ssize_t __pyx_t_23; Py_ssize_t __pyx_t_24; Py_ssize_t __pyx_t_25; Py_ssize_t __pyx_t_26; Py_ssize_t __pyx_t_27; Py_ssize_t __pyx_t_28; __Pyx_RefNannySetupContext("__pyx_fuse_1col2im_6d_cython_inner", 0); __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 6, 0, __pyx_stack) == -1)) __PYX_ERR(0, 94, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_cols.diminfo[2].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_cols.diminfo[2].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_cols.diminfo[3].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_cols.diminfo[3].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[3]; __pyx_pybuffernd_cols.diminfo[4].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[4]; __pyx_pybuffernd_cols.diminfo[4].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[4]; __pyx_pybuffernd_cols.diminfo[5].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[5]; __pyx_pybuffernd_cols.diminfo[5].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[5]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_v_x_padded, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 4, 0, __pyx_stack) == -1)) __PYX_ERR(0, 94, __pyx_L1_error) } __pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; /* "im2col_cython.pyx":100 * * cdef int c, hh, ww, n, h, w * for n in range(N): # <<<<<<<<<<<<<< * for c in range(C): * for hh in range(HH): */ __pyx_t_1 = __pyx_v_N; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_n = __pyx_t_3; /* "im2col_cython.pyx":101 * cdef int c, hh, ww, n, h, w * for n in range(N): * for c in range(C): # <<<<<<<<<<<<<< * for hh in range(HH): * for ww in range(WW): */ __pyx_t_4 = __pyx_v_C; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_c = __pyx_t_6; /* "im2col_cython.pyx":102 * for n in range(N): * for c in range(C): * for hh in range(HH): # <<<<<<<<<<<<<< * for ww in range(WW): * for h in range(out_h): */ __pyx_t_7 = __pyx_v_HH; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_hh = __pyx_t_9; /* "im2col_cython.pyx":103 * for c in range(C): * for hh in range(HH): * for ww in range(WW): # <<<<<<<<<<<<<< * for h in range(out_h): * for w in range(out_w): */ __pyx_t_10 = __pyx_v_WW; __pyx_t_11 = __pyx_t_10; for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) { __pyx_v_ww = __pyx_t_12; /* "im2col_cython.pyx":104 * for hh in range(HH): * for ww in range(WW): * for h in range(out_h): # <<<<<<<<<<<<<< * for w in range(out_w): * x_padded[n, c, stride * h + hh, stride * w + ww] += cols[c, hh, ww, n, h, w] */ __pyx_t_13 = __pyx_v_out_h; __pyx_t_14 = __pyx_t_13; for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) { __pyx_v_h = __pyx_t_15; /* "im2col_cython.pyx":105 * for ww in range(WW): * for h in range(out_h): * for w in range(out_w): # <<<<<<<<<<<<<< * x_padded[n, c, stride * h + hh, stride * w + ww] += cols[c, hh, ww, n, h, w] * */ __pyx_t_16 = __pyx_v_out_w; __pyx_t_17 = __pyx_t_16; for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) { __pyx_v_w = __pyx_t_18; /* "im2col_cython.pyx":106 * for h in range(out_h): * for w in range(out_w): * x_padded[n, c, stride * h + hh, stride * w + ww] += cols[c, hh, ww, n, h, w] # <<<<<<<<<<<<<< * * */ __pyx_t_19 = __pyx_v_c; __pyx_t_20 = __pyx_v_hh; __pyx_t_21 = __pyx_v_ww; __pyx_t_22 = __pyx_v_n; __pyx_t_23 = __pyx_v_h; __pyx_t_24 = __pyx_v_w; __pyx_t_25 = __pyx_v_n; __pyx_t_26 = __pyx_v_c; __pyx_t_27 = ((__pyx_v_stride * __pyx_v_h) + __pyx_v_hh); __pyx_t_28 = ((__pyx_v_stride * __pyx_v_w) + __pyx_v_ww); *__Pyx_BufPtrStrided4d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_x_padded.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_x_padded.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_x_padded.diminfo[2].strides, __pyx_t_28, __pyx_pybuffernd_x_padded.diminfo[3].strides) += (*__Pyx_BufPtrStrided6d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_cols.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_cols.diminfo[0].strides, __pyx_t_20, __pyx_pybuffernd_cols.diminfo[1].strides, __pyx_t_21, __pyx_pybuffernd_cols.diminfo[2].strides, __pyx_t_22, __pyx_pybuffernd_cols.diminfo[3].strides, __pyx_t_23, __pyx_pybuffernd_cols.diminfo[4].strides, __pyx_t_24, __pyx_pybuffernd_cols.diminfo[5].strides)); } } } } } } /* "im2col_cython.pyx":94 * @cython.boundscheck(False) * @cython.wraparound(False) * cdef col2im_6d_cython_inner(np.ndarray[DTYPE_t, ndim=6] cols, # <<<<<<<<<<<<<< * np.ndarray[DTYPE_t, ndim=4] x_padded, * int N, int C, int H, int W, int HH, int WW, */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_6d_cython_inner", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "im2col_cython.pyx":109 * * * def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ /* Python wrapper */ static PyObject *__pyx_pw_13im2col_cython_5col2im_6d_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_13im2col_cython_5col2im_6d_cython = {"col2im_6d_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_13im2col_cython_5col2im_6d_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_13im2col_cython_5col2im_6d_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_signatures = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_kwargs = 0; CYTHON_UNUSED PyObject *__pyx_v_defaults = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signatures,&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0}; PyObject* values[4] = {0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_signatures)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 1); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 2); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, 3); __PYX_ERR(0, 109, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(0, 109, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); } __pyx_v_signatures = values[0]; __pyx_v_args = values[1]; __pyx_v_kwargs = values[2]; __pyx_v_defaults = values[3]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 109, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_13im2col_cython_4col2im_6d_cython(__pyx_self, __pyx_v_signatures, __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_4col2im_6d_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) { PyObject *__pyx_v_dest_sig = NULL; Py_ssize_t __pyx_v_i; PyTypeObject *__pyx_v_ndarray = 0; __Pyx_memviewslice __pyx_v_memslice; Py_ssize_t __pyx_v_itemsize; CYTHON_UNUSED int __pyx_v_dtype_signed; char __pyx_v_kind; PyObject *__pyx_v_arg = NULL; PyObject *__pyx_v_dtype = NULL; PyObject *__pyx_v_arg_base = NULL; PyObject *__pyx_v_candidates = NULL; PyObject *__pyx_v_sig = NULL; int __pyx_v_match_found; PyObject *__pyx_v_src_sig = NULL; PyObject *__pyx_v_dst_type = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; Py_ssize_t __pyx_t_5; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; __Pyx_memviewslice __pyx_t_8; Py_ssize_t __pyx_t_9; int __pyx_t_10; int __pyx_t_11; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; PyObject *__pyx_t_14 = NULL; Py_ssize_t __pyx_t_15; Py_ssize_t __pyx_t_16; Py_ssize_t __pyx_t_17; int __pyx_t_18; __Pyx_RefNannySetupContext("col2im_6d_cython", 0); __Pyx_INCREF(__pyx_v_kwargs); __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); PyList_SET_ITEM(__pyx_t_1, 0, Py_None); __pyx_v_dest_sig = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_v_kwargs != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_t_3 = ((!__pyx_t_4) != 0); __pyx_t_2 = __pyx_t_3; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { __Pyx_INCREF(Py_None); __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None); } __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1); __pyx_t_1 = 0; __pyx_v_itemsize = -1L; if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_t_2 = ((0 < __pyx_t_5) != 0); if (__pyx_t_2) { if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_1 = __Pyx_GetItemInt_Tuple(((PyObject*)__pyx_v_args), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_arg = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6; } __pyx_t_3 = (__pyx_v_kwargs != Py_None); __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L7_bool_binop_done; } if (unlikely(__pyx_v_kwargs == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_cols, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_t_3 = (__pyx_t_4 != 0); __pyx_t_2 = __pyx_t_3; __pyx_L7_bool_binop_done:; if (__pyx_t_2) { if (unlikely(__pyx_v_kwargs == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_cols); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_arg = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6; } /*else*/ { if (unlikely(__pyx_v_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_int_9); __Pyx_GIVEREF(__pyx_int_9); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_9); __Pyx_INCREF(__pyx_n_s_s); __Pyx_GIVEREF(__pyx_n_s_s); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_L6:; while (1) { __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None)); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_dtype = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L12; } __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_arg_base = __pyx_t_6; __pyx_t_6 = 0; __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_dtype = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L13; } /*else*/ { __Pyx_INCREF(Py_None); __pyx_v_dtype = Py_None; } __pyx_L13:; goto __pyx_L12; } /*else*/ { __Pyx_INCREF(Py_None); __pyx_v_dtype = Py_None; } __pyx_L12:; __pyx_v_itemsize = -1L; __pyx_t_2 = (__pyx_v_dtype != Py_None); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_itemsize = __pyx_t_5; __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_v_kind = __pyx_t_7; __pyx_v_dtype_signed = (__pyx_v_kind == 'i'); switch (__pyx_v_kind) { case 'i': case 'u': break; case 'f': __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float32_t)) == __pyx_v_itemsize) != 0); if (__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L16_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 6) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L16_bool_binop_done:; if (__pyx_t_3) { if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 109, __pyx_L1_error) goto __pyx_L10_break; } __pyx_t_2 = (((sizeof(__pyx_t_5numpy_float64_t)) == __pyx_v_itemsize) != 0); if (__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L19_bool_binop_done; } __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 6) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L19_bool_binop_done:; if (__pyx_t_3) { if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 109, __pyx_L1_error) goto __pyx_L10_break; } break; case 'c': break; case 'O': break; default: break; } } } __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L22_bool_binop_done; } __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float32_t))) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L22_bool_binop_done:; if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsds_nn___pyx_t_5numpy_float32_t(__pyx_v_arg, 0); __pyx_v_memslice = __pyx_t_8; __pyx_t_3 = (__pyx_v_memslice.memview != 0); if (__pyx_t_3) { __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float32_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 109, __pyx_L1_error) goto __pyx_L10_break; } /*else*/ { PyErr_Clear(); } } __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0); if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; goto __pyx_L26_bool_binop_done; } __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(__pyx_t_5numpy_float64_t))) != 0); __pyx_t_3 = __pyx_t_2; __pyx_L26_bool_binop_done:; if (__pyx_t_3) { __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsds_nn___pyx_t_5numpy_float64_t(__pyx_v_arg, 0); __pyx_v_memslice = __pyx_t_8; __pyx_t_3 = (__pyx_v_memslice.memview != 0); if (__pyx_t_3) { __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1); if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float64_t, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 109, __pyx_L1_error) goto __pyx_L10_break; } /*else*/ { PyErr_Clear(); } } if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 1) < 0)) __PYX_ERR(0, 109, __pyx_L1_error) goto __pyx_L10_break; } __pyx_L10_break:; __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_v_candidates = ((PyObject*)__pyx_t_6); __pyx_t_6 = 0; __pyx_t_5 = 0; if (unlikely(__pyx_v_signatures == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = __pyx_t_1; __pyx_t_1 = 0; while (1) { __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10); if (unlikely(__pyx_t_11 == 0)) break; if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1); __pyx_t_1 = 0; __pyx_v_match_found = 0; __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_14 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_14)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_14); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); } } __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s_); __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; __pyx_t_12 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_12)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); } } __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2); __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_t_16 = __pyx_t_15; for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) { __pyx_v_i = __pyx_t_17; __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_dest_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (__pyx_v_dst_type != Py_None); __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; if (__pyx_t_2) { __pyx_v_match_found = 1; goto __pyx_L34; } /*else*/ { __pyx_v_match_found = 0; goto __pyx_L32_break; } __pyx_L34:; } } __pyx_L32_break:; __pyx_t_2 = (__pyx_v_match_found != 0); if (__pyx_t_2) { __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 109, __pyx_L1_error) } } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0); __pyx_t_3 = ((!__pyx_t_2) != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_t_3 = ((__pyx_t_9 > 1) != 0); if (__pyx_t_3) { __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(0, 109, __pyx_L1_error) } /*else*/ { __Pyx_XDECREF(__pyx_r); if (unlikely(__pyx_v_signatures == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_candidates, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_13 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), __pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_r = __pyx_t_13; __pyx_t_13 = 0; goto __pyx_L0; } /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); __Pyx_XDECREF(__pyx_t_14); __Pyx_AddTraceback("im2col_cython.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_dest_sig); __Pyx_XDECREF(__pyx_v_ndarray); __Pyx_XDECREF(__pyx_v_arg); __Pyx_XDECREF(__pyx_v_dtype); __Pyx_XDECREF(__pyx_v_arg_base); __Pyx_XDECREF(__pyx_v_candidates); __Pyx_XDECREF(__pyx_v_sig); __Pyx_XDECREF(__pyx_v_src_sig); __Pyx_XDECREF(__pyx_v_dst_type); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_fuse_0__pyx_pw_13im2col_cython_19col2im_6d_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_fuse_0__pyx_mdef_13im2col_cython_19col2im_6d_cython = {"__pyx_fuse_0col2im_6d_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_13im2col_cython_19col2im_6d_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_fuse_0__pyx_pw_13im2col_cython_19col2im_6d_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_cols = 0; int __pyx_v_N; int __pyx_v_C; int __pyx_v_H; int __pyx_v_W; int __pyx_v_HH; int __pyx_v_WW; int __pyx_v_pad; int __pyx_v_stride; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("col2im_6d_cython (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cols,&__pyx_n_s_N,&__pyx_n_s_C,&__pyx_n_s_H,&__pyx_n_s_W,&__pyx_n_s_HH,&__pyx_n_s_WW,&__pyx_n_s_pad,&__pyx_n_s_stride,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 1); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 2); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 3); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 4); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 5: if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HH)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 5); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 6: if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_WW)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 6); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 7: if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pad)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 7); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 8: if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 8); __PYX_ERR(0, 109, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "col2im_6d_cython") < 0)) __PYX_ERR(0, 109, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[5] = PyTuple_GET_ITEM(__pyx_args, 5); values[6] = PyTuple_GET_ITEM(__pyx_args, 6); values[7] = PyTuple_GET_ITEM(__pyx_args, 7); values[8] = PyTuple_GET_ITEM(__pyx_args, 8); } __pyx_v_cols = ((PyArrayObject *)values[0]); __pyx_v_N = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_C = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_C == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_H = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_H == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_W = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_W == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_HH = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_HH == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) __pyx_v_WW = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_WW == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) __pyx_v_pad = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_pad == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) __pyx_v_stride = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_stride == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 109, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.col2im_6d_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cols), __pyx_ptype_5numpy_ndarray, 1, "cols", 0))) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_r = __pyx_pf_13im2col_cython_18col2im_6d_cython(__pyx_self, __pyx_v_cols, __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_pad, __pyx_v_stride); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_18col2im_6d_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_pad, int __pyx_v_stride) { CYTHON_UNUSED PyArrayObject *__pyx_v_x = 0; int __pyx_v_out_h; int __pyx_v_out_w; PyArrayObject *__pyx_v_x_padded = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; __Pyx_RefNannySetupContext("__pyx_fuse_0col2im_6d_cython", 0); __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 6, 0, __pyx_stack) == -1)) __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_cols.diminfo[2].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_cols.diminfo[2].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_cols.diminfo[3].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_cols.diminfo[3].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[3]; __pyx_pybuffernd_cols.diminfo[4].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[4]; __pyx_pybuffernd_cols.diminfo[4].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[4]; __pyx_pybuffernd_cols.diminfo[5].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[5]; __pyx_pybuffernd_cols.diminfo[5].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[5]; /* "im2col_cython.pyx":111 * def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) # <<<<<<<<<<<<<< * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_H); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_W); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 111, __pyx_L1_error) __pyx_v_x = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "im2col_cython.pyx":112 * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int out_h = (H + 2 * pad - HH) / stride + 1 # <<<<<<<<<<<<<< * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), */ __pyx_t_7 = ((__pyx_v_H + (2 * __pyx_v_pad)) - __pyx_v_HH); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 112, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 112, __pyx_L1_error) } __pyx_v_out_h = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":113 * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 # <<<<<<<<<<<<<< * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), * dtype=cols.dtype) */ __pyx_t_7 = ((__pyx_v_W + (2 * __pyx_v_pad)) - __pyx_v_WW); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 113, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 113, __pyx_L1_error) } __pyx_v_out_w = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":114 * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_H + (2 * __pyx_v_pad))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_W + (2 * __pyx_v_pad))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = 0; /* "im2col_cython.pyx":115 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), * dtype=cols.dtype) # <<<<<<<<<<<<<< * * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) */ __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":114 * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 114, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) { __pyx_v_x_padded = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 114, __pyx_L1_error) } else {__pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; } } __pyx_t_8 = 0; __pyx_v_x_padded = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":117 * dtype=cols.dtype) * * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) # <<<<<<<<<<<<<< * * if pad > 0: */ __pyx_t_2 = __pyx_fuse_0__pyx_f_13im2col_cython_col2im_6d_cython_inner(((PyArrayObject *)__pyx_v_cols), ((PyArrayObject *)__pyx_v_x_padded), __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_out_h, __pyx_v_out_w, __pyx_v_pad, __pyx_v_stride); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":119 * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) * * if pad > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, pad:-pad, pad:-pad] * return x_padded */ __pyx_t_9 = ((__pyx_v_pad > 0) != 0); if (__pyx_t_9) { /* "im2col_cython.pyx":120 * * if pad > 0: * return x_padded[:, :, pad:-pad, pad:-pad] # <<<<<<<<<<<<<< * return x_padded */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_pad); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyInt_From_int((-__pyx_v_pad)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySlice_New(__pyx_t_2, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_pad); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_int((-__pyx_v_pad)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySlice_New(__pyx_t_1, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_slice__10); __Pyx_GIVEREF(__pyx_slice__10); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__10); __Pyx_INCREF(__pyx_slice__11); __Pyx_GIVEREF(__pyx_slice__11); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_slice__11); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); __pyx_t_3 = 0; __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_x_padded), __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; /* "im2col_cython.pyx":119 * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) * * if pad > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, pad:-pad, pad:-pad] * return x_padded */ } /* "im2col_cython.pyx":121 * if pad > 0: * return x_padded[:, :, pad:-pad, pad:-pad] * return x_padded # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_x_padded)); __pyx_r = ((PyObject *)__pyx_v_x_padded); goto __pyx_L0; /* "im2col_cython.pyx":109 * * * def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_6d_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_x); __Pyx_XDECREF((PyObject *)__pyx_v_x_padded); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* Python wrapper */ static PyObject *__pyx_fuse_1__pyx_pw_13im2col_cython_21col2im_6d_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_fuse_1__pyx_mdef_13im2col_cython_21col2im_6d_cython = {"__pyx_fuse_1col2im_6d_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_13im2col_cython_21col2im_6d_cython, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_fuse_1__pyx_pw_13im2col_cython_21col2im_6d_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyArrayObject *__pyx_v_cols = 0; int __pyx_v_N; int __pyx_v_C; int __pyx_v_H; int __pyx_v_W; int __pyx_v_HH; int __pyx_v_WW; int __pyx_v_pad; int __pyx_v_stride; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("col2im_6d_cython (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cols,&__pyx_n_s_N,&__pyx_n_s_C,&__pyx_n_s_H,&__pyx_n_s_W,&__pyx_n_s_HH,&__pyx_n_s_WW,&__pyx_n_s_pad,&__pyx_n_s_stride,0}; PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); CYTHON_FALLTHROUGH; case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); CYTHON_FALLTHROUGH; case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); CYTHON_FALLTHROUGH; case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); CYTHON_FALLTHROUGH; case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cols)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_N)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 1); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_C)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 2); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_H)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 3); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_W)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 4); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 5: if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_HH)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 5); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 6: if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_WW)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 6); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 7: if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pad)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 7); __PYX_ERR(0, 109, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 8: if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, 8); __PYX_ERR(0, 109, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "col2im_6d_cython") < 0)) __PYX_ERR(0, 109, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[3] = PyTuple_GET_ITEM(__pyx_args, 3); values[4] = PyTuple_GET_ITEM(__pyx_args, 4); values[5] = PyTuple_GET_ITEM(__pyx_args, 5); values[6] = PyTuple_GET_ITEM(__pyx_args, 6); values[7] = PyTuple_GET_ITEM(__pyx_args, 7); values[8] = PyTuple_GET_ITEM(__pyx_args, 8); } __pyx_v_cols = ((PyArrayObject *)values[0]); __pyx_v_N = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_N == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_C = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_C == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_H = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_H == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_W = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_W == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L3_error) __pyx_v_HH = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_HH == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) __pyx_v_WW = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_WW == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) __pyx_v_pad = __Pyx_PyInt_As_int(values[7]); if (unlikely((__pyx_v_pad == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) __pyx_v_stride = __Pyx_PyInt_As_int(values[8]); if (unlikely((__pyx_v_stride == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L3_error) } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("col2im_6d_cython", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 109, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("im2col_cython.col2im_6d_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cols), __pyx_ptype_5numpy_ndarray, 1, "cols", 0))) __PYX_ERR(0, 109, __pyx_L1_error) __pyx_r = __pyx_pf_13im2col_cython_20col2im_6d_cython(__pyx_self, __pyx_v_cols, __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_pad, __pyx_v_stride); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_13im2col_cython_20col2im_6d_cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_cols, int __pyx_v_N, int __pyx_v_C, int __pyx_v_H, int __pyx_v_W, int __pyx_v_HH, int __pyx_v_WW, int __pyx_v_pad, int __pyx_v_stride) { CYTHON_UNUSED PyArrayObject *__pyx_v_x = 0; int __pyx_v_out_h; int __pyx_v_out_w; PyArrayObject *__pyx_v_x_padded = 0; __Pyx_LocalBuf_ND __pyx_pybuffernd_cols; __Pyx_Buffer __pyx_pybuffer_cols; __Pyx_LocalBuf_ND __pyx_pybuffernd_x_padded; __Pyx_Buffer __pyx_pybuffer_x_padded; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; long __pyx_t_7; PyArrayObject *__pyx_t_8 = NULL; int __pyx_t_9; __Pyx_RefNannySetupContext("__pyx_fuse_1col2im_6d_cython", 0); __pyx_pybuffer_x_padded.pybuffer.buf = NULL; __pyx_pybuffer_x_padded.refcount = 0; __pyx_pybuffernd_x_padded.data = NULL; __pyx_pybuffernd_x_padded.rcbuffer = &__pyx_pybuffer_x_padded; __pyx_pybuffer_cols.pybuffer.buf = NULL; __pyx_pybuffer_cols.refcount = 0; __pyx_pybuffernd_cols.data = NULL; __pyx_pybuffernd_cols.rcbuffer = &__pyx_pybuffer_cols; { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_cols.rcbuffer->pybuffer, (PyObject*)__pyx_v_cols, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 6, 0, __pyx_stack) == -1)) __PYX_ERR(0, 109, __pyx_L1_error) } __pyx_pybuffernd_cols.diminfo[0].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_cols.diminfo[0].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_cols.diminfo[1].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_cols.diminfo[1].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_cols.diminfo[2].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_cols.diminfo[2].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_cols.diminfo[3].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_cols.diminfo[3].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[3]; __pyx_pybuffernd_cols.diminfo[4].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[4]; __pyx_pybuffernd_cols.diminfo[4].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[4]; __pyx_pybuffernd_cols.diminfo[5].strides = __pyx_pybuffernd_cols.rcbuffer->pybuffer.strides[5]; __pyx_pybuffernd_cols.diminfo[5].shape = __pyx_pybuffernd_cols.rcbuffer->pybuffer.shape[5]; /* "im2col_cython.pyx":111 * def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) # <<<<<<<<<<<<<< * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 */ __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_H); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_W); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 111, __pyx_L1_error) __pyx_v_x = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; /* "im2col_cython.pyx":112 * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int out_h = (H + 2 * pad - HH) / stride + 1 # <<<<<<<<<<<<<< * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), */ __pyx_t_7 = ((__pyx_v_H + (2 * __pyx_v_pad)) - __pyx_v_HH); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 112, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 112, __pyx_L1_error) } __pyx_v_out_h = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":113 * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 # <<<<<<<<<<<<<< * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), * dtype=cols.dtype) */ __pyx_t_7 = ((__pyx_v_W + (2 * __pyx_v_pad)) - __pyx_v_WW); if (unlikely(__pyx_v_stride == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(0, 113, __pyx_L1_error) } else if (sizeof(long) == sizeof(long) && (!(((int)-1) > 0)) && unlikely(__pyx_v_stride == (int)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_t_7))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(0, 113, __pyx_L1_error) } __pyx_v_out_w = (__Pyx_div_long(__pyx_t_7, __pyx_v_stride) + 1); /* "im2col_cython.pyx":114 * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_C); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_H + (2 * __pyx_v_pad))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_long((__pyx_v_W + (2 * __pyx_v_pad))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = 0; /* "im2col_cython.pyx":115 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), * dtype=cols.dtype) # <<<<<<<<<<<<<< * * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) */ __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cols), __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 115, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":114 * cdef int out_h = (H + 2 * pad - HH) / stride + 1 * cdef int out_w = (W + 2 * pad - WW) / stride + 1 * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), # <<<<<<<<<<<<<< * dtype=cols.dtype) * */ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 114, __pyx_L1_error) __pyx_t_8 = ((PyArrayObject *)__pyx_t_2); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) { __pyx_v_x_padded = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.buf = NULL; __PYX_ERR(0, 114, __pyx_L1_error) } else {__pyx_pybuffernd_x_padded.diminfo[0].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x_padded.diminfo[0].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_x_padded.diminfo[1].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_x_padded.diminfo[1].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_x_padded.diminfo[2].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_x_padded.diminfo[2].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_x_padded.diminfo[3].strides = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_x_padded.diminfo[3].shape = __pyx_pybuffernd_x_padded.rcbuffer->pybuffer.shape[3]; } } __pyx_t_8 = 0; __pyx_v_x_padded = ((PyArrayObject *)__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":117 * dtype=cols.dtype) * * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) # <<<<<<<<<<<<<< * * if pad > 0: */ __pyx_t_2 = __pyx_fuse_1__pyx_f_13im2col_cython_col2im_6d_cython_inner(((PyArrayObject *)__pyx_v_cols), ((PyArrayObject *)__pyx_v_x_padded), __pyx_v_N, __pyx_v_C, __pyx_v_H, __pyx_v_W, __pyx_v_HH, __pyx_v_WW, __pyx_v_out_h, __pyx_v_out_w, __pyx_v_pad, __pyx_v_stride); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":119 * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) * * if pad > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, pad:-pad, pad:-pad] * return x_padded */ __pyx_t_9 = ((__pyx_v_pad > 0) != 0); if (__pyx_t_9) { /* "im2col_cython.pyx":120 * * if pad > 0: * return x_padded[:, :, pad:-pad, pad:-pad] # <<<<<<<<<<<<<< * return x_padded */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_pad); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyInt_From_int((-__pyx_v_pad)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySlice_New(__pyx_t_2, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_pad); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_From_int((-__pyx_v_pad)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PySlice_New(__pyx_t_1, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_slice__12); __Pyx_GIVEREF(__pyx_slice__12); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__12); __Pyx_INCREF(__pyx_slice__13); __Pyx_GIVEREF(__pyx_slice__13); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_slice__13); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_6); __pyx_t_3 = 0; __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_x_padded), __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; /* "im2col_cython.pyx":119 * col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) * * if pad > 0: # <<<<<<<<<<<<<< * return x_padded[:, :, pad:-pad, pad:-pad] * return x_padded */ } /* "im2col_cython.pyx":121 * if pad > 0: * return x_padded[:, :, pad:-pad, pad:-pad] * return x_padded # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_x_padded)); __pyx_r = ((PyObject *)__pyx_v_x_padded); goto __pyx_L0; /* "im2col_cython.pyx":109 * * * def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} __Pyx_AddTraceback("im2col_cython.col2im_6d_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_cols.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x_padded.rcbuffer->pybuffer); __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_x); __Pyx_XDECREF((PyObject *)__pyx_v_x_padded); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":258 * # experimental exception made for __getbuffer__ and __releasebuffer__ * # -- the details of this may change. * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< * # This implementation of getbuffer is geared towards Cython * # requirements, and does not yet fulfill the PEP. */ /* Python wrapper */ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_v_i; int __pyx_v_ndim; int __pyx_v_endian_detector; int __pyx_v_little_endian; int __pyx_v_t; char *__pyx_v_f; PyArray_Descr *__pyx_v_descr = 0; int __pyx_v_offset; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; PyArray_Descr *__pyx_t_7; PyObject *__pyx_t_8 = NULL; char *__pyx_t_9; if (__pyx_v_info == NULL) { PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); return -1; } __Pyx_RefNannySetupContext("__getbuffer__", 0); __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); __Pyx_GIVEREF(__pyx_v_info->obj); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":265 * * cdef int i, ndim * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * */ __pyx_v_endian_detector = 1; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":266 * cdef int i, ndim * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * * ndim = PyArray_NDIM(self) */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":268 * cdef bint little_endian = ((&endian_detector)[0] != 0) * * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) */ __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":270 * ndim = PyArray_NDIM(self) * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") */ __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L4_bool_binop_done; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":271 * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not C contiguous") * */ __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_C_CONTIGUOUS) != 0)) != 0); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":270 * ndim = PyArray_NDIM(self) * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") */ if (unlikely(__pyx_t_1)) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":272 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(1, 272, __pyx_L1_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":270 * ndim = PyArray_NDIM(self) * * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":274 * raise ValueError(u"ndarray is not C contiguous") * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") */ __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L7_bool_binop_done; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":275 * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< * raise ValueError(u"ndarray is not Fortran contiguous") * */ __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_F_CONTIGUOUS) != 0)) != 0); __pyx_t_1 = __pyx_t_2; __pyx_L7_bool_binop_done:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":274 * raise ValueError(u"ndarray is not C contiguous") * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") */ if (unlikely(__pyx_t_1)) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":276 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 276, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(1, 276, __pyx_L1_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":274 * raise ValueError(u"ndarray is not C contiguous") * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":278 * raise ValueError(u"ndarray is not Fortran contiguous") * * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< * info.ndim = ndim * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":279 * * info.buf = PyArray_DATA(self) * info.ndim = ndim # <<<<<<<<<<<<<< * if sizeof(npy_intp) != sizeof(Py_ssize_t): * # Allocate new buffer for strides and shape info. */ __pyx_v_info->ndim = __pyx_v_ndim; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":280 * info.buf = PyArray_DATA(self) * info.ndim = ndim * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":283 * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) # <<<<<<<<<<<<<< * info.shape = info.strides + ndim * for i in range(ndim): */ __pyx_v_info->strides = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * 2) * ((size_t)__pyx_v_ndim)))); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":284 * # This is allocated as one block, strides first. * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) * info.shape = info.strides + ndim # <<<<<<<<<<<<<< * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] */ __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":285 * info.strides = PyObject_Malloc(sizeof(Py_ssize_t) * 2 * ndim) * info.shape = info.strides + ndim * for i in range(ndim): # <<<<<<<<<<<<<< * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] */ __pyx_t_4 = __pyx_v_ndim; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":286 * info.shape = info.strides + ndim * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< * info.shape[i] = PyArray_DIMS(self)[i] * else: */ (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":287 * for i in range(ndim): * info.strides[i] = PyArray_STRIDES(self)[i] * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< * else: * info.strides = PyArray_STRIDES(self) */ (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":280 * info.buf = PyArray_DATA(self) * info.ndim = ndim * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * # Allocate new buffer for strides and shape info. * # This is allocated as one block, strides first. */ goto __pyx_L9; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":289 * info.shape[i] = PyArray_DIMS(self)[i] * else: * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL */ /*else*/ { __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":290 * else: * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) */ __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); } __pyx_L9:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":291 * info.strides = PyArray_STRIDES(self) * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL # <<<<<<<<<<<<<< * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) */ __pyx_v_info->suboffsets = NULL; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":292 * info.shape = PyArray_DIMS(self) * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< * info.readonly = not PyArray_ISWRITEABLE(self) * */ __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":293 * info.suboffsets = NULL * info.itemsize = PyArray_ITEMSIZE(self) * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< * * cdef int t */ __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":296 * * cdef int t * cdef char* f = NULL # <<<<<<<<<<<<<< * cdef dtype descr = PyArray_DESCR(self) * cdef int offset */ __pyx_v_f = NULL; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":297 * cdef int t * cdef char* f = NULL * cdef dtype descr = PyArray_DESCR(self) # <<<<<<<<<<<<<< * cdef int offset * */ __pyx_t_7 = PyArray_DESCR(__pyx_v_self); __pyx_t_3 = ((PyObject *)__pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3); __pyx_t_3 = 0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":300 * cdef int offset * * info.obj = self # <<<<<<<<<<<<<< * * if not PyDataType_HASFIELDS(descr): */ __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = ((PyObject *)__pyx_v_self); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":302 * info.obj = self * * if not PyDataType_HASFIELDS(descr): # <<<<<<<<<<<<<< * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or */ __pyx_t_1 = ((!(PyDataType_HASFIELDS(__pyx_v_descr) != 0)) != 0); if (__pyx_t_1) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":303 * * if not PyDataType_HASFIELDS(descr): * t = descr.type_num # <<<<<<<<<<<<<< * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): */ __pyx_t_4 = __pyx_v_descr->type_num; __pyx_v_t = __pyx_t_4; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":304 * if not PyDataType_HASFIELDS(descr): * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0); if (!__pyx_t_2) { goto __pyx_L15_next_or; } else { } __pyx_t_2 = (__pyx_v_little_endian != 0); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L14_bool_binop_done; } __pyx_L15_next_or:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":305 * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" */ __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L14_bool_binop_done; } __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_1 = __pyx_t_2; __pyx_L14_bool_binop_done:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":304 * if not PyDataType_HASFIELDS(descr): * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ if (unlikely(__pyx_t_1)) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":306 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(1, 306, __pyx_L1_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":304 * if not PyDataType_HASFIELDS(descr): * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":307 * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" */ switch (__pyx_v_t) { case NPY_BYTE: __pyx_v_f = ((char *)"b"); break; case NPY_UBYTE: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":308 * raise ValueError(u"Non-native byte order not supported") * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" */ __pyx_v_f = ((char *)"B"); break; case NPY_SHORT: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":309 * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" */ __pyx_v_f = ((char *)"h"); break; case NPY_USHORT: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":310 * elif t == NPY_UBYTE: f = "B" * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" */ __pyx_v_f = ((char *)"H"); break; case NPY_INT: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":311 * elif t == NPY_SHORT: f = "h" * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" */ __pyx_v_f = ((char *)"i"); break; case NPY_UINT: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":312 * elif t == NPY_USHORT: f = "H" * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" */ __pyx_v_f = ((char *)"I"); break; case NPY_LONG: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":313 * elif t == NPY_INT: f = "i" * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" */ __pyx_v_f = ((char *)"l"); break; case NPY_ULONG: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":314 * elif t == NPY_UINT: f = "I" * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" */ __pyx_v_f = ((char *)"L"); break; case NPY_LONGLONG: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":315 * elif t == NPY_LONG: f = "l" * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" */ __pyx_v_f = ((char *)"q"); break; case NPY_ULONGLONG: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":316 * elif t == NPY_ULONG: f = "L" * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" */ __pyx_v_f = ((char *)"Q"); break; case NPY_FLOAT: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":317 * elif t == NPY_LONGLONG: f = "q" * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" */ __pyx_v_f = ((char *)"f"); break; case NPY_DOUBLE: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":318 * elif t == NPY_ULONGLONG: f = "Q" * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" */ __pyx_v_f = ((char *)"d"); break; case NPY_LONGDOUBLE: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":319 * elif t == NPY_FLOAT: f = "f" * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" */ __pyx_v_f = ((char *)"g"); break; case NPY_CFLOAT: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":320 * elif t == NPY_DOUBLE: f = "d" * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" */ __pyx_v_f = ((char *)"Zf"); break; case NPY_CDOUBLE: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":321 * elif t == NPY_LONGDOUBLE: f = "g" * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" */ __pyx_v_f = ((char *)"Zd"); break; case NPY_CLONGDOUBLE: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":322 * elif t == NPY_CFLOAT: f = "Zf" * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f = "O" * else: */ __pyx_v_f = ((char *)"Zg"); break; case NPY_OBJECT: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":323 * elif t == NPY_CDOUBLE: f = "Zd" * elif t == NPY_CLONGDOUBLE: f = "Zg" * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ __pyx_v_f = ((char *)"O"); break; default: /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":325 * elif t == NPY_OBJECT: f = "O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * info.format = f * return */ __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 325, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(1, 325, __pyx_L1_error) break; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":326 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f # <<<<<<<<<<<<<< * return * else: */ __pyx_v_info->format = __pyx_v_f; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":327 * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * info.format = f * return # <<<<<<<<<<<<<< * else: * info.format = PyObject_Malloc(_buffer_format_string_len) */ __pyx_r = 0; goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":302 * info.obj = self * * if not PyDataType_HASFIELDS(descr): # <<<<<<<<<<<<<< * t = descr.type_num * if ((descr.byteorder == c'>' and little_endian) or */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":329 * return * else: * info.format = PyObject_Malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 */ /*else*/ { __pyx_v_info->format = ((char *)PyObject_Malloc(0xFF)); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":330 * else: * info.format = PyObject_Malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< * offset = 0 * f = _util_dtypestring(descr, info.format + 1, */ (__pyx_v_info->format[0]) = '^'; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":331 * info.format = PyObject_Malloc(_buffer_format_string_len) * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 # <<<<<<<<<<<<<< * f = _util_dtypestring(descr, info.format + 1, * info.format + _buffer_format_string_len, */ __pyx_v_offset = 0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":332 * info.format[0] = c'^' # Native data types, manual alignment * offset = 0 * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< * info.format + _buffer_format_string_len, * &offset) */ __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 0xFF), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(1, 332, __pyx_L1_error) __pyx_v_f = __pyx_t_9; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":335 * info.format + _buffer_format_string_len, * &offset) * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< * * def __releasebuffer__(ndarray self, Py_buffer* info): */ (__pyx_v_f[0]) = '\x00'; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":258 * # experimental exception made for __getbuffer__ and __releasebuffer__ * # -- the details of this may change. * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< * # This implementation of getbuffer is geared towards Cython * # requirements, and does not yet fulfill the PEP. */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; if (__pyx_v_info->obj != NULL) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; } goto __pyx_L2; __pyx_L0:; if (__pyx_v_info->obj == Py_None) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; } __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_descr); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":337 * f[0] = c'\0' # Terminate format string * * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< * if PyArray_HASFIELDS(self): * PyObject_Free(info.format) */ /* Python wrapper */ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); /* function exit code */ __Pyx_RefNannyFinishContext(); } static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("__releasebuffer__", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":338 * * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< * PyObject_Free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); if (__pyx_t_1) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":339 * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): * PyObject_Free(info.format) # <<<<<<<<<<<<<< * if sizeof(npy_intp) != sizeof(Py_ssize_t): * PyObject_Free(info.strides) */ PyObject_Free(__pyx_v_info->format); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":338 * * def __releasebuffer__(ndarray self, Py_buffer* info): * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< * PyObject_Free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":340 * if PyArray_HASFIELDS(self): * PyObject_Free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * PyObject_Free(info.strides) * # info.shape was stored after info.strides in the same block */ __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); if (__pyx_t_1) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":341 * PyObject_Free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): * PyObject_Free(info.strides) # <<<<<<<<<<<<<< * # info.shape was stored after info.strides in the same block * */ PyObject_Free(__pyx_v_info->strides); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":340 * if PyArray_HASFIELDS(self): * PyObject_Free(info.format) * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< * PyObject_Free(info.strides) * # info.shape was stored after info.strides in the same block */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":337 * f[0] = c'\0' # Terminate format string * * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< * if PyArray_HASFIELDS(self): * PyObject_Free(info.format) */ /* function exit code */ __Pyx_RefNannyFinishContext(); } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":821 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":822 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew2(a, b): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 822, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":821 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(1, a) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":824 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(2, a, b) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":825 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew3(a, b, c): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 825, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":824 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(2, a, b) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":827 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(3, a, b, c) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":828 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 828, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":827 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(3, a, b, c) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":830 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(4, a, b, c, d) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":831 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 831, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":830 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(4, a, b, c, d) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":833 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(5, a, b, c, d, e) * */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":834 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< * * cdef inline tuple PyDataType_SHAPE(dtype d): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 834, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":833 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< * return PyArray_MultiIterNew(5, a, b, c, d, e) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":836 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":837 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< * return d.subarray.shape * else: */ __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0); if (__pyx_t_1) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":838 * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape # <<<<<<<<<<<<<< * else: * return () */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape)); __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":837 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< * return d.subarray.shape * else: */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":840 * return d.subarray.shape * else: * return () # <<<<<<<<<<<<<< * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: */ /*else*/ { __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_empty_tuple); __pyx_r = __pyx_empty_tuple; goto __pyx_L0; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":836 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape */ /* function exit code */ __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":842 * return () * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< * # Recursive utility function used in __getbuffer__ to get format * # string. The new location in the format string is returned. */ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { PyArray_Descr *__pyx_v_child = 0; int __pyx_v_endian_detector; int __pyx_v_little_endian; PyObject *__pyx_v_fields = 0; PyObject *__pyx_v_childname = NULL; PyObject *__pyx_v_new_offset = NULL; PyObject *__pyx_v_t = NULL; char *__pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; int __pyx_t_7; long __pyx_t_8; char *__pyx_t_9; __Pyx_RefNannySetupContext("_util_dtypestring", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":847 * * cdef dtype child * cdef int endian_detector = 1 # <<<<<<<<<<<<<< * cdef bint little_endian = ((&endian_detector)[0] != 0) * cdef tuple fields */ __pyx_v_endian_detector = 1; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":848 * cdef dtype child * cdef int endian_detector = 1 * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< * cdef tuple fields * */ __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":851 * cdef tuple fields * * for childname in descr.names: # <<<<<<<<<<<<<< * fields = descr.fields[childname] * child, new_offset = fields */ if (unlikely(__pyx_v_descr->names == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(1, 851, __pyx_L1_error) } __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; for (;;) { if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 851, __pyx_L1_error) #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 851, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); __pyx_t_3 = 0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":852 * * for childname in descr.names: * fields = descr.fields[childname] # <<<<<<<<<<<<<< * child, new_offset = fields * */ if (unlikely(__pyx_v_descr->fields == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(1, 852, __pyx_L1_error) } __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 852, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(1, 852, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":853 * for childname in descr.names: * fields = descr.fields[childname] * child, new_offset = fields # <<<<<<<<<<<<<< * * if (end - f) - (new_offset - offset[0]) < 15: */ if (likely(__pyx_v_fields != Py_None)) { PyObject* sequence = __pyx_v_fields; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(1, 853, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 853, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 853, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif } else { __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 853, __pyx_L1_error) } if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(1, 853, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); __pyx_t_4 = 0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":855 * child, new_offset = fields * * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * */ __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 855, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 855, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 855, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0); if (unlikely(__pyx_t_6)) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":856 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 856, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(1, 856, __pyx_L1_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":855 * child, new_offset = fields * * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":858 * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); if (!__pyx_t_7) { goto __pyx_L8_next_or; } else { } __pyx_t_7 = (__pyx_v_little_endian != 0); if (!__pyx_t_7) { } else { __pyx_t_6 = __pyx_t_7; goto __pyx_L7_bool_binop_done; } __pyx_L8_next_or:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":859 * * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< * raise ValueError(u"Non-native byte order not supported") * # One could encode it in the format string and have Cython */ __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); if (__pyx_t_7) { } else { __pyx_t_6 = __pyx_t_7; goto __pyx_L7_bool_binop_done; } __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0); __pyx_t_6 = __pyx_t_7; __pyx_L7_bool_binop_done:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":858 * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ if (unlikely(__pyx_t_6)) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":860 * if ((child.byteorder == c'>' and little_endian) or * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * # One could encode it in the format string and have Cython * # complain instead, BUT: < and > in format strings also imply */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 860, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(1, 860, __pyx_L1_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":858 * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") * * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< * (child.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":870 * * # Output padding bytes * while offset[0] < new_offset: # <<<<<<<<<<<<<< * f[0] = 120 # "x"; pad byte * f += 1 */ while (1) { __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 870, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 870, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 870, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_6) break; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":871 * # Output padding bytes * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< * f += 1 * offset[0] += 1 */ (__pyx_v_f[0]) = 0x78; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":872 * while offset[0] < new_offset: * f[0] = 120 # "x"; pad byte * f += 1 # <<<<<<<<<<<<<< * offset[0] += 1 * */ __pyx_v_f = (__pyx_v_f + 1); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":873 * f[0] = 120 # "x"; pad byte * f += 1 * offset[0] += 1 # <<<<<<<<<<<<<< * * offset[0] += child.itemsize */ __pyx_t_8 = 0; (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1); } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":875 * offset[0] += 1 * * offset[0] += child.itemsize # <<<<<<<<<<<<<< * * if not PyDataType_HASFIELDS(child): */ __pyx_t_8 = 0; (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":877 * offset[0] += child.itemsize * * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< * t = child.type_num * if end - f < 5: */ __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); if (__pyx_t_6) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":878 * * if not PyDataType_HASFIELDS(child): * t = child.type_num # <<<<<<<<<<<<<< * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") */ __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 878, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4); __pyx_t_4 = 0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":879 * if not PyDataType_HASFIELDS(child): * t = child.type_num * if end - f < 5: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short.") * */ __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); if (unlikely(__pyx_t_6)) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":880 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 880, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 880, __pyx_L1_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":879 * if not PyDataType_HASFIELDS(child): * t = child.type_num * if end - f < 5: # <<<<<<<<<<<<<< * raise RuntimeError(u"Format string allocated too short.") * */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":883 * * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_BYTE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 883, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 883, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 98; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":884 * # Until ticket #99 is fixed, use integers to avoid warnings * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UBYTE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 884, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 884, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 884, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 66; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":885 * if t == NPY_BYTE: f[0] = 98 #"b" * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_SHORT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 885, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 885, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 885, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 0x68; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":886 * elif t == NPY_UBYTE: f[0] = 66 #"B" * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_USHORT); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 886, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 886, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 886, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 72; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":887 * elif t == NPY_SHORT: f[0] = 104 #"h" * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_INT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 887, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 887, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 887, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 0x69; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":888 * elif t == NPY_USHORT: f[0] = 72 #"H" * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UINT); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 888, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 888, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 73; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":889 * elif t == NPY_INT: f[0] = 105 #"i" * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 889, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 889, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 889, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 0x6C; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":890 * elif t == NPY_UINT: f[0] = 73 #"I" * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 890, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 890, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 890, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 76; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":891 * elif t == NPY_LONG: f[0] = 108 #"l" * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 891, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 891, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 891, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 0x71; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":892 * elif t == NPY_ULONG: f[0] = 76 #"L" * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 892, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 892, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 892, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 81; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":893 * elif t == NPY_LONGLONG: f[0] = 113 #"q" * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_FLOAT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 893, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 893, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 0x66; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":894 * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 894, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 894, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 894, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 0x64; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":895 * elif t == NPY_FLOAT: f[0] = 102 #"f" * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 895, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 895, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 895, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 0x67; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":896 * elif t == NPY_DOUBLE: f[0] = 100 #"d" * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 896, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 896, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 896, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 0x66; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":897 * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 897, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 897, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 0x64; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":898 * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: */ __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 898, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 898, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 898, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_6) { (__pyx_v_f[0]) = 90; (__pyx_v_f[1]) = 0x67; __pyx_v_f = (__pyx_v_f + 1); goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":899 * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) */ __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_OBJECT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 899, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(1, 899, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (likely(__pyx_t_6)) { (__pyx_v_f[0]) = 79; goto __pyx_L15; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":901 * elif t == NPY_OBJECT: f[0] = 79 #"O" * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< * f += 1 * else: */ /*else*/ { __pyx_t_3 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 901, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 901, __pyx_L1_error) } __pyx_L15:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":902 * else: * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) * f += 1 # <<<<<<<<<<<<<< * else: * # Cython ignores struct boundary information ("T{...}"), */ __pyx_v_f = (__pyx_v_f + 1); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":877 * offset[0] += child.itemsize * * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< * t = child.type_num * if end - f < 5: */ goto __pyx_L13; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":906 * # Cython ignores struct boundary information ("T{...}"), * # so don't output it * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< * return f * */ /*else*/ { __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(1, 906, __pyx_L1_error) __pyx_v_f = __pyx_t_9; } __pyx_L13:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":851 * cdef tuple fields * * for childname in descr.names: # <<<<<<<<<<<<<< * fields = descr.fields[childname] * child, new_offset = fields */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":907 * # so don't output it * f = _util_dtypestring(child, f, end, offset) * return f # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_f; goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":842 * return () * * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< * # Recursive utility function used in __getbuffer__ to get format * # string. The new location in the format string is returned. */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_child); __Pyx_XDECREF(__pyx_v_fields); __Pyx_XDECREF(__pyx_v_childname); __Pyx_XDECREF(__pyx_v_new_offset); __Pyx_XDECREF(__pyx_v_t); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1022 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) */ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("set_array_base", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1023 * * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< * PyArray_SetBaseObject(arr, base) * */ Py_INCREF(__pyx_v_base); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1024 * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< * * cdef inline object get_array_base(ndarray arr): */ (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base)); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1022 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) */ /* function exit code */ __Pyx_RefNannyFinishContext(); } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1026 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * base = PyArray_BASE(arr) * if base is NULL: */ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { PyObject *__pyx_v_base; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1027 * * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< * if base is NULL: * return None */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1028 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< * return None * return base */ __pyx_t_1 = ((__pyx_v_base == NULL) != 0); if (__pyx_t_1) { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1029 * base = PyArray_BASE(arr) * if base is NULL: * return None # <<<<<<<<<<<<<< * return base * */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1028 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< * return None * return base */ } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1030 * if base is NULL: * return None * return base # <<<<<<<<<<<<<< * * # Versions of the import_* functions which are more suitable for */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_base)); __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1026 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< * base = PyArray_BASE(arr) * if base is NULL: */ /* function exit code */ __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1034 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< * try: * _import_array() */ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; __Pyx_RefNannySetupContext("import_array", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1035 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< * _import_array() * except Exception: */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1036 * cdef inline int import_array() except -1: * try: * _import_array() # <<<<<<<<<<<<<< * except Exception: * raise ImportError("numpy.core.multiarray failed to import") */ __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1036, __pyx_L3_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1035 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< * _import_array() * except Exception: */ } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L8_try_end; __pyx_L3_error:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1037 * try: * _import_array() * except Exception: # <<<<<<<<<<<<<< * raise ImportError("numpy.core.multiarray failed to import") * */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1037, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1038 * _import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_umath() except -1: */ __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1038, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(1, 1038, __pyx_L5_except_error) } goto __pyx_L5_except_error; __pyx_L5_except_error:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1035 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< * _import_array() * except Exception: */ __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L8_try_end:; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1034 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< * try: * _import_array() */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1040 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< * try: * _import_umath() */ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; __Pyx_RefNannySetupContext("import_umath", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1041 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1042 * cdef inline int import_umath() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< * except Exception: * raise ImportError("numpy.core.umath failed to import") */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1042, __pyx_L3_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1041 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L8_try_end; __pyx_L3_error:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1043 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< * raise ImportError("numpy.core.umath failed to import") * */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1043, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1044 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_ufunc() except -1: */ __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1044, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(1, 1044, __pyx_L5_except_error) } goto __pyx_L5_except_error; __pyx_L5_except_error:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1041 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L8_try_end:; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1040 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< * try: * _import_umath() */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1046 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< * try: * _import_umath() */ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; __Pyx_RefNannySetupContext("import_ufunc", 0); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1047 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1048 * cdef inline int import_ufunc() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< * except Exception: * raise ImportError("numpy.core.umath failed to import") */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 1048, __pyx_L3_error) /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1047 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L8_try_end; __pyx_L3_error:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1049 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< * raise ImportError("numpy.core.umath failed to import") */ __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_4) { __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(1, 1049, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_6); __Pyx_GOTREF(__pyx_t_7); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1050 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< */ __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 1050, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_Raise(__pyx_t_8, 0, 0, 0); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __PYX_ERR(1, 1050, __pyx_L5_except_error) } goto __pyx_L5_except_error; __pyx_L5_except_error:; /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1047 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< * _import_umath() * except Exception: */ __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); goto __pyx_L1_error; __pyx_L8_try_end:; } /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1046 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< * try: * _import_umath() */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":122 * cdef bint dtype_is_object * * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< * mode="c", bint allocate_buffer=True): * */ /* Python wrapper */ static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_shape = 0; Py_ssize_t __pyx_v_itemsize; PyObject *__pyx_v_format = 0; PyObject *__pyx_v_mode = 0; int __pyx_v_allocate_buffer; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0}; PyObject* values[5] = {0,0,0,0,0}; values[3] = ((PyObject *)__pyx_n_s_c); if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(2, 122, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(2, 122, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); if (value) { values[3] = value; kw_args--; } } CYTHON_FALLTHROUGH; case 4: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer); if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 122, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); CYTHON_FALLTHROUGH; case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_shape = ((PyObject*)values[0]); __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 122, __pyx_L3_error) __pyx_v_format = values[2]; __pyx_v_mode = values[3]; if (values[4]) { __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 123, __pyx_L3_error) } else { /* "View.MemoryView":123 * * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<< * * cdef int idx */ __pyx_v_allocate_buffer = ((int)1); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 122, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(2, 122, __pyx_L1_error) if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) { PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(2, 122, __pyx_L1_error) } __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer); /* "View.MemoryView":122 * cdef bint dtype_is_object * * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< * mode="c", bint allocate_buffer=True): * */ /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) { int __pyx_v_idx; Py_ssize_t __pyx_v_i; Py_ssize_t __pyx_v_dim; PyObject **__pyx_v_p; char __pyx_v_order; int __pyx_r; __Pyx_RefNannyDeclarations Py_ssize_t __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; char *__pyx_t_7; int __pyx_t_8; Py_ssize_t __pyx_t_9; PyObject *__pyx_t_10 = NULL; Py_ssize_t __pyx_t_11; __Pyx_RefNannySetupContext("__cinit__", 0); __Pyx_INCREF(__pyx_v_format); /* "View.MemoryView":129 * cdef PyObject **p * * self.ndim = len(shape) # <<<<<<<<<<<<<< * self.itemsize = itemsize * */ if (unlikely(__pyx_v_shape == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 129, __pyx_L1_error) } __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 129, __pyx_L1_error) __pyx_v_self->ndim = ((int)__pyx_t_1); /* "View.MemoryView":130 * * self.ndim = len(shape) * self.itemsize = itemsize # <<<<<<<<<<<<<< * * if not self.ndim: */ __pyx_v_self->itemsize = __pyx_v_itemsize; /* "View.MemoryView":132 * self.itemsize = itemsize * * if not self.ndim: # <<<<<<<<<<<<<< * raise ValueError("Empty shape tuple for cython.array") * */ __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0); if (unlikely(__pyx_t_2)) { /* "View.MemoryView":133 * * if not self.ndim: * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< * * if itemsize <= 0: */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 133, __pyx_L1_error) /* "View.MemoryView":132 * self.itemsize = itemsize * * if not self.ndim: # <<<<<<<<<<<<<< * raise ValueError("Empty shape tuple for cython.array") * */ } /* "View.MemoryView":135 * raise ValueError("Empty shape tuple for cython.array") * * if itemsize <= 0: # <<<<<<<<<<<<<< * raise ValueError("itemsize <= 0 for cython.array") * */ __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0); if (unlikely(__pyx_t_2)) { /* "View.MemoryView":136 * * if itemsize <= 0: * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< * * if not isinstance(format, bytes): */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 136, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 136, __pyx_L1_error) /* "View.MemoryView":135 * raise ValueError("Empty shape tuple for cython.array") * * if itemsize <= 0: # <<<<<<<<<<<<<< * raise ValueError("itemsize <= 0 for cython.array") * */ } /* "View.MemoryView":138 * raise ValueError("itemsize <= 0 for cython.array") * * if not isinstance(format, bytes): # <<<<<<<<<<<<<< * format = format.encode('ASCII') * self._format = format # keep a reference to the byte string */ __pyx_t_2 = PyBytes_Check(__pyx_v_format); __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0); if (__pyx_t_4) { /* "View.MemoryView":139 * * if not isinstance(format, bytes): * format = format.encode('ASCII') # <<<<<<<<<<<<<< * self._format = format # keep a reference to the byte string * self.format = self._format */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 139, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":138 * raise ValueError("itemsize <= 0 for cython.array") * * if not isinstance(format, bytes): # <<<<<<<<<<<<<< * format = format.encode('ASCII') * self._format = format # keep a reference to the byte string */ } /* "View.MemoryView":140 * if not isinstance(format, bytes): * format = format.encode('ASCII') * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<< * self.format = self._format * */ if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(2, 140, __pyx_L1_error) __pyx_t_3 = __pyx_v_format; __Pyx_INCREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); __Pyx_GOTREF(__pyx_v_self->_format); __Pyx_DECREF(__pyx_v_self->_format); __pyx_v_self->_format = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":141 * format = format.encode('ASCII') * self._format = format # keep a reference to the byte string * self.format = self._format # <<<<<<<<<<<<<< * * */ if (unlikely(__pyx_v_self->_format == Py_None)) { PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); __PYX_ERR(2, 141, __pyx_L1_error) } __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(2, 141, __pyx_L1_error) __pyx_v_self->format = __pyx_t_7; /* "View.MemoryView":144 * * * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<< * self._strides = self._shape + self.ndim * */ __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2))); /* "View.MemoryView":145 * * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<< * * if not self._shape: */ __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim); /* "View.MemoryView":147 * self._strides = self._shape + self.ndim * * if not self._shape: # <<<<<<<<<<<<<< * raise MemoryError("unable to allocate shape and strides.") * */ __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0); if (unlikely(__pyx_t_4)) { /* "View.MemoryView":148 * * if not self._shape: * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< * * */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 148, __pyx_L1_error) /* "View.MemoryView":147 * self._strides = self._shape + self.ndim * * if not self._shape: # <<<<<<<<<<<<<< * raise MemoryError("unable to allocate shape and strides.") * */ } /* "View.MemoryView":151 * * * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< * if dim <= 0: * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) */ __pyx_t_8 = 0; __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; for (;;) { if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(2, 151, __pyx_L1_error) #else __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 151, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 151, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_dim = __pyx_t_9; __pyx_v_idx = __pyx_t_8; __pyx_t_8 = (__pyx_t_8 + 1); /* "View.MemoryView":152 * * for idx, dim in enumerate(shape): * if dim <= 0: # <<<<<<<<<<<<<< * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) * self._shape[idx] = dim */ __pyx_t_4 = ((__pyx_v_dim <= 0) != 0); if (unlikely(__pyx_t_4)) { /* "View.MemoryView":153 * for idx, dim in enumerate(shape): * if dim <= 0: * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<< * self._shape[idx] = dim * */ __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 153, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_Raise(__pyx_t_10, 0, 0, 0); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(2, 153, __pyx_L1_error) /* "View.MemoryView":152 * * for idx, dim in enumerate(shape): * if dim <= 0: # <<<<<<<<<<<<<< * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) * self._shape[idx] = dim */ } /* "View.MemoryView":154 * if dim <= 0: * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) * self._shape[idx] = dim # <<<<<<<<<<<<<< * * cdef char order */ (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim; /* "View.MemoryView":151 * * * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<< * if dim <= 0: * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":157 * * cdef char order * if mode == 'fortran': # <<<<<<<<<<<<<< * order = b'F' * self.mode = u'fortran' */ __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 157, __pyx_L1_error) if (__pyx_t_4) { /* "View.MemoryView":158 * cdef char order * if mode == 'fortran': * order = b'F' # <<<<<<<<<<<<<< * self.mode = u'fortran' * elif mode == 'c': */ __pyx_v_order = 'F'; /* "View.MemoryView":159 * if mode == 'fortran': * order = b'F' * self.mode = u'fortran' # <<<<<<<<<<<<<< * elif mode == 'c': * order = b'C' */ __Pyx_INCREF(__pyx_n_u_fortran); __Pyx_GIVEREF(__pyx_n_u_fortran); __Pyx_GOTREF(__pyx_v_self->mode); __Pyx_DECREF(__pyx_v_self->mode); __pyx_v_self->mode = __pyx_n_u_fortran; /* "View.MemoryView":157 * * cdef char order * if mode == 'fortran': # <<<<<<<<<<<<<< * order = b'F' * self.mode = u'fortran' */ goto __pyx_L10; } /* "View.MemoryView":160 * order = b'F' * self.mode = u'fortran' * elif mode == 'c': # <<<<<<<<<<<<<< * order = b'C' * self.mode = u'c' */ __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(2, 160, __pyx_L1_error) if (likely(__pyx_t_4)) { /* "View.MemoryView":161 * self.mode = u'fortran' * elif mode == 'c': * order = b'C' # <<<<<<<<<<<<<< * self.mode = u'c' * else: */ __pyx_v_order = 'C'; /* "View.MemoryView":162 * elif mode == 'c': * order = b'C' * self.mode = u'c' # <<<<<<<<<<<<<< * else: * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) */ __Pyx_INCREF(__pyx_n_u_c); __Pyx_GIVEREF(__pyx_n_u_c); __Pyx_GOTREF(__pyx_v_self->mode); __Pyx_DECREF(__pyx_v_self->mode); __pyx_v_self->mode = __pyx_n_u_c; /* "View.MemoryView":160 * order = b'F' * self.mode = u'fortran' * elif mode == 'c': # <<<<<<<<<<<<<< * order = b'C' * self.mode = u'c' */ goto __pyx_L10; } /* "View.MemoryView":164 * self.mode = u'c' * else: * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<< * * self.len = fill_contig_strides_array(self._shape, self._strides, */ /*else*/ { __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 164, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_10, 0, 0, 0); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(2, 164, __pyx_L1_error) } __pyx_L10:; /* "View.MemoryView":166 * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) * * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<< * itemsize, self.ndim, order) * */ __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order); /* "View.MemoryView":169 * itemsize, self.ndim, order) * * self.free_data = allocate_buffer # <<<<<<<<<<<<<< * self.dtype_is_object = format == b'O' * if allocate_buffer: */ __pyx_v_self->free_data = __pyx_v_allocate_buffer; /* "View.MemoryView":170 * * self.free_data = allocate_buffer * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<< * if allocate_buffer: * */ __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 170, __pyx_L1_error) __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 170, __pyx_L1_error) __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __pyx_v_self->dtype_is_object = __pyx_t_4; /* "View.MemoryView":171 * self.free_data = allocate_buffer * self.dtype_is_object = format == b'O' * if allocate_buffer: # <<<<<<<<<<<<<< * * */ __pyx_t_4 = (__pyx_v_allocate_buffer != 0); if (__pyx_t_4) { /* "View.MemoryView":174 * * * self.data = malloc(self.len) # <<<<<<<<<<<<<< * if not self.data: * raise MemoryError("unable to allocate array data.") */ __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len)); /* "View.MemoryView":175 * * self.data = malloc(self.len) * if not self.data: # <<<<<<<<<<<<<< * raise MemoryError("unable to allocate array data.") * */ __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0); if (unlikely(__pyx_t_4)) { /* "View.MemoryView":176 * self.data = malloc(self.len) * if not self.data: * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< * * if self.dtype_is_object: */ __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 176, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_Raise(__pyx_t_10, 0, 0, 0); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __PYX_ERR(2, 176, __pyx_L1_error) /* "View.MemoryView":175 * * self.data = malloc(self.len) * if not self.data: # <<<<<<<<<<<<<< * raise MemoryError("unable to allocate array data.") * */ } /* "View.MemoryView":178 * raise MemoryError("unable to allocate array data.") * * if self.dtype_is_object: # <<<<<<<<<<<<<< * p = self.data * for i in range(self.len / itemsize): */ __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0); if (__pyx_t_4) { /* "View.MemoryView":179 * * if self.dtype_is_object: * p = self.data # <<<<<<<<<<<<<< * for i in range(self.len / itemsize): * p[i] = Py_None */ __pyx_v_p = ((PyObject **)__pyx_v_self->data); /* "View.MemoryView":180 * if self.dtype_is_object: * p = self.data * for i in range(self.len / itemsize): # <<<<<<<<<<<<<< * p[i] = Py_None * Py_INCREF(Py_None) */ if (unlikely(__pyx_v_itemsize == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(2, 180, __pyx_L1_error) } else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(2, 180, __pyx_L1_error) } __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize); __pyx_t_9 = __pyx_t_1; for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; /* "View.MemoryView":181 * p = self.data * for i in range(self.len / itemsize): * p[i] = Py_None # <<<<<<<<<<<<<< * Py_INCREF(Py_None) * */ (__pyx_v_p[__pyx_v_i]) = Py_None; /* "View.MemoryView":182 * for i in range(self.len / itemsize): * p[i] = Py_None * Py_INCREF(Py_None) # <<<<<<<<<<<<<< * * @cname('getbuffer') */ Py_INCREF(Py_None); } /* "View.MemoryView":178 * raise MemoryError("unable to allocate array data.") * * if self.dtype_is_object: # <<<<<<<<<<<<<< * p = self.data * for i in range(self.len / itemsize): */ } /* "View.MemoryView":171 * self.free_data = allocate_buffer * self.dtype_is_object = format == b'O' * if allocate_buffer: # <<<<<<<<<<<<<< * * */ } /* "View.MemoryView":122 * cdef bint dtype_is_object * * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<< * mode="c", bint allocate_buffer=True): * */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_XDECREF(__pyx_v_format); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":185 * * @cname('getbuffer') * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< * cdef int bufmode = -1 * if self.mode == u"c": */ /* Python wrapper */ static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_v_bufmode; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; char *__pyx_t_4; Py_ssize_t __pyx_t_5; int __pyx_t_6; Py_ssize_t *__pyx_t_7; if (__pyx_v_info == NULL) { PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); return -1; } __Pyx_RefNannySetupContext("__getbuffer__", 0); __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); __Pyx_GIVEREF(__pyx_v_info->obj); /* "View.MemoryView":186 * @cname('getbuffer') * def __getbuffer__(self, Py_buffer *info, int flags): * cdef int bufmode = -1 # <<<<<<<<<<<<<< * if self.mode == u"c": * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS */ __pyx_v_bufmode = -1; /* "View.MemoryView":187 * def __getbuffer__(self, Py_buffer *info, int flags): * cdef int bufmode = -1 * if self.mode == u"c": # <<<<<<<<<<<<<< * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * elif self.mode == u"fortran": */ __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 187, __pyx_L1_error) __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":188 * cdef int bufmode = -1 * if self.mode == u"c": * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< * elif self.mode == u"fortran": * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS */ __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); /* "View.MemoryView":187 * def __getbuffer__(self, Py_buffer *info, int flags): * cdef int bufmode = -1 * if self.mode == u"c": # <<<<<<<<<<<<<< * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * elif self.mode == u"fortran": */ goto __pyx_L3; } /* "View.MemoryView":189 * if self.mode == u"c": * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * elif self.mode == u"fortran": # <<<<<<<<<<<<<< * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * if not (flags & bufmode): */ __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 189, __pyx_L1_error) __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "View.MemoryView":190 * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * elif self.mode == u"fortran": * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<< * if not (flags & bufmode): * raise ValueError("Can only create a buffer that is contiguous in memory.") */ __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS); /* "View.MemoryView":189 * if self.mode == u"c": * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * elif self.mode == u"fortran": # <<<<<<<<<<<<<< * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * if not (flags & bufmode): */ } __pyx_L3:; /* "View.MemoryView":191 * elif self.mode == u"fortran": * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * if not (flags & bufmode): # <<<<<<<<<<<<<< * raise ValueError("Can only create a buffer that is contiguous in memory.") * info.buf = self.data */ __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0); if (unlikely(__pyx_t_1)) { /* "View.MemoryView":192 * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * if not (flags & bufmode): * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< * info.buf = self.data * info.len = self.len */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 192, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 192, __pyx_L1_error) /* "View.MemoryView":191 * elif self.mode == u"fortran": * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * if not (flags & bufmode): # <<<<<<<<<<<<<< * raise ValueError("Can only create a buffer that is contiguous in memory.") * info.buf = self.data */ } /* "View.MemoryView":193 * if not (flags & bufmode): * raise ValueError("Can only create a buffer that is contiguous in memory.") * info.buf = self.data # <<<<<<<<<<<<<< * info.len = self.len * info.ndim = self.ndim */ __pyx_t_4 = __pyx_v_self->data; __pyx_v_info->buf = __pyx_t_4; /* "View.MemoryView":194 * raise ValueError("Can only create a buffer that is contiguous in memory.") * info.buf = self.data * info.len = self.len # <<<<<<<<<<<<<< * info.ndim = self.ndim * info.shape = self._shape */ __pyx_t_5 = __pyx_v_self->len; __pyx_v_info->len = __pyx_t_5; /* "View.MemoryView":195 * info.buf = self.data * info.len = self.len * info.ndim = self.ndim # <<<<<<<<<<<<<< * info.shape = self._shape * info.strides = self._strides */ __pyx_t_6 = __pyx_v_self->ndim; __pyx_v_info->ndim = __pyx_t_6; /* "View.MemoryView":196 * info.len = self.len * info.ndim = self.ndim * info.shape = self._shape # <<<<<<<<<<<<<< * info.strides = self._strides * info.suboffsets = NULL */ __pyx_t_7 = __pyx_v_self->_shape; __pyx_v_info->shape = __pyx_t_7; /* "View.MemoryView":197 * info.ndim = self.ndim * info.shape = self._shape * info.strides = self._strides # <<<<<<<<<<<<<< * info.suboffsets = NULL * info.itemsize = self.itemsize */ __pyx_t_7 = __pyx_v_self->_strides; __pyx_v_info->strides = __pyx_t_7; /* "View.MemoryView":198 * info.shape = self._shape * info.strides = self._strides * info.suboffsets = NULL # <<<<<<<<<<<<<< * info.itemsize = self.itemsize * info.readonly = 0 */ __pyx_v_info->suboffsets = NULL; /* "View.MemoryView":199 * info.strides = self._strides * info.suboffsets = NULL * info.itemsize = self.itemsize # <<<<<<<<<<<<<< * info.readonly = 0 * */ __pyx_t_5 = __pyx_v_self->itemsize; __pyx_v_info->itemsize = __pyx_t_5; /* "View.MemoryView":200 * info.suboffsets = NULL * info.itemsize = self.itemsize * info.readonly = 0 # <<<<<<<<<<<<<< * * if flags & PyBUF_FORMAT: */ __pyx_v_info->readonly = 0; /* "View.MemoryView":202 * info.readonly = 0 * * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< * info.format = self.format * else: */ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); if (__pyx_t_1) { /* "View.MemoryView":203 * * if flags & PyBUF_FORMAT: * info.format = self.format # <<<<<<<<<<<<<< * else: * info.format = NULL */ __pyx_t_4 = __pyx_v_self->format; __pyx_v_info->format = __pyx_t_4; /* "View.MemoryView":202 * info.readonly = 0 * * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< * info.format = self.format * else: */ goto __pyx_L5; } /* "View.MemoryView":205 * info.format = self.format * else: * info.format = NULL # <<<<<<<<<<<<<< * * info.obj = self */ /*else*/ { __pyx_v_info->format = NULL; } __pyx_L5:; /* "View.MemoryView":207 * info.format = NULL * * info.obj = self # <<<<<<<<<<<<<< * * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") */ __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = ((PyObject *)__pyx_v_self); /* "View.MemoryView":185 * * @cname('getbuffer') * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< * cdef int bufmode = -1 * if self.mode == u"c": */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; if (__pyx_v_info->obj != NULL) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; } goto __pyx_L2; __pyx_L0:; if (__pyx_v_info->obj == Py_None) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; } __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":211 * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") * * def __dealloc__(array self): # <<<<<<<<<<<<<< * if self.callback_free_data != NULL: * self.callback_free_data(self.data) */ /* Python wrapper */ static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_array___dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); } static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) { __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("__dealloc__", 0); /* "View.MemoryView":212 * * def __dealloc__(array self): * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< * self.callback_free_data(self.data) * elif self.free_data: */ __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":213 * def __dealloc__(array self): * if self.callback_free_data != NULL: * self.callback_free_data(self.data) # <<<<<<<<<<<<<< * elif self.free_data: * if self.dtype_is_object: */ __pyx_v_self->callback_free_data(__pyx_v_self->data); /* "View.MemoryView":212 * * def __dealloc__(array self): * if self.callback_free_data != NULL: # <<<<<<<<<<<<<< * self.callback_free_data(self.data) * elif self.free_data: */ goto __pyx_L3; } /* "View.MemoryView":214 * if self.callback_free_data != NULL: * self.callback_free_data(self.data) * elif self.free_data: # <<<<<<<<<<<<<< * if self.dtype_is_object: * refcount_objects_in_slice(self.data, self._shape, */ __pyx_t_1 = (__pyx_v_self->free_data != 0); if (__pyx_t_1) { /* "View.MemoryView":215 * self.callback_free_data(self.data) * elif self.free_data: * if self.dtype_is_object: # <<<<<<<<<<<<<< * refcount_objects_in_slice(self.data, self._shape, * self._strides, self.ndim, False) */ __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); if (__pyx_t_1) { /* "View.MemoryView":216 * elif self.free_data: * if self.dtype_is_object: * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<< * self._strides, self.ndim, False) * free(self.data) */ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0); /* "View.MemoryView":215 * self.callback_free_data(self.data) * elif self.free_data: * if self.dtype_is_object: # <<<<<<<<<<<<<< * refcount_objects_in_slice(self.data, self._shape, * self._strides, self.ndim, False) */ } /* "View.MemoryView":218 * refcount_objects_in_slice(self.data, self._shape, * self._strides, self.ndim, False) * free(self.data) # <<<<<<<<<<<<<< * PyObject_Free(self._shape) * */ free(__pyx_v_self->data); /* "View.MemoryView":214 * if self.callback_free_data != NULL: * self.callback_free_data(self.data) * elif self.free_data: # <<<<<<<<<<<<<< * if self.dtype_is_object: * refcount_objects_in_slice(self.data, self._shape, */ } __pyx_L3:; /* "View.MemoryView":219 * self._strides, self.ndim, False) * free(self.data) * PyObject_Free(self._shape) # <<<<<<<<<<<<<< * * @property */ PyObject_Free(__pyx_v_self->_shape); /* "View.MemoryView":211 * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") * * def __dealloc__(array self): # <<<<<<<<<<<<<< * if self.callback_free_data != NULL: * self.callback_free_data(self.data) */ /* function exit code */ __Pyx_RefNannyFinishContext(); } /* "View.MemoryView":222 * * @property * def memview(self): # <<<<<<<<<<<<<< * return self.get_memview() * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":223 * @property * def memview(self): * return self.get_memview() # <<<<<<<<<<<<<< * * @cname('get_memview') */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "View.MemoryView":222 * * @property * def memview(self): # <<<<<<<<<<<<<< * return self.get_memview() * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":226 * * @cname('get_memview') * cdef get_memview(self): # <<<<<<<<<<<<<< * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE * return memoryview(self, flags, self.dtype_is_object) */ static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) { int __pyx_v_flags; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("get_memview", 0); /* "View.MemoryView":227 * @cname('get_memview') * cdef get_memview(self): * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<< * return memoryview(self, flags, self.dtype_is_object) * */ __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE); /* "View.MemoryView":228 * cdef get_memview(self): * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<< * * def __len__(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":226 * * @cname('get_memview') * cdef get_memview(self): # <<<<<<<<<<<<<< * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE * return memoryview(self, flags, self.dtype_is_object) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":230 * return memoryview(self, flags, self.dtype_is_object) * * def __len__(self): # <<<<<<<<<<<<<< * return self._shape[0] * */ /* Python wrapper */ static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/ static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) { Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) { Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__", 0); /* "View.MemoryView":231 * * def __len__(self): * return self._shape[0] # <<<<<<<<<<<<<< * * def __getattr__(self, attr): */ __pyx_r = (__pyx_v_self->_shape[0]); goto __pyx_L0; /* "View.MemoryView":230 * return memoryview(self, flags, self.dtype_is_object) * * def __len__(self): # <<<<<<<<<<<<<< * return self._shape[0] * */ /* function exit code */ __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":233 * return self._shape[0] * * def __getattr__(self, attr): # <<<<<<<<<<<<<< * return getattr(self.memview, attr) * */ /* Python wrapper */ static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/ static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("__getattr__", 0); /* "View.MemoryView":234 * * def __getattr__(self, attr): * return getattr(self.memview, attr) # <<<<<<<<<<<<<< * * def __getitem__(self, item): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":233 * return self._shape[0] * * def __getattr__(self, attr): # <<<<<<<<<<<<<< * return getattr(self.memview, attr) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":236 * return getattr(self.memview, attr) * * def __getitem__(self, item): # <<<<<<<<<<<<<< * return self.memview[item] * */ /* Python wrapper */ static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("__getitem__", 0); /* "View.MemoryView":237 * * def __getitem__(self, item): * return self.memview[item] # <<<<<<<<<<<<<< * * def __setitem__(self, item, value): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 237, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 237, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":236 * return getattr(self.memview, attr) * * def __getitem__(self, item): # <<<<<<<<<<<<<< * return self.memview[item] * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":239 * return self.memview[item] * * def __setitem__(self, item, value): # <<<<<<<<<<<<<< * self.memview[item] = value * */ /* Python wrapper */ static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/ static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__setitem__", 0); /* "View.MemoryView":240 * * def __setitem__(self, item, value): * self.memview[item] = value # <<<<<<<<<<<<<< * * */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(2, 240, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "View.MemoryView":239 * return self.memview[item] * * def __setitem__(self, item, value): # <<<<<<<<<<<<<< * self.memview[item] = value * */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__reduce_cython__", 0); /* "(tree fragment)":2 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(2, 2, __pyx_L1_error) /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":3 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__setstate_cython__", 0); /* "(tree fragment)":4 * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(2, 4, __pyx_L1_error) /* "(tree fragment)":3 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":244 * * @cname("__pyx_array_new") * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< * char *mode, char *buf): * cdef array result */ static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) { struct __pyx_array_obj *__pyx_v_result = 0; struct __pyx_array_obj *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("array_cwrapper", 0); /* "View.MemoryView":248 * cdef array result * * if buf == NULL: # <<<<<<<<<<<<<< * result = array(shape, itemsize, format, mode.decode('ASCII')) * else: */ __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":249 * * if buf == NULL: * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<< * else: * result = array(shape, itemsize, format, mode.decode('ASCII'), */ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(__pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4); __pyx_t_4 = 0; /* "View.MemoryView":248 * cdef array result * * if buf == NULL: # <<<<<<<<<<<<<< * result = array(shape, itemsize, format, mode.decode('ASCII')) * else: */ goto __pyx_L3; } /* "View.MemoryView":251 * result = array(shape, itemsize, format, mode.decode('ASCII')) * else: * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< * allocate_buffer=False) * result.data = buf */ /*else*/ { __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_shape); __Pyx_GIVEREF(__pyx_v_shape); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_3 = 0; /* "View.MemoryView":252 * else: * result = array(shape, itemsize, format, mode.decode('ASCII'), * allocate_buffer=False) # <<<<<<<<<<<<<< * result.data = buf * */ __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 252, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(2, 252, __pyx_L1_error) /* "View.MemoryView":251 * result = array(shape, itemsize, format, mode.decode('ASCII')) * else: * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<< * allocate_buffer=False) * result.data = buf */ __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5); __pyx_t_5 = 0; /* "View.MemoryView":253 * result = array(shape, itemsize, format, mode.decode('ASCII'), * allocate_buffer=False) * result.data = buf # <<<<<<<<<<<<<< * * return result */ __pyx_v_result->data = __pyx_v_buf; } __pyx_L3:; /* "View.MemoryView":255 * result.data = buf * * return result # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = __pyx_v_result; goto __pyx_L0; /* "View.MemoryView":244 * * @cname("__pyx_array_new") * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<< * char *mode, char *buf): * cdef array result */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_result); __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":281 * cdef class Enum(object): * cdef object name * def __init__(self, name): # <<<<<<<<<<<<<< * self.name = name * def __repr__(self): */ /* Python wrapper */ static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_name = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0}; PyObject* values[1] = {0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 281, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); } __pyx_v_name = values[0]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 281, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__", 0); /* "View.MemoryView":282 * cdef object name * def __init__(self, name): * self.name = name # <<<<<<<<<<<<<< * def __repr__(self): * return self.name */ __Pyx_INCREF(__pyx_v_name); __Pyx_GIVEREF(__pyx_v_name); __Pyx_GOTREF(__pyx_v_self->name); __Pyx_DECREF(__pyx_v_self->name); __pyx_v_self->name = __pyx_v_name; /* "View.MemoryView":281 * cdef class Enum(object): * cdef object name * def __init__(self, name): # <<<<<<<<<<<<<< * self.name = name * def __repr__(self): */ /* function exit code */ __pyx_r = 0; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":283 * def __init__(self, name): * self.name = name * def __repr__(self): # <<<<<<<<<<<<<< * return self.name * */ /* Python wrapper */ static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__", 0); /* "View.MemoryView":284 * self.name = name * def __repr__(self): * return self.name # <<<<<<<<<<<<<< * * cdef generic = Enum("") */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->name); __pyx_r = __pyx_v_self->name; goto __pyx_L0; /* "View.MemoryView":283 * def __init__(self, name): * self.name = name * def __repr__(self): # <<<<<<<<<<<<<< * return self.name * */ /* function exit code */ __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * cdef tuple state * cdef object _dict */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) { PyObject *__pyx_v_state = 0; PyObject *__pyx_v__dict = 0; int __pyx_v_use_setstate; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("__reduce_cython__", 0); /* "(tree fragment)":5 * cdef object _dict * cdef bint use_setstate * state = (self.name,) # <<<<<<<<<<<<<< * _dict = getattr(self, '__dict__', None) * if _dict is not None: */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self->name); __Pyx_GIVEREF(__pyx_v_self->name); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); __pyx_v_state = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":6 * cdef bint use_setstate * state = (self.name,) * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< * if _dict is not None: * state += (_dict,) */ __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v__dict = __pyx_t_1; __pyx_t_1 = 0; /* "(tree fragment)":7 * state = (self.name,) * _dict = getattr(self, '__dict__', None) * if _dict is not None: # <<<<<<<<<<<<<< * state += (_dict,) * use_setstate = True */ __pyx_t_2 = (__pyx_v__dict != Py_None); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) * if _dict is not None: * state += (_dict,) # <<<<<<<<<<<<<< * use_setstate = True * else: */ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); __pyx_t_4 = 0; /* "(tree fragment)":9 * if _dict is not None: * state += (_dict,) * use_setstate = True # <<<<<<<<<<<<<< * else: * use_setstate = self.name is not None */ __pyx_v_use_setstate = 1; /* "(tree fragment)":7 * state = (self.name,) * _dict = getattr(self, '__dict__', None) * if _dict is not None: # <<<<<<<<<<<<<< * state += (_dict,) * use_setstate = True */ goto __pyx_L3; } /* "(tree fragment)":11 * use_setstate = True * else: * use_setstate = self.name is not None # <<<<<<<<<<<<<< * if use_setstate: * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state */ /*else*/ { __pyx_t_3 = (__pyx_v_self->name != Py_None); __pyx_v_use_setstate = __pyx_t_3; } __pyx_L3:; /* "(tree fragment)":12 * else: * use_setstate = self.name is not None * if use_setstate: # <<<<<<<<<<<<<< * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state * else: */ __pyx_t_3 = (__pyx_v_use_setstate != 0); if (__pyx_t_3) { /* "(tree fragment)":13 * use_setstate = self.name is not None * if use_setstate: * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<< * else: * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_INCREF(__pyx_int_184977713); __Pyx_GIVEREF(__pyx_int_184977713); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; /* "(tree fragment)":12 * else: * use_setstate = self.name is not None * if use_setstate: # <<<<<<<<<<<<<< * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state * else: */ } /* "(tree fragment)":15 * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state * else: * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ /*else*/ { __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_INCREF(__pyx_int_184977713); __Pyx_GIVEREF(__pyx_int_184977713); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); __pyx_t_5 = 0; __pyx_t_1 = 0; __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * cdef tuple state * cdef object _dict */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_state); __Pyx_XDECREF(__pyx_v__dict); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":16 * else: * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__setstate_cython__", 0); /* "(tree fragment)":17 * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_Enum__set_state(self, __pyx_state) */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":298 * * @cname('__pyx_align_pointer') * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< * "Align pointer memory on a given boundary" * cdef Py_intptr_t aligned_p = memory */ static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) { Py_intptr_t __pyx_v_aligned_p; size_t __pyx_v_offset; void *__pyx_r; int __pyx_t_1; /* "View.MemoryView":300 * cdef void *align_pointer(void *memory, size_t alignment) nogil: * "Align pointer memory on a given boundary" * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<< * cdef size_t offset * */ __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory); /* "View.MemoryView":304 * * with cython.cdivision(True): * offset = aligned_p % alignment # <<<<<<<<<<<<<< * * if offset > 0: */ __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment); /* "View.MemoryView":306 * offset = aligned_p % alignment * * if offset > 0: # <<<<<<<<<<<<<< * aligned_p += alignment - offset * */ __pyx_t_1 = ((__pyx_v_offset > 0) != 0); if (__pyx_t_1) { /* "View.MemoryView":307 * * if offset > 0: * aligned_p += alignment - offset # <<<<<<<<<<<<<< * * return aligned_p */ __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset)); /* "View.MemoryView":306 * offset = aligned_p % alignment * * if offset > 0: # <<<<<<<<<<<<<< * aligned_p += alignment - offset * */ } /* "View.MemoryView":309 * aligned_p += alignment - offset * * return aligned_p # <<<<<<<<<<<<<< * * */ __pyx_r = ((void *)__pyx_v_aligned_p); goto __pyx_L0; /* "View.MemoryView":298 * * @cname('__pyx_align_pointer') * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<< * "Align pointer memory on a given boundary" * cdef Py_intptr_t aligned_p = memory */ /* function exit code */ __pyx_L0:; return __pyx_r; } /* "View.MemoryView":345 * cdef __Pyx_TypeInfo *typeinfo * * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< * self.obj = obj * self.flags = flags */ /* Python wrapper */ static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_obj = 0; int __pyx_v_flags; int __pyx_v_dtype_is_object; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(2, 345, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (kw_args > 0) { PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object); if (value) { values[2] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(2, 345, __pyx_L3_error) } } else { switch (PyTuple_GET_SIZE(__pyx_args)) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[0] = PyTuple_GET_ITEM(__pyx_args, 0); break; default: goto __pyx_L5_argtuple_error; } } __pyx_v_obj = values[0]; __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 345, __pyx_L3_error) if (values[2]) { __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 345, __pyx_L3_error) } else { __pyx_v_dtype_is_object = ((int)0); } } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 345, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) { int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; __Pyx_RefNannySetupContext("__cinit__", 0); /* "View.MemoryView":346 * * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): * self.obj = obj # <<<<<<<<<<<<<< * self.flags = flags * if type(self) is memoryview or obj is not None: */ __Pyx_INCREF(__pyx_v_obj); __Pyx_GIVEREF(__pyx_v_obj); __Pyx_GOTREF(__pyx_v_self->obj); __Pyx_DECREF(__pyx_v_self->obj); __pyx_v_self->obj = __pyx_v_obj; /* "View.MemoryView":347 * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): * self.obj = obj * self.flags = flags # <<<<<<<<<<<<<< * if type(self) is memoryview or obj is not None: * __Pyx_GetBuffer(obj, &self.view, flags) */ __pyx_v_self->flags = __pyx_v_flags; /* "View.MemoryView":348 * self.obj = obj * self.flags = flags * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< * __Pyx_GetBuffer(obj, &self.view, flags) * if self.view.obj == NULL: */ __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type)); __pyx_t_3 = (__pyx_t_2 != 0); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = (__pyx_v_obj != Py_None); __pyx_t_2 = (__pyx_t_3 != 0); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { /* "View.MemoryView":349 * self.flags = flags * if type(self) is memoryview or obj is not None: * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<< * if self.view.obj == NULL: * (<__pyx_buffer *> &self.view).obj = Py_None */ __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 349, __pyx_L1_error) /* "View.MemoryView":350 * if type(self) is memoryview or obj is not None: * __Pyx_GetBuffer(obj, &self.view, flags) * if self.view.obj == NULL: # <<<<<<<<<<<<<< * (<__pyx_buffer *> &self.view).obj = Py_None * Py_INCREF(Py_None) */ __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":351 * __Pyx_GetBuffer(obj, &self.view, flags) * if self.view.obj == NULL: * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<< * Py_INCREF(Py_None) * */ ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None; /* "View.MemoryView":352 * if self.view.obj == NULL: * (<__pyx_buffer *> &self.view).obj = Py_None * Py_INCREF(Py_None) # <<<<<<<<<<<<<< * * global __pyx_memoryview_thread_locks_used */ Py_INCREF(Py_None); /* "View.MemoryView":350 * if type(self) is memoryview or obj is not None: * __Pyx_GetBuffer(obj, &self.view, flags) * if self.view.obj == NULL: # <<<<<<<<<<<<<< * (<__pyx_buffer *> &self.view).obj = Py_None * Py_INCREF(Py_None) */ } /* "View.MemoryView":348 * self.obj = obj * self.flags = flags * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<< * __Pyx_GetBuffer(obj, &self.view, flags) * if self.view.obj == NULL: */ } /* "View.MemoryView":355 * * global __pyx_memoryview_thread_locks_used * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] * __pyx_memoryview_thread_locks_used += 1 */ __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0); if (__pyx_t_1) { /* "View.MemoryView":356 * global __pyx_memoryview_thread_locks_used * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<< * __pyx_memoryview_thread_locks_used += 1 * if self.lock is NULL: */ __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); /* "View.MemoryView":357 * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<< * if self.lock is NULL: * self.lock = PyThread_allocate_lock() */ __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1); /* "View.MemoryView":355 * * global __pyx_memoryview_thread_locks_used * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<< * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] * __pyx_memoryview_thread_locks_used += 1 */ } /* "View.MemoryView":358 * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] * __pyx_memoryview_thread_locks_used += 1 * if self.lock is NULL: # <<<<<<<<<<<<<< * self.lock = PyThread_allocate_lock() * if self.lock is NULL: */ __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":359 * __pyx_memoryview_thread_locks_used += 1 * if self.lock is NULL: * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<< * if self.lock is NULL: * raise MemoryError */ __pyx_v_self->lock = PyThread_allocate_lock(); /* "View.MemoryView":360 * if self.lock is NULL: * self.lock = PyThread_allocate_lock() * if self.lock is NULL: # <<<<<<<<<<<<<< * raise MemoryError * */ __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0); if (unlikely(__pyx_t_1)) { /* "View.MemoryView":361 * self.lock = PyThread_allocate_lock() * if self.lock is NULL: * raise MemoryError # <<<<<<<<<<<<<< * * if flags & PyBUF_FORMAT: */ PyErr_NoMemory(); __PYX_ERR(2, 361, __pyx_L1_error) /* "View.MemoryView":360 * if self.lock is NULL: * self.lock = PyThread_allocate_lock() * if self.lock is NULL: # <<<<<<<<<<<<<< * raise MemoryError * */ } /* "View.MemoryView":358 * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] * __pyx_memoryview_thread_locks_used += 1 * if self.lock is NULL: # <<<<<<<<<<<<<< * self.lock = PyThread_allocate_lock() * if self.lock is NULL: */ } /* "View.MemoryView":363 * raise MemoryError * * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') * else: */ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); if (__pyx_t_1) { /* "View.MemoryView":364 * * if flags & PyBUF_FORMAT: * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<< * else: * self.dtype_is_object = dtype_is_object */ __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L11_bool_binop_done; } __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0); __pyx_t_1 = __pyx_t_2; __pyx_L11_bool_binop_done:; __pyx_v_self->dtype_is_object = __pyx_t_1; /* "View.MemoryView":363 * raise MemoryError * * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') * else: */ goto __pyx_L10; } /* "View.MemoryView":366 * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') * else: * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<< * * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( */ /*else*/ { __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object; } __pyx_L10:; /* "View.MemoryView":368 * self.dtype_is_object = dtype_is_object * * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<< * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) * self.typeinfo = NULL */ __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int)))); /* "View.MemoryView":370 * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( * &self.acquisition_count[0], sizeof(__pyx_atomic_int)) * self.typeinfo = NULL # <<<<<<<<<<<<<< * * def __dealloc__(memoryview self): */ __pyx_v_self->typeinfo = NULL; /* "View.MemoryView":345 * cdef __Pyx_TypeInfo *typeinfo * * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<< * self.obj = obj * self.flags = flags */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":372 * self.typeinfo = NULL * * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< * if self.obj is not None: * __Pyx_ReleaseBuffer(&self.view) */ /* Python wrapper */ static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); } static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) { int __pyx_v_i; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; PyThread_type_lock __pyx_t_6; PyThread_type_lock __pyx_t_7; __Pyx_RefNannySetupContext("__dealloc__", 0); /* "View.MemoryView":373 * * def __dealloc__(memoryview self): * if self.obj is not None: # <<<<<<<<<<<<<< * __Pyx_ReleaseBuffer(&self.view) * */ __pyx_t_1 = (__pyx_v_self->obj != Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":374 * def __dealloc__(memoryview self): * if self.obj is not None: * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<< * * cdef int i */ __Pyx_ReleaseBuffer((&__pyx_v_self->view)); /* "View.MemoryView":373 * * def __dealloc__(memoryview self): * if self.obj is not None: # <<<<<<<<<<<<<< * __Pyx_ReleaseBuffer(&self.view) * */ } /* "View.MemoryView":378 * cdef int i * global __pyx_memoryview_thread_locks_used * if self.lock != NULL: # <<<<<<<<<<<<<< * for i in range(__pyx_memoryview_thread_locks_used): * if __pyx_memoryview_thread_locks[i] is self.lock: */ __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0); if (__pyx_t_2) { /* "View.MemoryView":379 * global __pyx_memoryview_thread_locks_used * if self.lock != NULL: * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<< * if __pyx_memoryview_thread_locks[i] is self.lock: * __pyx_memoryview_thread_locks_used -= 1 */ __pyx_t_3 = __pyx_memoryview_thread_locks_used; __pyx_t_4 = __pyx_t_3; for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { __pyx_v_i = __pyx_t_5; /* "View.MemoryView":380 * if self.lock != NULL: * for i in range(__pyx_memoryview_thread_locks_used): * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< * __pyx_memoryview_thread_locks_used -= 1 * if i != __pyx_memoryview_thread_locks_used: */ __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0); if (__pyx_t_2) { /* "View.MemoryView":381 * for i in range(__pyx_memoryview_thread_locks_used): * if __pyx_memoryview_thread_locks[i] is self.lock: * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<< * if i != __pyx_memoryview_thread_locks_used: * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( */ __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1); /* "View.MemoryView":382 * if __pyx_memoryview_thread_locks[i] is self.lock: * __pyx_memoryview_thread_locks_used -= 1 * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) */ __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0); if (__pyx_t_2) { /* "View.MemoryView":384 * if i != __pyx_memoryview_thread_locks_used: * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<< * break * else: */ __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]); __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]); /* "View.MemoryView":383 * __pyx_memoryview_thread_locks_used -= 1 * if i != __pyx_memoryview_thread_locks_used: * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<< * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) * break */ (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6; (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7; /* "View.MemoryView":382 * if __pyx_memoryview_thread_locks[i] is self.lock: * __pyx_memoryview_thread_locks_used -= 1 * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<< * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) */ } /* "View.MemoryView":385 * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) * break # <<<<<<<<<<<<<< * else: * PyThread_free_lock(self.lock) */ goto __pyx_L6_break; /* "View.MemoryView":380 * if self.lock != NULL: * for i in range(__pyx_memoryview_thread_locks_used): * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<< * __pyx_memoryview_thread_locks_used -= 1 * if i != __pyx_memoryview_thread_locks_used: */ } } /*else*/ { /* "View.MemoryView":387 * break * else: * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<< * * cdef char *get_item_pointer(memoryview self, object index) except NULL: */ PyThread_free_lock(__pyx_v_self->lock); } __pyx_L6_break:; /* "View.MemoryView":378 * cdef int i * global __pyx_memoryview_thread_locks_used * if self.lock != NULL: # <<<<<<<<<<<<<< * for i in range(__pyx_memoryview_thread_locks_used): * if __pyx_memoryview_thread_locks[i] is self.lock: */ } /* "View.MemoryView":372 * self.typeinfo = NULL * * def __dealloc__(memoryview self): # <<<<<<<<<<<<<< * if self.obj is not None: * __Pyx_ReleaseBuffer(&self.view) */ /* function exit code */ __Pyx_RefNannyFinishContext(); } /* "View.MemoryView":389 * PyThread_free_lock(self.lock) * * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< * cdef Py_ssize_t dim * cdef char *itemp = self.view.buf */ static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { Py_ssize_t __pyx_v_dim; char *__pyx_v_itemp; PyObject *__pyx_v_idx = NULL; char *__pyx_r; __Pyx_RefNannyDeclarations Py_ssize_t __pyx_t_1; PyObject *__pyx_t_2 = NULL; Py_ssize_t __pyx_t_3; PyObject *(*__pyx_t_4)(PyObject *); PyObject *__pyx_t_5 = NULL; Py_ssize_t __pyx_t_6; char *__pyx_t_7; __Pyx_RefNannySetupContext("get_item_pointer", 0); /* "View.MemoryView":391 * cdef char *get_item_pointer(memoryview self, object index) except NULL: * cdef Py_ssize_t dim * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<< * * for dim, idx in enumerate(index): */ __pyx_v_itemp = ((char *)__pyx_v_self->view.buf); /* "View.MemoryView":393 * cdef char *itemp = self.view.buf * * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< * itemp = pybuffer_index(&self.view, itemp, idx, dim) * */ __pyx_t_1 = 0; if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) { __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 393, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_4)) { if (likely(PyList_CheckExact(__pyx_t_2))) { if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 393, __pyx_L1_error) #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } else { if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(2, 393, __pyx_L1_error) #else __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } } else { __pyx_t_5 = __pyx_t_4(__pyx_t_2); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(2, 393, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_5); } __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5); __pyx_t_5 = 0; __pyx_v_dim = __pyx_t_1; __pyx_t_1 = (__pyx_t_1 + 1); /* "View.MemoryView":394 * * for dim, idx in enumerate(index): * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<< * * return itemp */ __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 394, __pyx_L1_error) __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(2, 394, __pyx_L1_error) __pyx_v_itemp = __pyx_t_7; /* "View.MemoryView":393 * cdef char *itemp = self.view.buf * * for dim, idx in enumerate(index): # <<<<<<<<<<<<<< * itemp = pybuffer_index(&self.view, itemp, idx, dim) * */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "View.MemoryView":396 * itemp = pybuffer_index(&self.view, itemp, idx, dim) * * return itemp # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_itemp; goto __pyx_L0; /* "View.MemoryView":389 * PyThread_free_lock(self.lock) * * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<< * cdef Py_ssize_t dim * cdef char *itemp = self.view.buf */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_idx); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":399 * * * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< * if index is Ellipsis: * return self */ /* Python wrapper */ static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) { PyObject *__pyx_v_have_slices = NULL; PyObject *__pyx_v_indices = NULL; char *__pyx_v_itemp; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; char *__pyx_t_6; __Pyx_RefNannySetupContext("__getitem__", 0); /* "View.MemoryView":400 * * def __getitem__(memoryview self, object index): * if index is Ellipsis: # <<<<<<<<<<<<<< * return self * */ __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":401 * def __getitem__(memoryview self, object index): * if index is Ellipsis: * return self # <<<<<<<<<<<<<< * * have_slices, indices = _unellipsify(index, self.view.ndim) */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_self)); __pyx_r = ((PyObject *)__pyx_v_self); goto __pyx_L0; /* "View.MemoryView":400 * * def __getitem__(memoryview self, object index): * if index is Ellipsis: # <<<<<<<<<<<<<< * return self * */ } /* "View.MemoryView":403 * return self * * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< * * cdef char *itemp */ __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (likely(__pyx_t_3 != Py_None)) { PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(2, 403, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 403, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 403, __pyx_L1_error) } __pyx_v_have_slices = __pyx_t_4; __pyx_t_4 = 0; __pyx_v_indices = __pyx_t_5; __pyx_t_5 = 0; /* "View.MemoryView":406 * * cdef char *itemp * if have_slices: # <<<<<<<<<<<<<< * return memview_slice(self, indices) * else: */ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 406, __pyx_L1_error) if (__pyx_t_2) { /* "View.MemoryView":407 * cdef char *itemp * if have_slices: * return memview_slice(self, indices) # <<<<<<<<<<<<<< * else: * itemp = self.get_item_pointer(indices) */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; /* "View.MemoryView":406 * * cdef char *itemp * if have_slices: # <<<<<<<<<<<<<< * return memview_slice(self, indices) * else: */ } /* "View.MemoryView":409 * return memview_slice(self, indices) * else: * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<< * return self.convert_item_to_object(itemp) * */ /*else*/ { __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(2, 409, __pyx_L1_error) __pyx_v_itemp = __pyx_t_6; /* "View.MemoryView":410 * else: * itemp = self.get_item_pointer(indices) * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<< * * def __setitem__(memoryview self, object index, object value): */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; } /* "View.MemoryView":399 * * * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<< * if index is Ellipsis: * return self */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_have_slices); __Pyx_XDECREF(__pyx_v_indices); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":412 * return self.convert_item_to_object(itemp) * * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< * if self.view.readonly: * raise TypeError("Cannot assign to read-only memoryview") */ /* Python wrapper */ static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { PyObject *__pyx_v_have_slices = NULL; PyObject *__pyx_v_obj = NULL; int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("__setitem__", 0); __Pyx_INCREF(__pyx_v_index); /* "View.MemoryView":413 * * def __setitem__(memoryview self, object index, object value): * if self.view.readonly: # <<<<<<<<<<<<<< * raise TypeError("Cannot assign to read-only memoryview") * */ __pyx_t_1 = (__pyx_v_self->view.readonly != 0); if (unlikely(__pyx_t_1)) { /* "View.MemoryView":414 * def __setitem__(memoryview self, object index, object value): * if self.view.readonly: * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< * * have_slices, index = _unellipsify(index, self.view.ndim) */ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 414, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 414, __pyx_L1_error) /* "View.MemoryView":413 * * def __setitem__(memoryview self, object index, object value): * if self.view.readonly: # <<<<<<<<<<<<<< * raise TypeError("Cannot assign to read-only memoryview") * */ } /* "View.MemoryView":416 * raise TypeError("Cannot assign to read-only memoryview") * * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<< * * if have_slices: */ __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (likely(__pyx_t_2 != Py_None)) { PyObject* sequence = __pyx_t_2; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(2, 416, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 416, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 416, __pyx_L1_error) } __pyx_v_have_slices = __pyx_t_3; __pyx_t_3 = 0; __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4); __pyx_t_4 = 0; /* "View.MemoryView":418 * have_slices, index = _unellipsify(index, self.view.ndim) * * if have_slices: # <<<<<<<<<<<<<< * obj = self.is_slice(value) * if obj: */ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 418, __pyx_L1_error) if (__pyx_t_1) { /* "View.MemoryView":419 * * if have_slices: * obj = self.is_slice(value) # <<<<<<<<<<<<<< * if obj: * self.setitem_slice_assignment(self[index], obj) */ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_obj = __pyx_t_2; __pyx_t_2 = 0; /* "View.MemoryView":420 * if have_slices: * obj = self.is_slice(value) * if obj: # <<<<<<<<<<<<<< * self.setitem_slice_assignment(self[index], obj) * else: */ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 420, __pyx_L1_error) if (__pyx_t_1) { /* "View.MemoryView":421 * obj = self.is_slice(value) * if obj: * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<< * else: * self.setitem_slice_assign_scalar(self[index], value) */ __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "View.MemoryView":420 * if have_slices: * obj = self.is_slice(value) * if obj: # <<<<<<<<<<<<<< * self.setitem_slice_assignment(self[index], obj) * else: */ goto __pyx_L5; } /* "View.MemoryView":423 * self.setitem_slice_assignment(self[index], obj) * else: * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<< * else: * self.setitem_indexed(index, value) */ /*else*/ { __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(2, 423, __pyx_L1_error) __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L5:; /* "View.MemoryView":418 * have_slices, index = _unellipsify(index, self.view.ndim) * * if have_slices: # <<<<<<<<<<<<<< * obj = self.is_slice(value) * if obj: */ goto __pyx_L4; } /* "View.MemoryView":425 * self.setitem_slice_assign_scalar(self[index], value) * else: * self.setitem_indexed(index, value) # <<<<<<<<<<<<<< * * cdef is_slice(self, obj): */ /*else*/ { __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L4:; /* "View.MemoryView":412 * return self.convert_item_to_object(itemp) * * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<< * if self.view.readonly: * raise TypeError("Cannot assign to read-only memoryview") */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; __Pyx_XDECREF(__pyx_v_have_slices); __Pyx_XDECREF(__pyx_v_obj); __Pyx_XDECREF(__pyx_v_index); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":427 * self.setitem_indexed(index, value) * * cdef is_slice(self, obj): # <<<<<<<<<<<<<< * if not isinstance(obj, memoryview): * try: */ static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; int __pyx_t_9; __Pyx_RefNannySetupContext("is_slice", 0); __Pyx_INCREF(__pyx_v_obj); /* "View.MemoryView":428 * * cdef is_slice(self, obj): * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< * try: * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, */ __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type); __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":429 * cdef is_slice(self, obj): * if not isinstance(obj, memoryview): * try: # <<<<<<<<<<<<<< * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, * self.dtype_is_object) */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); /*try:*/ { /* "View.MemoryView":430 * if not isinstance(obj, memoryview): * try: * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< * self.dtype_is_object) * except TypeError: */ __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 430, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_6); /* "View.MemoryView":431 * try: * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, * self.dtype_is_object) # <<<<<<<<<<<<<< * except TypeError: * return None */ __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 431, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); /* "View.MemoryView":430 * if not isinstance(obj, memoryview): * try: * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<< * self.dtype_is_object) * except TypeError: */ __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 430, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_INCREF(__pyx_v_obj); __Pyx_GIVEREF(__pyx_v_obj); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7); __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 430, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":429 * cdef is_slice(self, obj): * if not isinstance(obj, memoryview): * try: # <<<<<<<<<<<<<< * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, * self.dtype_is_object) */ } __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L9_try_end; __pyx_L4_error:; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":432 * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, * self.dtype_is_object) * except TypeError: # <<<<<<<<<<<<<< * return None * */ __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError); if (__pyx_t_9) { __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(2, 432, __pyx_L6_except_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GOTREF(__pyx_t_8); __Pyx_GOTREF(__pyx_t_6); /* "View.MemoryView":433 * self.dtype_is_object) * except TypeError: * return None # <<<<<<<<<<<<<< * * return obj */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L7_except_return; } goto __pyx_L6_except_error; __pyx_L6_except_error:; /* "View.MemoryView":429 * cdef is_slice(self, obj): * if not isinstance(obj, memoryview): * try: # <<<<<<<<<<<<<< * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, * self.dtype_is_object) */ __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); goto __pyx_L1_error; __pyx_L7_except_return:; __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); goto __pyx_L0; __pyx_L9_try_end:; } /* "View.MemoryView":428 * * cdef is_slice(self, obj): * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<< * try: * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, */ } /* "View.MemoryView":435 * return None * * return obj # <<<<<<<<<<<<<< * * cdef setitem_slice_assignment(self, dst, src): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_obj); __pyx_r = __pyx_v_obj; goto __pyx_L0; /* "View.MemoryView":427 * self.setitem_indexed(index, value) * * cdef is_slice(self, obj): # <<<<<<<<<<<<<< * if not isinstance(obj, memoryview): * try: */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_obj); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":437 * return obj * * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice dst_slice * cdef __Pyx_memviewslice src_slice */ static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) { __Pyx_memviewslice __pyx_v_dst_slice; __Pyx_memviewslice __pyx_v_src_slice; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; __Pyx_RefNannySetupContext("setitem_slice_assignment", 0); /* "View.MemoryView":441 * cdef __Pyx_memviewslice src_slice * * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< * get_slice_from_memview(dst, &dst_slice)[0], * src.ndim, dst.ndim, self.dtype_is_object) */ if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(2, 441, __pyx_L1_error) /* "View.MemoryView":442 * * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<< * src.ndim, dst.ndim, self.dtype_is_object) * */ if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(2, 442, __pyx_L1_error) /* "View.MemoryView":443 * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], * get_slice_from_memview(dst, &dst_slice)[0], * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<< * * cdef setitem_slice_assign_scalar(self, memoryview dst, value): */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 443, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 443, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "View.MemoryView":441 * cdef __Pyx_memviewslice src_slice * * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<< * get_slice_from_memview(dst, &dst_slice)[0], * src.ndim, dst.ndim, self.dtype_is_object) */ __pyx_t_4 = __pyx_memoryview_copy_contents((__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice))[0]), (__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice))[0]), __pyx_t_2, __pyx_t_3, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 441, __pyx_L1_error) /* "View.MemoryView":437 * return obj * * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice dst_slice * cdef __Pyx_memviewslice src_slice */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":445 * src.ndim, dst.ndim, self.dtype_is_object) * * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< * cdef int array[128] * cdef void *tmp = NULL */ static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) { int __pyx_v_array[0x80]; void *__pyx_v_tmp; void *__pyx_v_item; __Pyx_memviewslice *__pyx_v_dst_slice; __Pyx_memviewslice __pyx_v_tmp_slice; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; char const *__pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0); /* "View.MemoryView":447 * cdef setitem_slice_assign_scalar(self, memoryview dst, value): * cdef int array[128] * cdef void *tmp = NULL # <<<<<<<<<<<<<< * cdef void *item * */ __pyx_v_tmp = NULL; /* "View.MemoryView":452 * cdef __Pyx_memviewslice *dst_slice * cdef __Pyx_memviewslice tmp_slice * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<< * * if self.view.itemsize > sizeof(array): */ __pyx_v_dst_slice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); /* "View.MemoryView":454 * dst_slice = get_slice_from_memview(dst, &tmp_slice) * * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< * tmp = PyMem_Malloc(self.view.itemsize) * if tmp == NULL: */ __pyx_t_1 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0); if (__pyx_t_1) { /* "View.MemoryView":455 * * if self.view.itemsize > sizeof(array): * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<< * if tmp == NULL: * raise MemoryError */ __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize); /* "View.MemoryView":456 * if self.view.itemsize > sizeof(array): * tmp = PyMem_Malloc(self.view.itemsize) * if tmp == NULL: # <<<<<<<<<<<<<< * raise MemoryError * item = tmp */ __pyx_t_1 = ((__pyx_v_tmp == NULL) != 0); if (unlikely(__pyx_t_1)) { /* "View.MemoryView":457 * tmp = PyMem_Malloc(self.view.itemsize) * if tmp == NULL: * raise MemoryError # <<<<<<<<<<<<<< * item = tmp * else: */ PyErr_NoMemory(); __PYX_ERR(2, 457, __pyx_L1_error) /* "View.MemoryView":456 * if self.view.itemsize > sizeof(array): * tmp = PyMem_Malloc(self.view.itemsize) * if tmp == NULL: # <<<<<<<<<<<<<< * raise MemoryError * item = tmp */ } /* "View.MemoryView":458 * if tmp == NULL: * raise MemoryError * item = tmp # <<<<<<<<<<<<<< * else: * item = array */ __pyx_v_item = __pyx_v_tmp; /* "View.MemoryView":454 * dst_slice = get_slice_from_memview(dst, &tmp_slice) * * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<< * tmp = PyMem_Malloc(self.view.itemsize) * if tmp == NULL: */ goto __pyx_L3; } /* "View.MemoryView":460 * item = tmp * else: * item = array # <<<<<<<<<<<<<< * * try: */ /*else*/ { __pyx_v_item = ((void *)__pyx_v_array); } __pyx_L3:; /* "View.MemoryView":462 * item = array * * try: # <<<<<<<<<<<<<< * if self.dtype_is_object: * ( item)[0] = value */ /*try:*/ { /* "View.MemoryView":463 * * try: * if self.dtype_is_object: # <<<<<<<<<<<<<< * ( item)[0] = value * else: */ __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0); if (__pyx_t_1) { /* "View.MemoryView":464 * try: * if self.dtype_is_object: * ( item)[0] = value # <<<<<<<<<<<<<< * else: * self.assign_item_from_object( item, value) */ (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value); /* "View.MemoryView":463 * * try: * if self.dtype_is_object: # <<<<<<<<<<<<<< * ( item)[0] = value * else: */ goto __pyx_L8; } /* "View.MemoryView":466 * ( item)[0] = value * else: * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<< * * */ /*else*/ { __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 466, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_L8:; /* "View.MemoryView":470 * * * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, */ __pyx_t_1 = ((__pyx_v_self->view.suboffsets != NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":471 * * if self.view.suboffsets != NULL: * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<< * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, * item, self.dtype_is_object) */ __pyx_t_2 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 471, __pyx_L6_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "View.MemoryView":470 * * * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<< * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, */ } /* "View.MemoryView":472 * if self.view.suboffsets != NULL: * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<< * item, self.dtype_is_object) * finally: */ __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object); } /* "View.MemoryView":475 * item, self.dtype_is_object) * finally: * PyMem_Free(tmp) # <<<<<<<<<<<<<< * * cdef setitem_indexed(self, index, value): */ /*finally:*/ { /*normal exit:*/{ PyMem_Free(__pyx_v_tmp); goto __pyx_L7; } __pyx_L6_error:; /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_8); __Pyx_XGOTREF(__pyx_t_9); __Pyx_XGOTREF(__pyx_t_10); __Pyx_XGOTREF(__pyx_t_11); __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename; { PyMem_Free(__pyx_v_tmp); } if (PY_MAJOR_VERSION >= 3) { __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_11); __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); } __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8); __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5; goto __pyx_L1_error; } __pyx_L7:; } /* "View.MemoryView":445 * src.ndim, dst.ndim, self.dtype_is_object) * * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<< * cdef int array[128] * cdef void *tmp = NULL */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":477 * PyMem_Free(tmp) * * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< * cdef char *itemp = self.get_item_pointer(index) * self.assign_item_from_object(itemp, value) */ static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { char *__pyx_v_itemp; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations char *__pyx_t_1; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("setitem_indexed", 0); /* "View.MemoryView":478 * * cdef setitem_indexed(self, index, value): * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<< * self.assign_item_from_object(itemp, value) * */ __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(2, 478, __pyx_L1_error) __pyx_v_itemp = __pyx_t_1; /* "View.MemoryView":479 * cdef setitem_indexed(self, index, value): * cdef char *itemp = self.get_item_pointer(index) * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<< * * cdef convert_item_to_object(self, char *itemp): */ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 479, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "View.MemoryView":477 * PyMem_Free(tmp) * * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<< * cdef char *itemp = self.get_item_pointer(index) * self.assign_item_from_object(itemp, value) */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":481 * self.assign_item_from_object(itemp, value) * * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< * """Only used if instantiated manually by the user, or if Cython doesn't * know how to convert the type""" */ static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) { PyObject *__pyx_v_struct = NULL; PyObject *__pyx_v_bytesitem = 0; PyObject *__pyx_v_result = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; int __pyx_t_8; PyObject *__pyx_t_9 = NULL; size_t __pyx_t_10; int __pyx_t_11; __Pyx_RefNannySetupContext("convert_item_to_object", 0); /* "View.MemoryView":484 * """Only used if instantiated manually by the user, or if Cython doesn't * know how to convert the type""" * import struct # <<<<<<<<<<<<<< * cdef bytes bytesitem * */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_struct = __pyx_t_1; __pyx_t_1 = 0; /* "View.MemoryView":487 * cdef bytes bytesitem * * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<< * try: * result = struct.unpack(self.view.format, bytesitem) */ __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 487, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_bytesitem = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; /* "View.MemoryView":488 * * bytesitem = itemp[:self.view.itemsize] * try: # <<<<<<<<<<<<<< * result = struct.unpack(self.view.format, bytesitem) * except struct.error: */ { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); __Pyx_XGOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_t_3); __Pyx_XGOTREF(__pyx_t_4); /*try:*/ { /* "View.MemoryView":489 * bytesitem = itemp[:self.view.itemsize] * try: * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<< * except struct.error: * raise ValueError("Unable to convert item to object") */ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 489, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 489, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = NULL; __pyx_t_8 = 0; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_7)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); __pyx_t_8 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 489, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem}; __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 489, __pyx_L3_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } else #endif { __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 489, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_9); if (__pyx_t_7) { __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; } __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_v_bytesitem); __Pyx_GIVEREF(__pyx_v_bytesitem); PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem); __pyx_t_6 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 489, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_result = __pyx_t_1; __pyx_t_1 = 0; /* "View.MemoryView":488 * * bytesitem = itemp[:self.view.itemsize] * try: # <<<<<<<<<<<<<< * result = struct.unpack(self.view.format, bytesitem) * except struct.error: */ } /* "View.MemoryView":493 * raise ValueError("Unable to convert item to object") * else: * if len(self.view.format) == 1: # <<<<<<<<<<<<<< * return result[0] * return result */ /*else:*/ { __pyx_t_10 = strlen(__pyx_v_self->view.format); __pyx_t_11 = ((__pyx_t_10 == 1) != 0); if (__pyx_t_11) { /* "View.MemoryView":494 * else: * if len(self.view.format) == 1: * return result[0] # <<<<<<<<<<<<<< * return result * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 494, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L6_except_return; /* "View.MemoryView":493 * raise ValueError("Unable to convert item to object") * else: * if len(self.view.format) == 1: # <<<<<<<<<<<<<< * return result[0] * return result */ } /* "View.MemoryView":495 * if len(self.view.format) == 1: * return result[0] * return result # <<<<<<<<<<<<<< * * cdef assign_item_from_object(self, char *itemp, object value): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L6_except_return; } __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; /* "View.MemoryView":490 * try: * result = struct.unpack(self.view.format, bytesitem) * except struct.error: # <<<<<<<<<<<<<< * raise ValueError("Unable to convert item to object") * else: */ __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 490, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9); __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; if (__pyx_t_8) { __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(2, 490, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GOTREF(__pyx_t_5); __Pyx_GOTREF(__pyx_t_1); /* "View.MemoryView":491 * result = struct.unpack(self.view.format, bytesitem) * except struct.error: * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< * else: * if len(self.view.format) == 1: */ __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 491, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_Raise(__pyx_t_6, 0, 0, 0); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __PYX_ERR(2, 491, __pyx_L5_except_error) } goto __pyx_L5_except_error; __pyx_L5_except_error:; /* "View.MemoryView":488 * * bytesitem = itemp[:self.view.itemsize] * try: # <<<<<<<<<<<<<< * result = struct.unpack(self.view.format, bytesitem) * except struct.error: */ __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); goto __pyx_L1_error; __pyx_L6_except_return:; __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); goto __pyx_L0; } /* "View.MemoryView":481 * self.assign_item_from_object(itemp, value) * * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< * """Only used if instantiated manually by the user, or if Cython doesn't * know how to convert the type""" */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_struct); __Pyx_XDECREF(__pyx_v_bytesitem); __Pyx_XDECREF(__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":497 * return result * * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< * """Only used if instantiated manually by the user, or if Cython doesn't * know how to convert the type""" */ static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { PyObject *__pyx_v_struct = NULL; char __pyx_v_c; PyObject *__pyx_v_bytesvalue = 0; Py_ssize_t __pyx_v_i; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; int __pyx_t_3; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; int __pyx_t_7; PyObject *__pyx_t_8 = NULL; Py_ssize_t __pyx_t_9; PyObject *__pyx_t_10 = NULL; char *__pyx_t_11; char *__pyx_t_12; char *__pyx_t_13; char *__pyx_t_14; __Pyx_RefNannySetupContext("assign_item_from_object", 0); /* "View.MemoryView":500 * """Only used if instantiated manually by the user, or if Cython doesn't * know how to convert the type""" * import struct # <<<<<<<<<<<<<< * cdef char c * cdef bytes bytesvalue */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_struct = __pyx_t_1; __pyx_t_1 = 0; /* "View.MemoryView":505 * cdef Py_ssize_t i * * if isinstance(value, tuple): # <<<<<<<<<<<<<< * bytesvalue = struct.pack(self.view.format, *value) * else: */ __pyx_t_2 = PyTuple_Check(__pyx_v_value); __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { /* "View.MemoryView":506 * * if isinstance(value, tuple): * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<< * else: * bytesvalue = struct.pack(self.view.format, value) */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 506, __pyx_L1_error) __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; /* "View.MemoryView":505 * cdef Py_ssize_t i * * if isinstance(value, tuple): # <<<<<<<<<<<<<< * bytesvalue = struct.pack(self.view.format, *value) * else: */ goto __pyx_L3; } /* "View.MemoryView":508 * bytesvalue = struct.pack(self.view.format, *value) * else: * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<< * * for i, c in enumerate(bytesvalue): */ /*else*/ { __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_5 = NULL; __pyx_t_7 = 0; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); __pyx_t_7 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 508, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value}; __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 508, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else #endif { __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); if (__pyx_t_5) { __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; } __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(2, 508, __pyx_L1_error) __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; } __pyx_L3:; /* "View.MemoryView":510 * bytesvalue = struct.pack(self.view.format, value) * * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< * itemp[i] = c * */ __pyx_t_9 = 0; if (unlikely(__pyx_v_bytesvalue == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); __PYX_ERR(2, 510, __pyx_L1_error) } __Pyx_INCREF(__pyx_v_bytesvalue); __pyx_t_10 = __pyx_v_bytesvalue; __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10); __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10)); for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) { __pyx_t_11 = __pyx_t_14; __pyx_v_c = (__pyx_t_11[0]); /* "View.MemoryView":511 * * for i, c in enumerate(bytesvalue): * itemp[i] = c # <<<<<<<<<<<<<< * * @cname('getbuffer') */ __pyx_v_i = __pyx_t_9; /* "View.MemoryView":510 * bytesvalue = struct.pack(self.view.format, value) * * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<< * itemp[i] = c * */ __pyx_t_9 = (__pyx_t_9 + 1); /* "View.MemoryView":511 * * for i, c in enumerate(bytesvalue): * itemp[i] = c # <<<<<<<<<<<<<< * * @cname('getbuffer') */ (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c; } __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; /* "View.MemoryView":497 * return result * * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< * """Only used if instantiated manually by the user, or if Cython doesn't * know how to convert the type""" */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_struct); __Pyx_XDECREF(__pyx_v_bytesvalue); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":514 * * @cname('getbuffer') * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< * if flags & PyBUF_WRITABLE and self.view.readonly: * raise ValueError("Cannot create writable memory view from read-only memoryview") */ /* Python wrapper */ static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; Py_ssize_t *__pyx_t_4; char *__pyx_t_5; void *__pyx_t_6; int __pyx_t_7; Py_ssize_t __pyx_t_8; if (__pyx_v_info == NULL) { PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete"); return -1; } __Pyx_RefNannySetupContext("__getbuffer__", 0); __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); __Pyx_GIVEREF(__pyx_v_info->obj); /* "View.MemoryView":515 * @cname('getbuffer') * def __getbuffer__(self, Py_buffer *info, int flags): * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< * raise ValueError("Cannot create writable memory view from read-only memoryview") * */ __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L4_bool_binop_done; } __pyx_t_2 = (__pyx_v_self->view.readonly != 0); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* "View.MemoryView":516 * def __getbuffer__(self, Py_buffer *info, int flags): * if flags & PyBUF_WRITABLE and self.view.readonly: * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< * * if flags & PyBUF_ND: */ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 516, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 516, __pyx_L1_error) /* "View.MemoryView":515 * @cname('getbuffer') * def __getbuffer__(self, Py_buffer *info, int flags): * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<< * raise ValueError("Cannot create writable memory view from read-only memoryview") * */ } /* "View.MemoryView":518 * raise ValueError("Cannot create writable memory view from read-only memoryview") * * if flags & PyBUF_ND: # <<<<<<<<<<<<<< * info.shape = self.view.shape * else: */ __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0); if (__pyx_t_1) { /* "View.MemoryView":519 * * if flags & PyBUF_ND: * info.shape = self.view.shape # <<<<<<<<<<<<<< * else: * info.shape = NULL */ __pyx_t_4 = __pyx_v_self->view.shape; __pyx_v_info->shape = __pyx_t_4; /* "View.MemoryView":518 * raise ValueError("Cannot create writable memory view from read-only memoryview") * * if flags & PyBUF_ND: # <<<<<<<<<<<<<< * info.shape = self.view.shape * else: */ goto __pyx_L6; } /* "View.MemoryView":521 * info.shape = self.view.shape * else: * info.shape = NULL # <<<<<<<<<<<<<< * * if flags & PyBUF_STRIDES: */ /*else*/ { __pyx_v_info->shape = NULL; } __pyx_L6:; /* "View.MemoryView":523 * info.shape = NULL * * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< * info.strides = self.view.strides * else: */ __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0); if (__pyx_t_1) { /* "View.MemoryView":524 * * if flags & PyBUF_STRIDES: * info.strides = self.view.strides # <<<<<<<<<<<<<< * else: * info.strides = NULL */ __pyx_t_4 = __pyx_v_self->view.strides; __pyx_v_info->strides = __pyx_t_4; /* "View.MemoryView":523 * info.shape = NULL * * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<< * info.strides = self.view.strides * else: */ goto __pyx_L7; } /* "View.MemoryView":526 * info.strides = self.view.strides * else: * info.strides = NULL # <<<<<<<<<<<<<< * * if flags & PyBUF_INDIRECT: */ /*else*/ { __pyx_v_info->strides = NULL; } __pyx_L7:; /* "View.MemoryView":528 * info.strides = NULL * * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< * info.suboffsets = self.view.suboffsets * else: */ __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0); if (__pyx_t_1) { /* "View.MemoryView":529 * * if flags & PyBUF_INDIRECT: * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<< * else: * info.suboffsets = NULL */ __pyx_t_4 = __pyx_v_self->view.suboffsets; __pyx_v_info->suboffsets = __pyx_t_4; /* "View.MemoryView":528 * info.strides = NULL * * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<< * info.suboffsets = self.view.suboffsets * else: */ goto __pyx_L8; } /* "View.MemoryView":531 * info.suboffsets = self.view.suboffsets * else: * info.suboffsets = NULL # <<<<<<<<<<<<<< * * if flags & PyBUF_FORMAT: */ /*else*/ { __pyx_v_info->suboffsets = NULL; } __pyx_L8:; /* "View.MemoryView":533 * info.suboffsets = NULL * * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< * info.format = self.view.format * else: */ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0); if (__pyx_t_1) { /* "View.MemoryView":534 * * if flags & PyBUF_FORMAT: * info.format = self.view.format # <<<<<<<<<<<<<< * else: * info.format = NULL */ __pyx_t_5 = __pyx_v_self->view.format; __pyx_v_info->format = __pyx_t_5; /* "View.MemoryView":533 * info.suboffsets = NULL * * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<< * info.format = self.view.format * else: */ goto __pyx_L9; } /* "View.MemoryView":536 * info.format = self.view.format * else: * info.format = NULL # <<<<<<<<<<<<<< * * info.buf = self.view.buf */ /*else*/ { __pyx_v_info->format = NULL; } __pyx_L9:; /* "View.MemoryView":538 * info.format = NULL * * info.buf = self.view.buf # <<<<<<<<<<<<<< * info.ndim = self.view.ndim * info.itemsize = self.view.itemsize */ __pyx_t_6 = __pyx_v_self->view.buf; __pyx_v_info->buf = __pyx_t_6; /* "View.MemoryView":539 * * info.buf = self.view.buf * info.ndim = self.view.ndim # <<<<<<<<<<<<<< * info.itemsize = self.view.itemsize * info.len = self.view.len */ __pyx_t_7 = __pyx_v_self->view.ndim; __pyx_v_info->ndim = __pyx_t_7; /* "View.MemoryView":540 * info.buf = self.view.buf * info.ndim = self.view.ndim * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<< * info.len = self.view.len * info.readonly = self.view.readonly */ __pyx_t_8 = __pyx_v_self->view.itemsize; __pyx_v_info->itemsize = __pyx_t_8; /* "View.MemoryView":541 * info.ndim = self.view.ndim * info.itemsize = self.view.itemsize * info.len = self.view.len # <<<<<<<<<<<<<< * info.readonly = self.view.readonly * info.obj = self */ __pyx_t_8 = __pyx_v_self->view.len; __pyx_v_info->len = __pyx_t_8; /* "View.MemoryView":542 * info.itemsize = self.view.itemsize * info.len = self.view.len * info.readonly = self.view.readonly # <<<<<<<<<<<<<< * info.obj = self * */ __pyx_t_1 = __pyx_v_self->view.readonly; __pyx_v_info->readonly = __pyx_t_1; /* "View.MemoryView":543 * info.len = self.view.len * info.readonly = self.view.readonly * info.obj = self # <<<<<<<<<<<<<< * * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") */ __Pyx_INCREF(((PyObject *)__pyx_v_self)); __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = ((PyObject *)__pyx_v_self); /* "View.MemoryView":514 * * @cname('getbuffer') * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<< * if flags & PyBUF_WRITABLE and self.view.readonly: * raise ValueError("Cannot create writable memory view from read-only memoryview") */ /* function exit code */ __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; if (__pyx_v_info->obj != NULL) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; } goto __pyx_L2; __pyx_L0:; if (__pyx_v_info->obj == Py_None) { __Pyx_GOTREF(__pyx_v_info->obj); __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0; } __pyx_L2:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":549 * * @property * def T(self): # <<<<<<<<<<<<<< * cdef _memoryviewslice result = memoryview_copy(self) * transpose_memslice(&result.from_slice) */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) { struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":550 * @property * def T(self): * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<< * transpose_memslice(&result.from_slice) * return result */ __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(2, 550, __pyx_L1_error) __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1); __pyx_t_1 = 0; /* "View.MemoryView":551 * def T(self): * cdef _memoryviewslice result = memoryview_copy(self) * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<< * return result * */ __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 551, __pyx_L1_error) /* "View.MemoryView":552 * cdef _memoryviewslice result = memoryview_copy(self) * transpose_memslice(&result.from_slice) * return result # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; /* "View.MemoryView":549 * * @property * def T(self): # <<<<<<<<<<<<<< * cdef _memoryviewslice result = memoryview_copy(self) * transpose_memslice(&result.from_slice) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":555 * * @property * def base(self): # <<<<<<<<<<<<<< * return self.obj * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":556 * @property * def base(self): * return self.obj # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->obj); __pyx_r = __pyx_v_self->obj; goto __pyx_L0; /* "View.MemoryView":555 * * @property * def base(self): # <<<<<<<<<<<<<< * return self.obj * */ /* function exit code */ __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":559 * * @property * def shape(self): # <<<<<<<<<<<<<< * return tuple([length for length in self.view.shape[:self.view.ndim]]) * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) { Py_ssize_t __pyx_v_length; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; Py_ssize_t *__pyx_t_2; Py_ssize_t *__pyx_t_3; Py_ssize_t *__pyx_t_4; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":560 * @property * def shape(self): * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) { __pyx_t_2 = __pyx_t_4; __pyx_v_length = (__pyx_t_2[0]); __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(2, 560, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 560, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; /* "View.MemoryView":559 * * @property * def shape(self): # <<<<<<<<<<<<<< * return tuple([length for length in self.view.shape[:self.view.ndim]]) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":563 * * @property * def strides(self): # <<<<<<<<<<<<<< * if self.view.strides == NULL: * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) { Py_ssize_t __pyx_v_stride; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; Py_ssize_t *__pyx_t_3; Py_ssize_t *__pyx_t_4; Py_ssize_t *__pyx_t_5; PyObject *__pyx_t_6 = NULL; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":564 * @property * def strides(self): * if self.view.strides == NULL: # <<<<<<<<<<<<<< * * raise ValueError("Buffer view does not expose strides") */ __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0); if (unlikely(__pyx_t_1)) { /* "View.MemoryView":566 * if self.view.strides == NULL: * * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< * * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) */ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 566, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 566, __pyx_L1_error) /* "View.MemoryView":564 * @property * def strides(self): * if self.view.strides == NULL: # <<<<<<<<<<<<<< * * raise ValueError("Buffer view does not expose strides") */ } /* "View.MemoryView":568 * raise ValueError("Buffer view does not expose strides") * * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 568, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim); for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { __pyx_t_3 = __pyx_t_5; __pyx_v_stride = (__pyx_t_3[0]); __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 568, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(2, 568, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 568, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_6; __pyx_t_6 = 0; goto __pyx_L0; /* "View.MemoryView":563 * * @property * def strides(self): # <<<<<<<<<<<<<< * if self.view.strides == NULL: * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":571 * * @property * def suboffsets(self): # <<<<<<<<<<<<<< * if self.view.suboffsets == NULL: * return (-1,) * self.view.ndim */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) { Py_ssize_t __pyx_v_suboffset; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; Py_ssize_t *__pyx_t_4; Py_ssize_t *__pyx_t_5; Py_ssize_t *__pyx_t_6; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":572 * @property * def suboffsets(self): * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< * return (-1,) * self.view.ndim * */ __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":573 * def suboffsets(self): * if self.view.suboffsets == NULL: * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< * * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__32, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 573, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; /* "View.MemoryView":572 * @property * def suboffsets(self): * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<< * return (-1,) * self.view.ndim * */ } /* "View.MemoryView":575 * return (-1,) * self.view.ndim * * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim); for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) { __pyx_t_4 = __pyx_t_6; __pyx_v_suboffset = (__pyx_t_4[0]); __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(2, 575, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 575, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":571 * * @property * def suboffsets(self): # <<<<<<<<<<<<<< * if self.view.suboffsets == NULL: * return (-1,) * self.view.ndim */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":578 * * @property * def ndim(self): # <<<<<<<<<<<<<< * return self.view.ndim * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":579 * @property * def ndim(self): * return self.view.ndim # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "View.MemoryView":578 * * @property * def ndim(self): # <<<<<<<<<<<<<< * return self.view.ndim * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":582 * * @property * def itemsize(self): # <<<<<<<<<<<<<< * return self.view.itemsize * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":583 * @property * def itemsize(self): * return self.view.itemsize # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "View.MemoryView":582 * * @property * def itemsize(self): # <<<<<<<<<<<<<< * return self.view.itemsize * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":586 * * @property * def nbytes(self): # <<<<<<<<<<<<<< * return self.size * self.view.itemsize * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":587 * @property * def nbytes(self): * return self.size * self.view.itemsize # <<<<<<<<<<<<<< * * @property */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 587, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; /* "View.MemoryView":586 * * @property * def nbytes(self): # <<<<<<<<<<<<<< * return self.size * self.view.itemsize * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":590 * * @property * def size(self): # <<<<<<<<<<<<<< * if self._size is None: * result = 1 */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_v_result = NULL; PyObject *__pyx_v_length = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; Py_ssize_t *__pyx_t_3; Py_ssize_t *__pyx_t_4; Py_ssize_t *__pyx_t_5; PyObject *__pyx_t_6 = NULL; __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":591 * @property * def size(self): * if self._size is None: # <<<<<<<<<<<<<< * result = 1 * */ __pyx_t_1 = (__pyx_v_self->_size == Py_None); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":592 * def size(self): * if self._size is None: * result = 1 # <<<<<<<<<<<<<< * * for length in self.view.shape[:self.view.ndim]: */ __Pyx_INCREF(__pyx_int_1); __pyx_v_result = __pyx_int_1; /* "View.MemoryView":594 * result = 1 * * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<< * result *= length * */ __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim); for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) { __pyx_t_3 = __pyx_t_5; __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 594, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6); __pyx_t_6 = 0; /* "View.MemoryView":595 * * for length in self.view.shape[:self.view.ndim]: * result *= length # <<<<<<<<<<<<<< * * self._size = result */ __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 595, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6); __pyx_t_6 = 0; } /* "View.MemoryView":597 * result *= length * * self._size = result # <<<<<<<<<<<<<< * * return self._size */ __Pyx_INCREF(__pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); __Pyx_GOTREF(__pyx_v_self->_size); __Pyx_DECREF(__pyx_v_self->_size); __pyx_v_self->_size = __pyx_v_result; /* "View.MemoryView":591 * @property * def size(self): * if self._size is None: # <<<<<<<<<<<<<< * result = 1 * */ } /* "View.MemoryView":599 * self._size = result * * return self._size # <<<<<<<<<<<<<< * * def __len__(self): */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->_size); __pyx_r = __pyx_v_self->_size; goto __pyx_L0; /* "View.MemoryView":590 * * @property * def size(self): # <<<<<<<<<<<<<< * if self._size is None: * result = 1 */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_length); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":601 * return self._size * * def __len__(self): # <<<<<<<<<<<<<< * if self.view.ndim >= 1: * return self.view.shape[0] */ /* Python wrapper */ static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/ static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) { Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) { Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("__len__", 0); /* "View.MemoryView":602 * * def __len__(self): * if self.view.ndim >= 1: # <<<<<<<<<<<<<< * return self.view.shape[0] * */ __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0); if (__pyx_t_1) { /* "View.MemoryView":603 * def __len__(self): * if self.view.ndim >= 1: * return self.view.shape[0] # <<<<<<<<<<<<<< * * return 0 */ __pyx_r = (__pyx_v_self->view.shape[0]); goto __pyx_L0; /* "View.MemoryView":602 * * def __len__(self): * if self.view.ndim >= 1: # <<<<<<<<<<<<<< * return self.view.shape[0] * */ } /* "View.MemoryView":605 * return self.view.shape[0] * * return 0 # <<<<<<<<<<<<<< * * def __repr__(self): */ __pyx_r = 0; goto __pyx_L0; /* "View.MemoryView":601 * return self._size * * def __len__(self): # <<<<<<<<<<<<<< * if self.view.ndim >= 1: * return self.view.shape[0] */ /* function exit code */ __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":607 * return 0 * * def __repr__(self): # <<<<<<<<<<<<<< * return "" % (self.base.__class__.__name__, * id(self)) */ /* Python wrapper */ static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("__repr__", 0); /* "View.MemoryView":608 * * def __repr__(self): * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< * id(self)) * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "View.MemoryView":609 * def __repr__(self): * return "" % (self.base.__class__.__name__, * id(self)) # <<<<<<<<<<<<<< * * def __str__(self): */ __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* "View.MemoryView":608 * * def __repr__(self): * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<< * id(self)) * */ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":607 * return 0 * * def __repr__(self): # <<<<<<<<<<<<<< * return "" % (self.base.__class__.__name__, * id(self)) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":611 * id(self)) * * def __str__(self): # <<<<<<<<<<<<<< * return "" % (self.base.__class__.__name__,) * */ /* Python wrapper */ static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("__str__", 0); /* "View.MemoryView":612 * * def __str__(self): * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 612, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "View.MemoryView":611 * id(self)) * * def __str__(self): # <<<<<<<<<<<<<< * return "" % (self.base.__class__.__name__,) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":615 * * * def is_c_contig(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice *mslice * cdef __Pyx_memviewslice tmp */ /* Python wrapper */ static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) { __Pyx_memviewslice *__pyx_v_mslice; __Pyx_memviewslice __pyx_v_tmp; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("is_c_contig", 0); /* "View.MemoryView":618 * cdef __Pyx_memviewslice *mslice * cdef __Pyx_memviewslice tmp * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< * return slice_is_contig(mslice[0], 'C', self.view.ndim) * */ __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); /* "View.MemoryView":619 * cdef __Pyx_memviewslice tmp * mslice = get_slice_from_memview(self, &tmp) * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<< * * def is_f_contig(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "View.MemoryView":615 * * * def is_c_contig(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice *mslice * cdef __Pyx_memviewslice tmp */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":621 * return slice_is_contig(mslice[0], 'C', self.view.ndim) * * def is_f_contig(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice *mslice * cdef __Pyx_memviewslice tmp */ /* Python wrapper */ static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) { __Pyx_memviewslice *__pyx_v_mslice; __Pyx_memviewslice __pyx_v_tmp; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("is_f_contig", 0); /* "View.MemoryView":624 * cdef __Pyx_memviewslice *mslice * cdef __Pyx_memviewslice tmp * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<< * return slice_is_contig(mslice[0], 'F', self.view.ndim) * */ __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); /* "View.MemoryView":625 * cdef __Pyx_memviewslice tmp * mslice = get_slice_from_memview(self, &tmp) * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<< * * def copy(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "View.MemoryView":621 * return slice_is_contig(mslice[0], 'C', self.view.ndim) * * def is_f_contig(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice *mslice * cdef __Pyx_memviewslice tmp */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":627 * return slice_is_contig(mslice[0], 'F', self.view.ndim) * * def copy(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice mslice * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS */ /* Python wrapper */ static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("copy (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) { __Pyx_memviewslice __pyx_v_mslice; int __pyx_v_flags; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_memviewslice __pyx_t_1; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("copy", 0); /* "View.MemoryView":629 * def copy(self): * cdef __Pyx_memviewslice mslice * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<< * * slice_copy(self, &mslice) */ __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS)); /* "View.MemoryView":631 * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS * * slice_copy(self, &mslice) # <<<<<<<<<<<<<< * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, * self.view.itemsize, */ __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice)); /* "View.MemoryView":632 * * slice_copy(self, &mslice) * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<< * self.view.itemsize, * flags|PyBUF_C_CONTIGUOUS, */ __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 632, __pyx_L1_error) __pyx_v_mslice = __pyx_t_1; /* "View.MemoryView":637 * self.dtype_is_object) * * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<< * * def copy_fortran(self): */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":627 * return slice_is_contig(mslice[0], 'F', self.view.ndim) * * def copy(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice mslice * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":639 * return memoryview_copy_from_slice(self, &mslice) * * def copy_fortran(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice src, dst * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS */ /* Python wrapper */ static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0); __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) { __Pyx_memviewslice __pyx_v_src; __Pyx_memviewslice __pyx_v_dst; int __pyx_v_flags; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_memviewslice __pyx_t_1; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("copy_fortran", 0); /* "View.MemoryView":641 * def copy_fortran(self): * cdef __Pyx_memviewslice src, dst * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<< * * slice_copy(self, &src) */ __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS)); /* "View.MemoryView":643 * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS * * slice_copy(self, &src) # <<<<<<<<<<<<<< * dst = slice_copy_contig(&src, "fortran", self.view.ndim, * self.view.itemsize, */ __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src)); /* "View.MemoryView":644 * * slice_copy(self, &src) * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<< * self.view.itemsize, * flags|PyBUF_F_CONTIGUOUS, */ __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 644, __pyx_L1_error) __pyx_v_dst = __pyx_t_1; /* "View.MemoryView":649 * self.dtype_is_object) * * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":639 * return memoryview_copy_from_slice(self, &mslice) * * def copy_fortran(self): # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice src, dst * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__reduce_cython__", 0); /* "(tree fragment)":2 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(2, 2, __pyx_L1_error) /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":3 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__setstate_cython__", 0); /* "(tree fragment)":4 * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(2, 4, __pyx_L1_error) /* "(tree fragment)":3 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":653 * * @cname('__pyx_memoryview_new') * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< * cdef memoryview result = memoryview(o, flags, dtype_is_object) * result.typeinfo = typeinfo */ static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) { struct __pyx_memoryview_obj *__pyx_v_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("memoryview_cwrapper", 0); /* "View.MemoryView":654 * @cname('__pyx_memoryview_new') * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<< * result.typeinfo = typeinfo * return result */ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_o); __Pyx_GIVEREF(__pyx_v_o); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 654, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2); __pyx_t_2 = 0; /* "View.MemoryView":655 * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): * cdef memoryview result = memoryview(o, flags, dtype_is_object) * result.typeinfo = typeinfo # <<<<<<<<<<<<<< * return result * */ __pyx_v_result->typeinfo = __pyx_v_typeinfo; /* "View.MemoryView":656 * cdef memoryview result = memoryview(o, flags, dtype_is_object) * result.typeinfo = typeinfo * return result # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_check') */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; /* "View.MemoryView":653 * * @cname('__pyx_memoryview_new') * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<< * cdef memoryview result = memoryview(o, flags, dtype_is_object) * result.typeinfo = typeinfo */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":659 * * @cname('__pyx_memoryview_check') * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< * return isinstance(o, memoryview) * */ static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) { int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; __Pyx_RefNannySetupContext("memoryview_check", 0); /* "View.MemoryView":660 * @cname('__pyx_memoryview_check') * cdef inline bint memoryview_check(object o): * return isinstance(o, memoryview) # <<<<<<<<<<<<<< * * cdef tuple _unellipsify(object index, int ndim): */ __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type); __pyx_r = __pyx_t_1; goto __pyx_L0; /* "View.MemoryView":659 * * @cname('__pyx_memoryview_check') * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<< * return isinstance(o, memoryview) * */ /* function exit code */ __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":662 * return isinstance(o, memoryview) * * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< * """ * Replace all ellipses with full slices and fill incomplete indices with */ static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) { PyObject *__pyx_v_tup = NULL; PyObject *__pyx_v_result = NULL; int __pyx_v_have_slices; int __pyx_v_seen_ellipsis; CYTHON_UNUSED PyObject *__pyx_v_idx = NULL; PyObject *__pyx_v_item = NULL; Py_ssize_t __pyx_v_nslices; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; Py_ssize_t __pyx_t_5; PyObject *(*__pyx_t_6)(PyObject *); PyObject *__pyx_t_7 = NULL; Py_ssize_t __pyx_t_8; int __pyx_t_9; int __pyx_t_10; PyObject *__pyx_t_11 = NULL; __Pyx_RefNannySetupContext("_unellipsify", 0); /* "View.MemoryView":667 * full slices. * """ * if not isinstance(index, tuple): # <<<<<<<<<<<<<< * tup = (index,) * else: */ __pyx_t_1 = PyTuple_Check(__pyx_v_index); __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":668 * """ * if not isinstance(index, tuple): * tup = (index,) # <<<<<<<<<<<<<< * else: * tup = index */ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 668, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_index); __Pyx_GIVEREF(__pyx_v_index); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index); __pyx_v_tup = __pyx_t_3; __pyx_t_3 = 0; /* "View.MemoryView":667 * full slices. * """ * if not isinstance(index, tuple): # <<<<<<<<<<<<<< * tup = (index,) * else: */ goto __pyx_L3; } /* "View.MemoryView":670 * tup = (index,) * else: * tup = index # <<<<<<<<<<<<<< * * result = [] */ /*else*/ { __Pyx_INCREF(__pyx_v_index); __pyx_v_tup = __pyx_v_index; } __pyx_L3:; /* "View.MemoryView":672 * tup = index * * result = [] # <<<<<<<<<<<<<< * have_slices = False * seen_ellipsis = False */ __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_result = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":673 * * result = [] * have_slices = False # <<<<<<<<<<<<<< * seen_ellipsis = False * for idx, item in enumerate(tup): */ __pyx_v_have_slices = 0; /* "View.MemoryView":674 * result = [] * have_slices = False * seen_ellipsis = False # <<<<<<<<<<<<<< * for idx, item in enumerate(tup): * if item is Ellipsis: */ __pyx_v_seen_ellipsis = 0; /* "View.MemoryView":675 * have_slices = False * seen_ellipsis = False * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< * if item is Ellipsis: * if not seen_ellipsis: */ __Pyx_INCREF(__pyx_int_0); __pyx_t_3 = __pyx_int_0; if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) { __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 675, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_4))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 675, __pyx_L1_error) #else __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(2, 675, __pyx_L1_error) #else __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif } } else { __pyx_t_7 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_7)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(2, 675, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_7); } __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7); __pyx_t_7 = 0; __Pyx_INCREF(__pyx_t_3); __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3); __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = __pyx_t_7; __pyx_t_7 = 0; /* "View.MemoryView":676 * seen_ellipsis = False * for idx, item in enumerate(tup): * if item is Ellipsis: # <<<<<<<<<<<<<< * if not seen_ellipsis: * result.extend([slice(None)] * (ndim - len(tup) + 1)) */ __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "View.MemoryView":677 * for idx, item in enumerate(tup): * if item is Ellipsis: * if not seen_ellipsis: # <<<<<<<<<<<<<< * result.extend([slice(None)] * (ndim - len(tup) + 1)) * seen_ellipsis = True */ __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0); if (__pyx_t_1) { /* "View.MemoryView":678 * if item is Ellipsis: * if not seen_ellipsis: * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< * seen_ellipsis = True * else: */ __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 678, __pyx_L1_error) __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) { __Pyx_INCREF(__pyx_slice__35); __Pyx_GIVEREF(__pyx_slice__35); PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__35); } } __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 678, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":679 * if not seen_ellipsis: * result.extend([slice(None)] * (ndim - len(tup) + 1)) * seen_ellipsis = True # <<<<<<<<<<<<<< * else: * result.append(slice(None)) */ __pyx_v_seen_ellipsis = 1; /* "View.MemoryView":677 * for idx, item in enumerate(tup): * if item is Ellipsis: * if not seen_ellipsis: # <<<<<<<<<<<<<< * result.extend([slice(None)] * (ndim - len(tup) + 1)) * seen_ellipsis = True */ goto __pyx_L7; } /* "View.MemoryView":681 * seen_ellipsis = True * else: * result.append(slice(None)) # <<<<<<<<<<<<<< * have_slices = True * else: */ /*else*/ { __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__35); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 681, __pyx_L1_error) } __pyx_L7:; /* "View.MemoryView":682 * else: * result.append(slice(None)) * have_slices = True # <<<<<<<<<<<<<< * else: * if not isinstance(item, slice) and not PyIndex_Check(item): */ __pyx_v_have_slices = 1; /* "View.MemoryView":676 * seen_ellipsis = False * for idx, item in enumerate(tup): * if item is Ellipsis: # <<<<<<<<<<<<<< * if not seen_ellipsis: * result.extend([slice(None)] * (ndim - len(tup) + 1)) */ goto __pyx_L6; } /* "View.MemoryView":684 * have_slices = True * else: * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< * raise TypeError("Cannot index with type '%s'" % type(item)) * */ /*else*/ { __pyx_t_2 = PySlice_Check(__pyx_v_item); __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0); if (__pyx_t_10) { } else { __pyx_t_1 = __pyx_t_10; goto __pyx_L9_bool_binop_done; } __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0); __pyx_t_1 = __pyx_t_10; __pyx_L9_bool_binop_done:; if (unlikely(__pyx_t_1)) { /* "View.MemoryView":685 * else: * if not isinstance(item, slice) and not PyIndex_Check(item): * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<< * * have_slices = have_slices or isinstance(item, slice) */ __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_Raise(__pyx_t_11, 0, 0, 0); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __PYX_ERR(2, 685, __pyx_L1_error) /* "View.MemoryView":684 * have_slices = True * else: * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<< * raise TypeError("Cannot index with type '%s'" % type(item)) * */ } /* "View.MemoryView":687 * raise TypeError("Cannot index with type '%s'" % type(item)) * * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<< * result.append(item) * */ __pyx_t_10 = (__pyx_v_have_slices != 0); if (!__pyx_t_10) { } else { __pyx_t_1 = __pyx_t_10; goto __pyx_L11_bool_binop_done; } __pyx_t_10 = PySlice_Check(__pyx_v_item); __pyx_t_2 = (__pyx_t_10 != 0); __pyx_t_1 = __pyx_t_2; __pyx_L11_bool_binop_done:; __pyx_v_have_slices = __pyx_t_1; /* "View.MemoryView":688 * * have_slices = have_slices or isinstance(item, slice) * result.append(item) # <<<<<<<<<<<<<< * * nslices = ndim - len(result) */ __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 688, __pyx_L1_error) } __pyx_L6:; /* "View.MemoryView":675 * have_slices = False * seen_ellipsis = False * for idx, item in enumerate(tup): # <<<<<<<<<<<<<< * if item is Ellipsis: * if not seen_ellipsis: */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":690 * result.append(item) * * nslices = ndim - len(result) # <<<<<<<<<<<<<< * if nslices: * result.extend([slice(None)] * nslices) */ __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(2, 690, __pyx_L1_error) __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5); /* "View.MemoryView":691 * * nslices = ndim - len(result) * if nslices: # <<<<<<<<<<<<<< * result.extend([slice(None)] * nslices) * */ __pyx_t_1 = (__pyx_v_nslices != 0); if (__pyx_t_1) { /* "View.MemoryView":692 * nslices = ndim - len(result) * if nslices: * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<< * * return have_slices or nslices, tuple(result) */ __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) { __Pyx_INCREF(__pyx_slice__35); __Pyx_GIVEREF(__pyx_slice__35); PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__35); } } __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 692, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":691 * * nslices = ndim - len(result) * if nslices: # <<<<<<<<<<<<<< * result.extend([slice(None)] * nslices) * */ } /* "View.MemoryView":694 * result.extend([slice(None)] * nslices) * * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<< * * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): */ __Pyx_XDECREF(__pyx_r); if (!__pyx_v_have_slices) { } else { __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L14_bool_binop_done; } __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = __pyx_t_4; __pyx_t_4 = 0; __pyx_L14_bool_binop_done:; __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4); __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_r = ((PyObject*)__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L0; /* "View.MemoryView":662 * return isinstance(o, memoryview) * * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<< * """ * Replace all ellipses with full slices and fill incomplete indices with */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_11); __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_tup); __Pyx_XDECREF(__pyx_v_result); __Pyx_XDECREF(__pyx_v_idx); __Pyx_XDECREF(__pyx_v_item); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":696 * return have_slices or nslices, tuple(result) * * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< * for suboffset in suboffsets[:ndim]: * if suboffset >= 0: */ static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) { Py_ssize_t __pyx_v_suboffset; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations Py_ssize_t *__pyx_t_1; Py_ssize_t *__pyx_t_2; Py_ssize_t *__pyx_t_3; int __pyx_t_4; PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("assert_direct_dimensions", 0); /* "View.MemoryView":697 * * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<< * if suboffset >= 0: * raise ValueError("Indirect dimensions not supported") */ __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim); for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) { __pyx_t_1 = __pyx_t_3; __pyx_v_suboffset = (__pyx_t_1[0]); /* "View.MemoryView":698 * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): * for suboffset in suboffsets[:ndim]: * if suboffset >= 0: # <<<<<<<<<<<<<< * raise ValueError("Indirect dimensions not supported") * */ __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0); if (unlikely(__pyx_t_4)) { /* "View.MemoryView":699 * for suboffset in suboffsets[:ndim]: * if suboffset >= 0: * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< * * */ __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_Raise(__pyx_t_5, 0, 0, 0); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __PYX_ERR(2, 699, __pyx_L1_error) /* "View.MemoryView":698 * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): * for suboffset in suboffsets[:ndim]: * if suboffset >= 0: # <<<<<<<<<<<<<< * raise ValueError("Indirect dimensions not supported") * */ } } /* "View.MemoryView":696 * return have_slices or nslices, tuple(result) * * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<< * for suboffset in suboffsets[:ndim]: * if suboffset >= 0: */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":706 * * @cname('__pyx_memview_slice') * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< * cdef int new_ndim = 0, suboffset_dim = -1, dim * cdef bint negative_step */ static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) { int __pyx_v_new_ndim; int __pyx_v_suboffset_dim; int __pyx_v_dim; __Pyx_memviewslice __pyx_v_src; __Pyx_memviewslice __pyx_v_dst; __Pyx_memviewslice *__pyx_v_p_src; struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0; __Pyx_memviewslice *__pyx_v_p_dst; int *__pyx_v_p_suboffset_dim; Py_ssize_t __pyx_v_start; Py_ssize_t __pyx_v_stop; Py_ssize_t __pyx_v_step; int __pyx_v_have_start; int __pyx_v_have_stop; int __pyx_v_have_step; PyObject *__pyx_v_index = NULL; struct __pyx_memoryview_obj *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; struct __pyx_memoryview_obj *__pyx_t_4; char *__pyx_t_5; int __pyx_t_6; Py_ssize_t __pyx_t_7; PyObject *(*__pyx_t_8)(PyObject *); PyObject *__pyx_t_9 = NULL; Py_ssize_t __pyx_t_10; int __pyx_t_11; Py_ssize_t __pyx_t_12; __Pyx_RefNannySetupContext("memview_slice", 0); /* "View.MemoryView":707 * @cname('__pyx_memview_slice') * cdef memoryview memview_slice(memoryview memview, object indices): * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<< * cdef bint negative_step * cdef __Pyx_memviewslice src, dst */ __pyx_v_new_ndim = 0; __pyx_v_suboffset_dim = -1; /* "View.MemoryView":714 * * * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<< * * cdef _memoryviewslice memviewsliceobj */ (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst)))); /* "View.MemoryView":718 * cdef _memoryviewslice memviewsliceobj * * assert memview.view.ndim > 0 # <<<<<<<<<<<<<< * * if isinstance(memview, _memoryviewslice): */ #ifndef CYTHON_WITHOUT_ASSERTIONS if (unlikely(!Py_OptimizeFlag)) { if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) { PyErr_SetNone(PyExc_AssertionError); __PYX_ERR(2, 718, __pyx_L1_error) } } #endif /* "View.MemoryView":720 * assert memview.view.ndim > 0 * * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * memviewsliceobj = memview * p_src = &memviewsliceobj.from_slice */ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":721 * * if isinstance(memview, _memoryviewslice): * memviewsliceobj = memview # <<<<<<<<<<<<<< * p_src = &memviewsliceobj.from_slice * else: */ if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 721, __pyx_L1_error) __pyx_t_3 = ((PyObject *)__pyx_v_memview); __Pyx_INCREF(__pyx_t_3); __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":722 * if isinstance(memview, _memoryviewslice): * memviewsliceobj = memview * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<< * else: * slice_copy(memview, &src) */ __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice); /* "View.MemoryView":720 * assert memview.view.ndim > 0 * * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * memviewsliceobj = memview * p_src = &memviewsliceobj.from_slice */ goto __pyx_L3; } /* "View.MemoryView":724 * p_src = &memviewsliceobj.from_slice * else: * slice_copy(memview, &src) # <<<<<<<<<<<<<< * p_src = &src * */ /*else*/ { __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src)); /* "View.MemoryView":725 * else: * slice_copy(memview, &src) * p_src = &src # <<<<<<<<<<<<<< * * */ __pyx_v_p_src = (&__pyx_v_src); } __pyx_L3:; /* "View.MemoryView":731 * * * dst.memview = p_src.memview # <<<<<<<<<<<<<< * dst.data = p_src.data * */ __pyx_t_4 = __pyx_v_p_src->memview; __pyx_v_dst.memview = __pyx_t_4; /* "View.MemoryView":732 * * dst.memview = p_src.memview * dst.data = p_src.data # <<<<<<<<<<<<<< * * */ __pyx_t_5 = __pyx_v_p_src->data; __pyx_v_dst.data = __pyx_t_5; /* "View.MemoryView":737 * * * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<< * cdef int *p_suboffset_dim = &suboffset_dim * cdef Py_ssize_t start, stop, step */ __pyx_v_p_dst = (&__pyx_v_dst); /* "View.MemoryView":738 * * cdef __Pyx_memviewslice *p_dst = &dst * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<< * cdef Py_ssize_t start, stop, step * cdef bint have_start, have_stop, have_step */ __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim); /* "View.MemoryView":742 * cdef bint have_start, have_stop, have_step * * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< * if PyIndex_Check(index): * slice_memviewslice( */ __pyx_t_6 = 0; if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) { __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0; __pyx_t_8 = NULL; } else { __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 742, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_8)) { if (likely(PyList_CheckExact(__pyx_t_3))) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 742, __pyx_L1_error) #else __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); #endif } else { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(2, 742, __pyx_L1_error) #else __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); #endif } } else { __pyx_t_9 = __pyx_t_8(__pyx_t_3); if (unlikely(!__pyx_t_9)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(2, 742, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_9); } __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9); __pyx_t_9 = 0; __pyx_v_dim = __pyx_t_6; __pyx_t_6 = (__pyx_t_6 + 1); /* "View.MemoryView":743 * * for dim, index in enumerate(indices): * if PyIndex_Check(index): # <<<<<<<<<<<<<< * slice_memviewslice( * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], */ __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0); if (__pyx_t_2) { /* "View.MemoryView":747 * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], * dim, new_ndim, p_suboffset_dim, * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<< * 0, 0, 0, # have_{start,stop,step} * False) */ __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 747, __pyx_L1_error) /* "View.MemoryView":744 * for dim, index in enumerate(indices): * if PyIndex_Check(index): * slice_memviewslice( # <<<<<<<<<<<<<< * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], * dim, new_ndim, p_suboffset_dim, */ __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 744, __pyx_L1_error) /* "View.MemoryView":743 * * for dim, index in enumerate(indices): * if PyIndex_Check(index): # <<<<<<<<<<<<<< * slice_memviewslice( * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], */ goto __pyx_L6; } /* "View.MemoryView":750 * 0, 0, 0, # have_{start,stop,step} * False) * elif index is None: # <<<<<<<<<<<<<< * p_dst.shape[new_ndim] = 1 * p_dst.strides[new_ndim] = 0 */ __pyx_t_2 = (__pyx_v_index == Py_None); __pyx_t_1 = (__pyx_t_2 != 0); if (__pyx_t_1) { /* "View.MemoryView":751 * False) * elif index is None: * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<< * p_dst.strides[new_ndim] = 0 * p_dst.suboffsets[new_ndim] = -1 */ (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1; /* "View.MemoryView":752 * elif index is None: * p_dst.shape[new_ndim] = 1 * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<< * p_dst.suboffsets[new_ndim] = -1 * new_ndim += 1 */ (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0; /* "View.MemoryView":753 * p_dst.shape[new_ndim] = 1 * p_dst.strides[new_ndim] = 0 * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<< * new_ndim += 1 * else: */ (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L; /* "View.MemoryView":754 * p_dst.strides[new_ndim] = 0 * p_dst.suboffsets[new_ndim] = -1 * new_ndim += 1 # <<<<<<<<<<<<<< * else: * start = index.start or 0 */ __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); /* "View.MemoryView":750 * 0, 0, 0, # have_{start,stop,step} * False) * elif index is None: # <<<<<<<<<<<<<< * p_dst.shape[new_ndim] = 1 * p_dst.strides[new_ndim] = 0 */ goto __pyx_L6; } /* "View.MemoryView":756 * new_ndim += 1 * else: * start = index.start or 0 # <<<<<<<<<<<<<< * stop = index.stop or 0 * step = index.step or 0 */ /*else*/ { __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 756, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else { __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 756, __pyx_L1_error) __pyx_t_10 = __pyx_t_12; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L7_bool_binop_done; } __pyx_t_10 = 0; __pyx_L7_bool_binop_done:; __pyx_v_start = __pyx_t_10; /* "View.MemoryView":757 * else: * start = index.start or 0 * stop = index.stop or 0 # <<<<<<<<<<<<<< * step = index.step or 0 * */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 757, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else { __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 757, __pyx_L1_error) __pyx_t_10 = __pyx_t_12; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L9_bool_binop_done; } __pyx_t_10 = 0; __pyx_L9_bool_binop_done:; __pyx_v_stop = __pyx_t_10; /* "View.MemoryView":758 * start = index.start or 0 * stop = index.stop or 0 * step = index.step or 0 # <<<<<<<<<<<<<< * * have_start = index.start is not None */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 758, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(2, 758, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } else { __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 758, __pyx_L1_error) __pyx_t_10 = __pyx_t_12; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L11_bool_binop_done; } __pyx_t_10 = 0; __pyx_L11_bool_binop_done:; __pyx_v_step = __pyx_t_10; /* "View.MemoryView":760 * step = index.step or 0 * * have_start = index.start is not None # <<<<<<<<<<<<<< * have_stop = index.stop is not None * have_step = index.step is not None */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 760, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = (__pyx_t_9 != Py_None); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_have_start = __pyx_t_1; /* "View.MemoryView":761 * * have_start = index.start is not None * have_stop = index.stop is not None # <<<<<<<<<<<<<< * have_step = index.step is not None * */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = (__pyx_t_9 != Py_None); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_have_stop = __pyx_t_1; /* "View.MemoryView":762 * have_start = index.start is not None * have_stop = index.stop is not None * have_step = index.step is not None # <<<<<<<<<<<<<< * * slice_memviewslice( */ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 762, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_1 = (__pyx_t_9 != Py_None); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_v_have_step = __pyx_t_1; /* "View.MemoryView":764 * have_step = index.step is not None * * slice_memviewslice( # <<<<<<<<<<<<<< * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim], * dim, new_ndim, p_suboffset_dim, */ __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 764, __pyx_L1_error) /* "View.MemoryView":770 * have_start, have_stop, have_step, * True) * new_ndim += 1 # <<<<<<<<<<<<<< * * if isinstance(memview, _memoryviewslice): */ __pyx_v_new_ndim = (__pyx_v_new_ndim + 1); } __pyx_L6:; /* "View.MemoryView":742 * cdef bint have_start, have_stop, have_step * * for dim, index in enumerate(indices): # <<<<<<<<<<<<<< * if PyIndex_Check(index): * slice_memviewslice( */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":772 * new_ndim += 1 * * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * return memoryview_fromslice(dst, new_ndim, * memviewsliceobj.to_object_func, */ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":773 * * if isinstance(memview, _memoryviewslice): * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< * memviewsliceobj.to_object_func, * memviewsliceobj.to_dtype_func, */ __Pyx_XDECREF(((PyObject *)__pyx_r)); /* "View.MemoryView":774 * if isinstance(memview, _memoryviewslice): * return memoryview_fromslice(dst, new_ndim, * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<< * memviewsliceobj.to_dtype_func, * memview.dtype_is_object) */ if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 774, __pyx_L1_error) } /* "View.MemoryView":775 * return memoryview_fromslice(dst, new_ndim, * memviewsliceobj.to_object_func, * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<< * memview.dtype_is_object) * else: */ if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(2, 775, __pyx_L1_error) } /* "View.MemoryView":773 * * if isinstance(memview, _memoryviewslice): * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<< * memviewsliceobj.to_object_func, * memviewsliceobj.to_dtype_func, */ __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 773, __pyx_L1_error) __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; /* "View.MemoryView":772 * new_ndim += 1 * * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * return memoryview_fromslice(dst, new_ndim, * memviewsliceobj.to_object_func, */ } /* "View.MemoryView":778 * memview.dtype_is_object) * else: * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< * memview.dtype_is_object) * */ /*else*/ { __Pyx_XDECREF(((PyObject *)__pyx_r)); /* "View.MemoryView":779 * else: * return memoryview_fromslice(dst, new_ndim, NULL, NULL, * memview.dtype_is_object) # <<<<<<<<<<<<<< * * */ __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 778, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); /* "View.MemoryView":778 * memview.dtype_is_object) * else: * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<< * memview.dtype_is_object) * */ if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(2, 778, __pyx_L1_error) __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; } /* "View.MemoryView":706 * * @cname('__pyx_memview_slice') * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<< * cdef int new_ndim = 0, suboffset_dim = -1, dim * cdef bint negative_step */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj); __Pyx_XDECREF(__pyx_v_index); __Pyx_XGIVEREF((PyObject *)__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":803 * * @cname('__pyx_memoryview_slice_memviewslice') * cdef int slice_memviewslice( # <<<<<<<<<<<<<< * __Pyx_memviewslice *dst, * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, */ static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) { Py_ssize_t __pyx_v_new_shape; int __pyx_v_negative_step; int __pyx_r; int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; /* "View.MemoryView":823 * cdef bint negative_step * * if not is_slice: # <<<<<<<<<<<<<< * * if start < 0: */ __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0); if (__pyx_t_1) { /* "View.MemoryView":825 * if not is_slice: * * if start < 0: # <<<<<<<<<<<<<< * start += shape * if not 0 <= start < shape: */ __pyx_t_1 = ((__pyx_v_start < 0) != 0); if (__pyx_t_1) { /* "View.MemoryView":826 * * if start < 0: * start += shape # <<<<<<<<<<<<<< * if not 0 <= start < shape: * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) */ __pyx_v_start = (__pyx_v_start + __pyx_v_shape); /* "View.MemoryView":825 * if not is_slice: * * if start < 0: # <<<<<<<<<<<<<< * start += shape * if not 0 <= start < shape: */ } /* "View.MemoryView":827 * if start < 0: * start += shape * if not 0 <= start < shape: # <<<<<<<<<<<<<< * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) * else: */ __pyx_t_1 = (0 <= __pyx_v_start); if (__pyx_t_1) { __pyx_t_1 = (__pyx_v_start < __pyx_v_shape); } __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":828 * start += shape * if not 0 <= start < shape: * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<< * else: * */ __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 828, __pyx_L1_error) /* "View.MemoryView":827 * if start < 0: * start += shape * if not 0 <= start < shape: # <<<<<<<<<<<<<< * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) * else: */ } /* "View.MemoryView":823 * cdef bint negative_step * * if not is_slice: # <<<<<<<<<<<<<< * * if start < 0: */ goto __pyx_L3; } /* "View.MemoryView":831 * else: * * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<< * * if have_step and step == 0: */ /*else*/ { __pyx_t_1 = ((__pyx_v_have_step != 0) != 0); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L6_bool_binop_done; } __pyx_t_1 = ((__pyx_v_step < 0) != 0); __pyx_t_2 = __pyx_t_1; __pyx_L6_bool_binop_done:; __pyx_v_negative_step = __pyx_t_2; /* "View.MemoryView":833 * negative_step = have_step != 0 and step < 0 * * if have_step and step == 0: # <<<<<<<<<<<<<< * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) * */ __pyx_t_1 = (__pyx_v_have_step != 0); if (__pyx_t_1) { } else { __pyx_t_2 = __pyx_t_1; goto __pyx_L9_bool_binop_done; } __pyx_t_1 = ((__pyx_v_step == 0) != 0); __pyx_t_2 = __pyx_t_1; __pyx_L9_bool_binop_done:; if (__pyx_t_2) { /* "View.MemoryView":834 * * if have_step and step == 0: * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<< * * */ __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 834, __pyx_L1_error) /* "View.MemoryView":833 * negative_step = have_step != 0 and step < 0 * * if have_step and step == 0: # <<<<<<<<<<<<<< * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) * */ } /* "View.MemoryView":837 * * * if have_start: # <<<<<<<<<<<<<< * if start < 0: * start += shape */ __pyx_t_2 = (__pyx_v_have_start != 0); if (__pyx_t_2) { /* "View.MemoryView":838 * * if have_start: * if start < 0: # <<<<<<<<<<<<<< * start += shape * if start < 0: */ __pyx_t_2 = ((__pyx_v_start < 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":839 * if have_start: * if start < 0: * start += shape # <<<<<<<<<<<<<< * if start < 0: * start = 0 */ __pyx_v_start = (__pyx_v_start + __pyx_v_shape); /* "View.MemoryView":840 * if start < 0: * start += shape * if start < 0: # <<<<<<<<<<<<<< * start = 0 * elif start >= shape: */ __pyx_t_2 = ((__pyx_v_start < 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":841 * start += shape * if start < 0: * start = 0 # <<<<<<<<<<<<<< * elif start >= shape: * if negative_step: */ __pyx_v_start = 0; /* "View.MemoryView":840 * if start < 0: * start += shape * if start < 0: # <<<<<<<<<<<<<< * start = 0 * elif start >= shape: */ } /* "View.MemoryView":838 * * if have_start: * if start < 0: # <<<<<<<<<<<<<< * start += shape * if start < 0: */ goto __pyx_L12; } /* "View.MemoryView":842 * if start < 0: * start = 0 * elif start >= shape: # <<<<<<<<<<<<<< * if negative_step: * start = shape - 1 */ __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0); if (__pyx_t_2) { /* "View.MemoryView":843 * start = 0 * elif start >= shape: * if negative_step: # <<<<<<<<<<<<<< * start = shape - 1 * else: */ __pyx_t_2 = (__pyx_v_negative_step != 0); if (__pyx_t_2) { /* "View.MemoryView":844 * elif start >= shape: * if negative_step: * start = shape - 1 # <<<<<<<<<<<<<< * else: * start = shape */ __pyx_v_start = (__pyx_v_shape - 1); /* "View.MemoryView":843 * start = 0 * elif start >= shape: * if negative_step: # <<<<<<<<<<<<<< * start = shape - 1 * else: */ goto __pyx_L14; } /* "View.MemoryView":846 * start = shape - 1 * else: * start = shape # <<<<<<<<<<<<<< * else: * if negative_step: */ /*else*/ { __pyx_v_start = __pyx_v_shape; } __pyx_L14:; /* "View.MemoryView":842 * if start < 0: * start = 0 * elif start >= shape: # <<<<<<<<<<<<<< * if negative_step: * start = shape - 1 */ } __pyx_L12:; /* "View.MemoryView":837 * * * if have_start: # <<<<<<<<<<<<<< * if start < 0: * start += shape */ goto __pyx_L11; } /* "View.MemoryView":848 * start = shape * else: * if negative_step: # <<<<<<<<<<<<<< * start = shape - 1 * else: */ /*else*/ { __pyx_t_2 = (__pyx_v_negative_step != 0); if (__pyx_t_2) { /* "View.MemoryView":849 * else: * if negative_step: * start = shape - 1 # <<<<<<<<<<<<<< * else: * start = 0 */ __pyx_v_start = (__pyx_v_shape - 1); /* "View.MemoryView":848 * start = shape * else: * if negative_step: # <<<<<<<<<<<<<< * start = shape - 1 * else: */ goto __pyx_L15; } /* "View.MemoryView":851 * start = shape - 1 * else: * start = 0 # <<<<<<<<<<<<<< * * if have_stop: */ /*else*/ { __pyx_v_start = 0; } __pyx_L15:; } __pyx_L11:; /* "View.MemoryView":853 * start = 0 * * if have_stop: # <<<<<<<<<<<<<< * if stop < 0: * stop += shape */ __pyx_t_2 = (__pyx_v_have_stop != 0); if (__pyx_t_2) { /* "View.MemoryView":854 * * if have_stop: * if stop < 0: # <<<<<<<<<<<<<< * stop += shape * if stop < 0: */ __pyx_t_2 = ((__pyx_v_stop < 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":855 * if have_stop: * if stop < 0: * stop += shape # <<<<<<<<<<<<<< * if stop < 0: * stop = 0 */ __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape); /* "View.MemoryView":856 * if stop < 0: * stop += shape * if stop < 0: # <<<<<<<<<<<<<< * stop = 0 * elif stop > shape: */ __pyx_t_2 = ((__pyx_v_stop < 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":857 * stop += shape * if stop < 0: * stop = 0 # <<<<<<<<<<<<<< * elif stop > shape: * stop = shape */ __pyx_v_stop = 0; /* "View.MemoryView":856 * if stop < 0: * stop += shape * if stop < 0: # <<<<<<<<<<<<<< * stop = 0 * elif stop > shape: */ } /* "View.MemoryView":854 * * if have_stop: * if stop < 0: # <<<<<<<<<<<<<< * stop += shape * if stop < 0: */ goto __pyx_L17; } /* "View.MemoryView":858 * if stop < 0: * stop = 0 * elif stop > shape: # <<<<<<<<<<<<<< * stop = shape * else: */ __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0); if (__pyx_t_2) { /* "View.MemoryView":859 * stop = 0 * elif stop > shape: * stop = shape # <<<<<<<<<<<<<< * else: * if negative_step: */ __pyx_v_stop = __pyx_v_shape; /* "View.MemoryView":858 * if stop < 0: * stop = 0 * elif stop > shape: # <<<<<<<<<<<<<< * stop = shape * else: */ } __pyx_L17:; /* "View.MemoryView":853 * start = 0 * * if have_stop: # <<<<<<<<<<<<<< * if stop < 0: * stop += shape */ goto __pyx_L16; } /* "View.MemoryView":861 * stop = shape * else: * if negative_step: # <<<<<<<<<<<<<< * stop = -1 * else: */ /*else*/ { __pyx_t_2 = (__pyx_v_negative_step != 0); if (__pyx_t_2) { /* "View.MemoryView":862 * else: * if negative_step: * stop = -1 # <<<<<<<<<<<<<< * else: * stop = shape */ __pyx_v_stop = -1L; /* "View.MemoryView":861 * stop = shape * else: * if negative_step: # <<<<<<<<<<<<<< * stop = -1 * else: */ goto __pyx_L19; } /* "View.MemoryView":864 * stop = -1 * else: * stop = shape # <<<<<<<<<<<<<< * * if not have_step: */ /*else*/ { __pyx_v_stop = __pyx_v_shape; } __pyx_L19:; } __pyx_L16:; /* "View.MemoryView":866 * stop = shape * * if not have_step: # <<<<<<<<<<<<<< * step = 1 * */ __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":867 * * if not have_step: * step = 1 # <<<<<<<<<<<<<< * * */ __pyx_v_step = 1; /* "View.MemoryView":866 * stop = shape * * if not have_step: # <<<<<<<<<<<<<< * step = 1 * */ } /* "View.MemoryView":871 * * with cython.cdivision(True): * new_shape = (stop - start) // step # <<<<<<<<<<<<<< * * if (stop - start) - step * new_shape: */ __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step); /* "View.MemoryView":873 * new_shape = (stop - start) // step * * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< * new_shape += 1 * */ __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0); if (__pyx_t_2) { /* "View.MemoryView":874 * * if (stop - start) - step * new_shape: * new_shape += 1 # <<<<<<<<<<<<<< * * if new_shape < 0: */ __pyx_v_new_shape = (__pyx_v_new_shape + 1); /* "View.MemoryView":873 * new_shape = (stop - start) // step * * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<< * new_shape += 1 * */ } /* "View.MemoryView":876 * new_shape += 1 * * if new_shape < 0: # <<<<<<<<<<<<<< * new_shape = 0 * */ __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":877 * * if new_shape < 0: * new_shape = 0 # <<<<<<<<<<<<<< * * */ __pyx_v_new_shape = 0; /* "View.MemoryView":876 * new_shape += 1 * * if new_shape < 0: # <<<<<<<<<<<<<< * new_shape = 0 * */ } /* "View.MemoryView":880 * * * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<< * dst.shape[new_ndim] = new_shape * dst.suboffsets[new_ndim] = suboffset */ (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step); /* "View.MemoryView":881 * * dst.strides[new_ndim] = stride * step * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<< * dst.suboffsets[new_ndim] = suboffset * */ (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape; /* "View.MemoryView":882 * dst.strides[new_ndim] = stride * step * dst.shape[new_ndim] = new_shape * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<< * * */ (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset; } __pyx_L3:; /* "View.MemoryView":885 * * * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< * dst.data += start * stride * else: */ __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":886 * * if suboffset_dim[0] < 0: * dst.data += start * stride # <<<<<<<<<<<<<< * else: * dst.suboffsets[suboffset_dim[0]] += start * stride */ __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride)); /* "View.MemoryView":885 * * * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<< * dst.data += start * stride * else: */ goto __pyx_L23; } /* "View.MemoryView":888 * dst.data += start * stride * else: * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<< * * if suboffset >= 0: */ /*else*/ { __pyx_t_3 = (__pyx_v_suboffset_dim[0]); (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride)); } __pyx_L23:; /* "View.MemoryView":890 * dst.suboffsets[suboffset_dim[0]] += start * stride * * if suboffset >= 0: # <<<<<<<<<<<<<< * if not is_slice: * if new_ndim == 0: */ __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":891 * * if suboffset >= 0: * if not is_slice: # <<<<<<<<<<<<<< * if new_ndim == 0: * dst.data = ( dst.data)[0] + suboffset */ __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":892 * if suboffset >= 0: * if not is_slice: * if new_ndim == 0: # <<<<<<<<<<<<<< * dst.data = ( dst.data)[0] + suboffset * else: */ __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":893 * if not is_slice: * if new_ndim == 0: * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<< * else: * _err_dim(IndexError, "All dimensions preceding dimension %d " */ __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset); /* "View.MemoryView":892 * if suboffset >= 0: * if not is_slice: * if new_ndim == 0: # <<<<<<<<<<<<<< * dst.data = ( dst.data)[0] + suboffset * else: */ goto __pyx_L26; } /* "View.MemoryView":895 * dst.data = ( dst.data)[0] + suboffset * else: * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<< * "must be indexed and not sliced", dim) * else: */ /*else*/ { /* "View.MemoryView":896 * else: * _err_dim(IndexError, "All dimensions preceding dimension %d " * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<< * else: * suboffset_dim[0] = new_ndim */ __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 895, __pyx_L1_error) } __pyx_L26:; /* "View.MemoryView":891 * * if suboffset >= 0: * if not is_slice: # <<<<<<<<<<<<<< * if new_ndim == 0: * dst.data = ( dst.data)[0] + suboffset */ goto __pyx_L25; } /* "View.MemoryView":898 * "must be indexed and not sliced", dim) * else: * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<< * * return 0 */ /*else*/ { (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim; } __pyx_L25:; /* "View.MemoryView":890 * dst.suboffsets[suboffset_dim[0]] += start * stride * * if suboffset >= 0: # <<<<<<<<<<<<<< * if not is_slice: * if new_ndim == 0: */ } /* "View.MemoryView":900 * suboffset_dim[0] = new_ndim * * return 0 # <<<<<<<<<<<<<< * * */ __pyx_r = 0; goto __pyx_L0; /* "View.MemoryView":803 * * @cname('__pyx_memoryview_slice_memviewslice') * cdef int slice_memviewslice( # <<<<<<<<<<<<<< * __Pyx_memviewslice *dst, * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset, */ /* function exit code */ __pyx_L1_error:; { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif } __pyx_r = -1; __pyx_L0:; return __pyx_r; } /* "View.MemoryView":906 * * @cname('__pyx_pybuffer_index') * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< * Py_ssize_t dim) except NULL: * cdef Py_ssize_t shape, stride, suboffset = -1 */ static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) { Py_ssize_t __pyx_v_shape; Py_ssize_t __pyx_v_stride; Py_ssize_t __pyx_v_suboffset; Py_ssize_t __pyx_v_itemsize; char *__pyx_v_resultp; char *__pyx_r; __Pyx_RefNannyDeclarations Py_ssize_t __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; __Pyx_RefNannySetupContext("pybuffer_index", 0); /* "View.MemoryView":908 * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, * Py_ssize_t dim) except NULL: * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<< * cdef Py_ssize_t itemsize = view.itemsize * cdef char *resultp */ __pyx_v_suboffset = -1L; /* "View.MemoryView":909 * Py_ssize_t dim) except NULL: * cdef Py_ssize_t shape, stride, suboffset = -1 * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<< * cdef char *resultp * */ __pyx_t_1 = __pyx_v_view->itemsize; __pyx_v_itemsize = __pyx_t_1; /* "View.MemoryView":912 * cdef char *resultp * * if view.ndim == 0: # <<<<<<<<<<<<<< * shape = view.len / itemsize * stride = itemsize */ __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":913 * * if view.ndim == 0: * shape = view.len / itemsize # <<<<<<<<<<<<<< * stride = itemsize * else: */ if (unlikely(__pyx_v_itemsize == 0)) { PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero"); __PYX_ERR(2, 913, __pyx_L1_error) } else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) { PyErr_SetString(PyExc_OverflowError, "value too large to perform division"); __PYX_ERR(2, 913, __pyx_L1_error) } __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize); /* "View.MemoryView":914 * if view.ndim == 0: * shape = view.len / itemsize * stride = itemsize # <<<<<<<<<<<<<< * else: * shape = view.shape[dim] */ __pyx_v_stride = __pyx_v_itemsize; /* "View.MemoryView":912 * cdef char *resultp * * if view.ndim == 0: # <<<<<<<<<<<<<< * shape = view.len / itemsize * stride = itemsize */ goto __pyx_L3; } /* "View.MemoryView":916 * stride = itemsize * else: * shape = view.shape[dim] # <<<<<<<<<<<<<< * stride = view.strides[dim] * if view.suboffsets != NULL: */ /*else*/ { __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]); /* "View.MemoryView":917 * else: * shape = view.shape[dim] * stride = view.strides[dim] # <<<<<<<<<<<<<< * if view.suboffsets != NULL: * suboffset = view.suboffsets[dim] */ __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]); /* "View.MemoryView":918 * shape = view.shape[dim] * stride = view.strides[dim] * if view.suboffsets != NULL: # <<<<<<<<<<<<<< * suboffset = view.suboffsets[dim] * */ __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0); if (__pyx_t_2) { /* "View.MemoryView":919 * stride = view.strides[dim] * if view.suboffsets != NULL: * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<< * * if index < 0: */ __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]); /* "View.MemoryView":918 * shape = view.shape[dim] * stride = view.strides[dim] * if view.suboffsets != NULL: # <<<<<<<<<<<<<< * suboffset = view.suboffsets[dim] * */ } } __pyx_L3:; /* "View.MemoryView":921 * suboffset = view.suboffsets[dim] * * if index < 0: # <<<<<<<<<<<<<< * index += view.shape[dim] * if index < 0: */ __pyx_t_2 = ((__pyx_v_index < 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":922 * * if index < 0: * index += view.shape[dim] # <<<<<<<<<<<<<< * if index < 0: * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) */ __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim])); /* "View.MemoryView":923 * if index < 0: * index += view.shape[dim] * if index < 0: # <<<<<<<<<<<<<< * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) * */ __pyx_t_2 = ((__pyx_v_index < 0) != 0); if (unlikely(__pyx_t_2)) { /* "View.MemoryView":924 * index += view.shape[dim] * if index < 0: * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< * * if index >= shape: */ __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 924, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 924, __pyx_L1_error) /* "View.MemoryView":923 * if index < 0: * index += view.shape[dim] * if index < 0: # <<<<<<<<<<<<<< * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) * */ } /* "View.MemoryView":921 * suboffset = view.suboffsets[dim] * * if index < 0: # <<<<<<<<<<<<<< * index += view.shape[dim] * if index < 0: */ } /* "View.MemoryView":926 * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) * * if index >= shape: # <<<<<<<<<<<<<< * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) * */ __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0); if (unlikely(__pyx_t_2)) { /* "View.MemoryView":927 * * if index >= shape: * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<< * * resultp = bufp + index * stride */ __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 927, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 927, __pyx_L1_error) /* "View.MemoryView":926 * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) * * if index >= shape: # <<<<<<<<<<<<<< * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) * */ } /* "View.MemoryView":929 * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) * * resultp = bufp + index * stride # <<<<<<<<<<<<<< * if suboffset >= 0: * resultp = ( resultp)[0] + suboffset */ __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride)); /* "View.MemoryView":930 * * resultp = bufp + index * stride * if suboffset >= 0: # <<<<<<<<<<<<<< * resultp = ( resultp)[0] + suboffset * */ __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":931 * resultp = bufp + index * stride * if suboffset >= 0: * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<< * * return resultp */ __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset); /* "View.MemoryView":930 * * resultp = bufp + index * stride * if suboffset >= 0: # <<<<<<<<<<<<<< * resultp = ( resultp)[0] + suboffset * */ } /* "View.MemoryView":933 * resultp = ( resultp)[0] + suboffset * * return resultp # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_resultp; goto __pyx_L0; /* "View.MemoryView":906 * * @cname('__pyx_pybuffer_index') * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<< * Py_ssize_t dim) except NULL: * cdef Py_ssize_t shape, stride, suboffset = -1 */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":939 * * @cname('__pyx_memslice_transpose') * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< * cdef int ndim = memslice.memview.view.ndim * */ static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) { int __pyx_v_ndim; Py_ssize_t *__pyx_v_shape; Py_ssize_t *__pyx_v_strides; int __pyx_v_i; int __pyx_v_j; int __pyx_r; int __pyx_t_1; Py_ssize_t *__pyx_t_2; long __pyx_t_3; long __pyx_t_4; Py_ssize_t __pyx_t_5; Py_ssize_t __pyx_t_6; int __pyx_t_7; int __pyx_t_8; int __pyx_t_9; /* "View.MemoryView":940 * @cname('__pyx_memslice_transpose') * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<< * * cdef Py_ssize_t *shape = memslice.shape */ __pyx_t_1 = __pyx_v_memslice->memview->view.ndim; __pyx_v_ndim = __pyx_t_1; /* "View.MemoryView":942 * cdef int ndim = memslice.memview.view.ndim * * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<< * cdef Py_ssize_t *strides = memslice.strides * */ __pyx_t_2 = __pyx_v_memslice->shape; __pyx_v_shape = __pyx_t_2; /* "View.MemoryView":943 * * cdef Py_ssize_t *shape = memslice.shape * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<< * * */ __pyx_t_2 = __pyx_v_memslice->strides; __pyx_v_strides = __pyx_t_2; /* "View.MemoryView":947 * * cdef int i, j * for i in range(ndim / 2): # <<<<<<<<<<<<<< * j = ndim - 1 - i * strides[i], strides[j] = strides[j], strides[i] */ __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2); __pyx_t_4 = __pyx_t_3; for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) { __pyx_v_i = __pyx_t_1; /* "View.MemoryView":948 * cdef int i, j * for i in range(ndim / 2): * j = ndim - 1 - i # <<<<<<<<<<<<<< * strides[i], strides[j] = strides[j], strides[i] * shape[i], shape[j] = shape[j], shape[i] */ __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i); /* "View.MemoryView":949 * for i in range(ndim / 2): * j = ndim - 1 - i * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<< * shape[i], shape[j] = shape[j], shape[i] * */ __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]); __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]); (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5; (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6; /* "View.MemoryView":950 * j = ndim - 1 - i * strides[i], strides[j] = strides[j], strides[i] * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<< * * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: */ __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]); __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]); (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6; (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5; /* "View.MemoryView":952 * shape[i], shape[j] = shape[j], shape[i] * * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") * */ __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0); if (!__pyx_t_8) { } else { __pyx_t_7 = __pyx_t_8; goto __pyx_L6_bool_binop_done; } __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0); __pyx_t_7 = __pyx_t_8; __pyx_L6_bool_binop_done:; if (__pyx_t_7) { /* "View.MemoryView":953 * * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<< * * return 1 */ __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 953, __pyx_L1_error) /* "View.MemoryView":952 * shape[i], shape[j] = shape[j], shape[i] * * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<< * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") * */ } } /* "View.MemoryView":955 * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") * * return 1 # <<<<<<<<<<<<<< * * */ __pyx_r = 1; goto __pyx_L0; /* "View.MemoryView":939 * * @cname('__pyx_memslice_transpose') * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<< * cdef int ndim = memslice.memview.view.ndim * */ /* function exit code */ __pyx_L1_error:; { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif } __pyx_r = 0; __pyx_L0:; return __pyx_r; } /* "View.MemoryView":972 * cdef int (*to_dtype_func)(char *, object) except 0 * * def __dealloc__(self): # <<<<<<<<<<<<<< * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) * */ /* Python wrapper */ static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/ static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); } static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__dealloc__", 0); /* "View.MemoryView":973 * * def __dealloc__(self): * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<< * * cdef convert_item_to_object(self, char *itemp): */ __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1); /* "View.MemoryView":972 * cdef int (*to_dtype_func)(char *, object) except 0 * * def __dealloc__(self): # <<<<<<<<<<<<<< * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) * */ /* function exit code */ __Pyx_RefNannyFinishContext(); } /* "View.MemoryView":975 * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) * * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< * if self.to_object_func != NULL: * return self.to_object_func(itemp) */ static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; __Pyx_RefNannySetupContext("convert_item_to_object", 0); /* "View.MemoryView":976 * * cdef convert_item_to_object(self, char *itemp): * if self.to_object_func != NULL: # <<<<<<<<<<<<<< * return self.to_object_func(itemp) * else: */ __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":977 * cdef convert_item_to_object(self, char *itemp): * if self.to_object_func != NULL: * return self.to_object_func(itemp) # <<<<<<<<<<<<<< * else: * return memoryview.convert_item_to_object(self, itemp) */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 977, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; /* "View.MemoryView":976 * * cdef convert_item_to_object(self, char *itemp): * if self.to_object_func != NULL: # <<<<<<<<<<<<<< * return self.to_object_func(itemp) * else: */ } /* "View.MemoryView":979 * return self.to_object_func(itemp) * else: * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<< * * cdef assign_item_from_object(self, char *itemp, object value): */ /*else*/ { __Pyx_XDECREF(__pyx_r); __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 979, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; } /* "View.MemoryView":975 * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) * * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<< * if self.to_object_func != NULL: * return self.to_object_func(itemp) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":981 * return memoryview.convert_item_to_object(self, itemp) * * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< * if self.to_dtype_func != NULL: * self.to_dtype_func(itemp, value) */ static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("assign_item_from_object", 0); /* "View.MemoryView":982 * * cdef assign_item_from_object(self, char *itemp, object value): * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< * self.to_dtype_func(itemp, value) * else: */ __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0); if (__pyx_t_1) { /* "View.MemoryView":983 * cdef assign_item_from_object(self, char *itemp, object value): * if self.to_dtype_func != NULL: * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<< * else: * memoryview.assign_item_from_object(self, itemp, value) */ __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(2, 983, __pyx_L1_error) /* "View.MemoryView":982 * * cdef assign_item_from_object(self, char *itemp, object value): * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<< * self.to_dtype_func(itemp, value) * else: */ goto __pyx_L3; } /* "View.MemoryView":985 * self.to_dtype_func(itemp, value) * else: * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<< * * @property */ /*else*/ { __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 985, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_L3:; /* "View.MemoryView":981 * return memoryview.convert_item_to_object(self, itemp) * * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<< * if self.to_dtype_func != NULL: * self.to_dtype_func(itemp, value) */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":988 * * @property * def base(self): # <<<<<<<<<<<<<< * return self.from_object * */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__", 0); /* "View.MemoryView":989 * @property * def base(self): * return self.from_object # <<<<<<<<<<<<<< * * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->from_object); __pyx_r = __pyx_v_self->from_object; goto __pyx_L0; /* "View.MemoryView":988 * * @property * def base(self): # <<<<<<<<<<<<<< * return self.from_object * */ /* function exit code */ __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__reduce_cython__", 0); /* "(tree fragment)":2 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(2, 2, __pyx_L1_error) /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":3 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ /* Python wrapper */ static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__setstate_cython__", 0); /* "(tree fragment)":4 * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< */ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(2, 4, __pyx_L1_error) /* "(tree fragment)":3 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":995 * * @cname('__pyx_memoryview_fromslice') * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< * int ndim, * object (*to_object_func)(char *), */ static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) { struct __pyx_memoryviewslice_obj *__pyx_v_result = 0; Py_ssize_t __pyx_v_suboffset; PyObject *__pyx_v_length = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_TypeInfo *__pyx_t_4; Py_buffer __pyx_t_5; Py_ssize_t *__pyx_t_6; Py_ssize_t *__pyx_t_7; Py_ssize_t *__pyx_t_8; Py_ssize_t __pyx_t_9; __Pyx_RefNannySetupContext("memoryview_fromslice", 0); /* "View.MemoryView":1003 * cdef _memoryviewslice result * * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< * return None * */ __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0); if (__pyx_t_1) { /* "View.MemoryView":1004 * * if memviewslice.memview == Py_None: * return None # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; /* "View.MemoryView":1003 * cdef _memoryviewslice result * * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<< * return None * */ } /* "View.MemoryView":1009 * * * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<< * * result.from_slice = memviewslice */ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None); __Pyx_INCREF(__pyx_int_0); __Pyx_GIVEREF(__pyx_int_0); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2); __pyx_t_2 = 0; /* "View.MemoryView":1011 * result = _memoryviewslice(None, 0, dtype_is_object) * * result.from_slice = memviewslice # <<<<<<<<<<<<<< * __PYX_INC_MEMVIEW(&memviewslice, 1) * */ __pyx_v_result->from_slice = __pyx_v_memviewslice; /* "View.MemoryView":1012 * * result.from_slice = memviewslice * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<< * * result.from_object = ( memviewslice.memview).base */ __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1); /* "View.MemoryView":1014 * __PYX_INC_MEMVIEW(&memviewslice, 1) * * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<< * result.typeinfo = memviewslice.memview.typeinfo * */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1014, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_result->from_object); __Pyx_DECREF(__pyx_v_result->from_object); __pyx_v_result->from_object = __pyx_t_2; __pyx_t_2 = 0; /* "View.MemoryView":1015 * * result.from_object = ( memviewslice.memview).base * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<< * * result.view = memviewslice.memview.view */ __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo; __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4; /* "View.MemoryView":1017 * result.typeinfo = memviewslice.memview.typeinfo * * result.view = memviewslice.memview.view # <<<<<<<<<<<<<< * result.view.buf = memviewslice.data * result.view.ndim = ndim */ __pyx_t_5 = __pyx_v_memviewslice.memview->view; __pyx_v_result->__pyx_base.view = __pyx_t_5; /* "View.MemoryView":1018 * * result.view = memviewslice.memview.view * result.view.buf = memviewslice.data # <<<<<<<<<<<<<< * result.view.ndim = ndim * (<__pyx_buffer *> &result.view).obj = Py_None */ __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data); /* "View.MemoryView":1019 * result.view = memviewslice.memview.view * result.view.buf = memviewslice.data * result.view.ndim = ndim # <<<<<<<<<<<<<< * (<__pyx_buffer *> &result.view).obj = Py_None * Py_INCREF(Py_None) */ __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim; /* "View.MemoryView":1020 * result.view.buf = memviewslice.data * result.view.ndim = ndim * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<< * Py_INCREF(Py_None) * */ ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None; /* "View.MemoryView":1021 * result.view.ndim = ndim * (<__pyx_buffer *> &result.view).obj = Py_None * Py_INCREF(Py_None) # <<<<<<<<<<<<<< * * if (memviewslice.memview).flags & PyBUF_WRITABLE: */ Py_INCREF(Py_None); /* "View.MemoryView":1023 * Py_INCREF(Py_None) * * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< * result.flags = PyBUF_RECORDS * else: */ __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0); if (__pyx_t_1) { /* "View.MemoryView":1024 * * if (memviewslice.memview).flags & PyBUF_WRITABLE: * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<< * else: * result.flags = PyBUF_RECORDS_RO */ __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS; /* "View.MemoryView":1023 * Py_INCREF(Py_None) * * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<< * result.flags = PyBUF_RECORDS * else: */ goto __pyx_L4; } /* "View.MemoryView":1026 * result.flags = PyBUF_RECORDS * else: * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<< * * result.view.shape = result.from_slice.shape */ /*else*/ { __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO; } __pyx_L4:; /* "View.MemoryView":1028 * result.flags = PyBUF_RECORDS_RO * * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<< * result.view.strides = result.from_slice.strides * */ __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape); /* "View.MemoryView":1029 * * result.view.shape = result.from_slice.shape * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<< * * */ __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides); /* "View.MemoryView":1032 * * * result.view.suboffsets = NULL # <<<<<<<<<<<<<< * for suboffset in result.from_slice.suboffsets[:ndim]: * if suboffset >= 0: */ __pyx_v_result->__pyx_base.view.suboffsets = NULL; /* "View.MemoryView":1033 * * result.view.suboffsets = NULL * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<< * if suboffset >= 0: * result.view.suboffsets = result.from_slice.suboffsets */ __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim); for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { __pyx_t_6 = __pyx_t_8; __pyx_v_suboffset = (__pyx_t_6[0]); /* "View.MemoryView":1034 * result.view.suboffsets = NULL * for suboffset in result.from_slice.suboffsets[:ndim]: * if suboffset >= 0: # <<<<<<<<<<<<<< * result.view.suboffsets = result.from_slice.suboffsets * break */ __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0); if (__pyx_t_1) { /* "View.MemoryView":1035 * for suboffset in result.from_slice.suboffsets[:ndim]: * if suboffset >= 0: * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<< * break * */ __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets); /* "View.MemoryView":1036 * if suboffset >= 0: * result.view.suboffsets = result.from_slice.suboffsets * break # <<<<<<<<<<<<<< * * result.view.len = result.view.itemsize */ goto __pyx_L6_break; /* "View.MemoryView":1034 * result.view.suboffsets = NULL * for suboffset in result.from_slice.suboffsets[:ndim]: * if suboffset >= 0: # <<<<<<<<<<<<<< * result.view.suboffsets = result.from_slice.suboffsets * break */ } } __pyx_L6_break:; /* "View.MemoryView":1038 * break * * result.view.len = result.view.itemsize # <<<<<<<<<<<<<< * for length in result.view.shape[:ndim]: * result.view.len *= length */ __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize; __pyx_v_result->__pyx_base.view.len = __pyx_t_9; /* "View.MemoryView":1039 * * result.view.len = result.view.itemsize * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<< * result.view.len *= length * */ __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim); for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) { __pyx_t_6 = __pyx_t_8; __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1039, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2); __pyx_t_2 = 0; /* "View.MemoryView":1040 * result.view.len = result.view.itemsize * for length in result.view.shape[:ndim]: * result.view.len *= length # <<<<<<<<<<<<<< * * result.to_object_func = to_object_func */ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1040, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1040, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 1040, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_result->__pyx_base.view.len = __pyx_t_9; } /* "View.MemoryView":1042 * result.view.len *= length * * result.to_object_func = to_object_func # <<<<<<<<<<<<<< * result.to_dtype_func = to_dtype_func * */ __pyx_v_result->to_object_func = __pyx_v_to_object_func; /* "View.MemoryView":1043 * * result.to_object_func = to_object_func * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<< * * return result */ __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func; /* "View.MemoryView":1045 * result.to_dtype_func = to_dtype_func * * return result # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_get_slice_from_memoryview') */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_result)); __pyx_r = ((PyObject *)__pyx_v_result); goto __pyx_L0; /* "View.MemoryView":995 * * @cname('__pyx_memoryview_fromslice') * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<< * int ndim, * object (*to_object_func)(char *), */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_result); __Pyx_XDECREF(__pyx_v_length); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":1048 * * @cname('__pyx_memoryview_get_slice_from_memoryview') * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< * __Pyx_memviewslice *mslice): * cdef _memoryviewslice obj */ static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) { struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0; __Pyx_memviewslice *__pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("get_slice_from_memview", 0); /* "View.MemoryView":1051 * __Pyx_memviewslice *mslice): * cdef _memoryviewslice obj * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * obj = memview * return &obj.from_slice */ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":1052 * cdef _memoryviewslice obj * if isinstance(memview, _memoryviewslice): * obj = memview # <<<<<<<<<<<<<< * return &obj.from_slice * else: */ if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(2, 1052, __pyx_L1_error) __pyx_t_3 = ((PyObject *)__pyx_v_memview); __Pyx_INCREF(__pyx_t_3); __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3); __pyx_t_3 = 0; /* "View.MemoryView":1053 * if isinstance(memview, _memoryviewslice): * obj = memview * return &obj.from_slice # <<<<<<<<<<<<<< * else: * slice_copy(memview, mslice) */ __pyx_r = (&__pyx_v_obj->from_slice); goto __pyx_L0; /* "View.MemoryView":1051 * __Pyx_memviewslice *mslice): * cdef _memoryviewslice obj * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * obj = memview * return &obj.from_slice */ } /* "View.MemoryView":1055 * return &obj.from_slice * else: * slice_copy(memview, mslice) # <<<<<<<<<<<<<< * return mslice * */ /*else*/ { __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice); /* "View.MemoryView":1056 * else: * slice_copy(memview, mslice) * return mslice # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_slice_copy') */ __pyx_r = __pyx_v_mslice; goto __pyx_L0; } /* "View.MemoryView":1048 * * @cname('__pyx_memoryview_get_slice_from_memoryview') * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<< * __Pyx_memviewslice *mslice): * cdef _memoryviewslice obj */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_WriteUnraisable("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_obj); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":1059 * * @cname('__pyx_memoryview_slice_copy') * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< * cdef int dim * cdef (Py_ssize_t*) shape, strides, suboffsets */ static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) { int __pyx_v_dim; Py_ssize_t *__pyx_v_shape; Py_ssize_t *__pyx_v_strides; Py_ssize_t *__pyx_v_suboffsets; __Pyx_RefNannyDeclarations Py_ssize_t *__pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; Py_ssize_t __pyx_t_5; __Pyx_RefNannySetupContext("slice_copy", 0); /* "View.MemoryView":1063 * cdef (Py_ssize_t*) shape, strides, suboffsets * * shape = memview.view.shape # <<<<<<<<<<<<<< * strides = memview.view.strides * suboffsets = memview.view.suboffsets */ __pyx_t_1 = __pyx_v_memview->view.shape; __pyx_v_shape = __pyx_t_1; /* "View.MemoryView":1064 * * shape = memview.view.shape * strides = memview.view.strides # <<<<<<<<<<<<<< * suboffsets = memview.view.suboffsets * */ __pyx_t_1 = __pyx_v_memview->view.strides; __pyx_v_strides = __pyx_t_1; /* "View.MemoryView":1065 * shape = memview.view.shape * strides = memview.view.strides * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<< * * dst.memview = <__pyx_memoryview *> memview */ __pyx_t_1 = __pyx_v_memview->view.suboffsets; __pyx_v_suboffsets = __pyx_t_1; /* "View.MemoryView":1067 * suboffsets = memview.view.suboffsets * * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<< * dst.data = memview.view.buf * */ __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview); /* "View.MemoryView":1068 * * dst.memview = <__pyx_memoryview *> memview * dst.data = memview.view.buf # <<<<<<<<<<<<<< * * for dim in range(memview.view.ndim): */ __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf); /* "View.MemoryView":1070 * dst.data = memview.view.buf * * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<< * dst.shape[dim] = shape[dim] * dst.strides[dim] = strides[dim] */ __pyx_t_2 = __pyx_v_memview->view.ndim; __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_dim = __pyx_t_4; /* "View.MemoryView":1071 * * for dim in range(memview.view.ndim): * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<< * dst.strides[dim] = strides[dim] * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 */ (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]); /* "View.MemoryView":1072 * for dim in range(memview.view.ndim): * dst.shape[dim] = shape[dim] * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<< * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 * */ (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]); /* "View.MemoryView":1073 * dst.shape[dim] = shape[dim] * dst.strides[dim] = strides[dim] * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_copy_object') */ if ((__pyx_v_suboffsets != 0)) { __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]); } else { __pyx_t_5 = -1L; } (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5; } /* "View.MemoryView":1059 * * @cname('__pyx_memoryview_slice_copy') * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<< * cdef int dim * cdef (Py_ssize_t*) shape, strides, suboffsets */ /* function exit code */ __Pyx_RefNannyFinishContext(); } /* "View.MemoryView":1076 * * @cname('__pyx_memoryview_copy_object') * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< * "Create a new memoryview object" * cdef __Pyx_memviewslice memviewslice */ static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) { __Pyx_memviewslice __pyx_v_memviewslice; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("memoryview_copy", 0); /* "View.MemoryView":1079 * "Create a new memoryview object" * cdef __Pyx_memviewslice memviewslice * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<< * return memoryview_copy_from_slice(memview, &memviewslice) * */ __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice)); /* "View.MemoryView":1080 * cdef __Pyx_memviewslice memviewslice * slice_copy(memview, &memviewslice) * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_copy_object_from_slice') */ __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1080, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; /* "View.MemoryView":1076 * * @cname('__pyx_memoryview_copy_object') * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<< * "Create a new memoryview object" * cdef __Pyx_memviewslice memviewslice */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":1083 * * @cname('__pyx_memoryview_copy_object_from_slice') * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< * """ * Create a new memoryview object from a given memoryview object and slice. */ static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) { PyObject *(*__pyx_v_to_object_func)(char *); int (*__pyx_v_to_dtype_func)(char *, PyObject *); PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; PyObject *(*__pyx_t_3)(char *); int (*__pyx_t_4)(char *, PyObject *); PyObject *__pyx_t_5 = NULL; __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0); /* "View.MemoryView":1090 * cdef int (*to_dtype_func)(char *, object) except 0 * * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * to_object_func = (<_memoryviewslice> memview).to_object_func * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func */ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type); __pyx_t_2 = (__pyx_t_1 != 0); if (__pyx_t_2) { /* "View.MemoryView":1091 * * if isinstance(memview, _memoryviewslice): * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<< * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func * else: */ __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func; __pyx_v_to_object_func = __pyx_t_3; /* "View.MemoryView":1092 * if isinstance(memview, _memoryviewslice): * to_object_func = (<_memoryviewslice> memview).to_object_func * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<< * else: * to_object_func = NULL */ __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func; __pyx_v_to_dtype_func = __pyx_t_4; /* "View.MemoryView":1090 * cdef int (*to_dtype_func)(char *, object) except 0 * * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<< * to_object_func = (<_memoryviewslice> memview).to_object_func * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func */ goto __pyx_L3; } /* "View.MemoryView":1094 * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func * else: * to_object_func = NULL # <<<<<<<<<<<<<< * to_dtype_func = NULL * */ /*else*/ { __pyx_v_to_object_func = NULL; /* "View.MemoryView":1095 * else: * to_object_func = NULL * to_dtype_func = NULL # <<<<<<<<<<<<<< * * return memoryview_fromslice(memviewslice[0], memview.view.ndim, */ __pyx_v_to_dtype_func = NULL; } __pyx_L3:; /* "View.MemoryView":1097 * to_dtype_func = NULL * * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<< * to_object_func, to_dtype_func, * memview.dtype_is_object) */ __Pyx_XDECREF(__pyx_r); /* "View.MemoryView":1099 * return memoryview_fromslice(memviewslice[0], memview.view.ndim, * to_object_func, to_dtype_func, * memview.dtype_is_object) # <<<<<<<<<<<<<< * * */ __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1097, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; /* "View.MemoryView":1083 * * @cname('__pyx_memoryview_copy_object_from_slice') * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<< * """ * Create a new memoryview object from a given memoryview object and slice. */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "View.MemoryView":1105 * * * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< * if arg < 0: * return -arg */ static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) { Py_ssize_t __pyx_r; int __pyx_t_1; /* "View.MemoryView":1106 * * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: * if arg < 0: # <<<<<<<<<<<<<< * return -arg * else: */ __pyx_t_1 = ((__pyx_v_arg < 0) != 0); if (__pyx_t_1) { /* "View.MemoryView":1107 * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: * if arg < 0: * return -arg # <<<<<<<<<<<<<< * else: * return arg */ __pyx_r = (-__pyx_v_arg); goto __pyx_L0; /* "View.MemoryView":1106 * * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: * if arg < 0: # <<<<<<<<<<<<<< * return -arg * else: */ } /* "View.MemoryView":1109 * return -arg * else: * return arg # <<<<<<<<<<<<<< * * @cname('__pyx_get_best_slice_order') */ /*else*/ { __pyx_r = __pyx_v_arg; goto __pyx_L0; } /* "View.MemoryView":1105 * * * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<< * if arg < 0: * return -arg */ /* function exit code */ __pyx_L0:; return __pyx_r; } /* "View.MemoryView":1112 * * @cname('__pyx_get_best_slice_order') * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< * """ * Figure out the best memory access order for a given slice. */ static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) { int __pyx_v_i; Py_ssize_t __pyx_v_c_stride; Py_ssize_t __pyx_v_f_stride; char __pyx_r; int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; /* "View.MemoryView":1117 * """ * cdef int i * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<< * cdef Py_ssize_t f_stride = 0 * */ __pyx_v_c_stride = 0; /* "View.MemoryView":1118 * cdef int i * cdef Py_ssize_t c_stride = 0 * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<< * * for i in range(ndim - 1, -1, -1): */ __pyx_v_f_stride = 0; /* "View.MemoryView":1120 * cdef Py_ssize_t f_stride = 0 * * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< * if mslice.shape[i] > 1: * c_stride = mslice.strides[i] */ for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { __pyx_v_i = __pyx_t_1; /* "View.MemoryView":1121 * * for i in range(ndim - 1, -1, -1): * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< * c_stride = mslice.strides[i] * break */ __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); if (__pyx_t_2) { /* "View.MemoryView":1122 * for i in range(ndim - 1, -1, -1): * if mslice.shape[i] > 1: * c_stride = mslice.strides[i] # <<<<<<<<<<<<<< * break * */ __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]); /* "View.MemoryView":1123 * if mslice.shape[i] > 1: * c_stride = mslice.strides[i] * break # <<<<<<<<<<<<<< * * for i in range(ndim): */ goto __pyx_L4_break; /* "View.MemoryView":1121 * * for i in range(ndim - 1, -1, -1): * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< * c_stride = mslice.strides[i] * break */ } } __pyx_L4_break:; /* "View.MemoryView":1125 * break * * for i in range(ndim): # <<<<<<<<<<<<<< * if mslice.shape[i] > 1: * f_stride = mslice.strides[i] */ __pyx_t_1 = __pyx_v_ndim; __pyx_t_3 = __pyx_t_1; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; /* "View.MemoryView":1126 * * for i in range(ndim): * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< * f_stride = mslice.strides[i] * break */ __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0); if (__pyx_t_2) { /* "View.MemoryView":1127 * for i in range(ndim): * if mslice.shape[i] > 1: * f_stride = mslice.strides[i] # <<<<<<<<<<<<<< * break * */ __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]); /* "View.MemoryView":1128 * if mslice.shape[i] > 1: * f_stride = mslice.strides[i] * break # <<<<<<<<<<<<<< * * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): */ goto __pyx_L7_break; /* "View.MemoryView":1126 * * for i in range(ndim): * if mslice.shape[i] > 1: # <<<<<<<<<<<<<< * f_stride = mslice.strides[i] * break */ } } __pyx_L7_break:; /* "View.MemoryView":1130 * break * * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< * return 'C' * else: */ __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0); if (__pyx_t_2) { /* "View.MemoryView":1131 * * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): * return 'C' # <<<<<<<<<<<<<< * else: * return 'F' */ __pyx_r = 'C'; goto __pyx_L0; /* "View.MemoryView":1130 * break * * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<< * return 'C' * else: */ } /* "View.MemoryView":1133 * return 'C' * else: * return 'F' # <<<<<<<<<<<<<< * * @cython.cdivision(True) */ /*else*/ { __pyx_r = 'F'; goto __pyx_L0; } /* "View.MemoryView":1112 * * @cname('__pyx_get_best_slice_order') * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<< * """ * Figure out the best memory access order for a given slice. */ /* function exit code */ __pyx_L0:; return __pyx_r; } /* "View.MemoryView":1136 * * @cython.cdivision(True) * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< * char *dst_data, Py_ssize_t *dst_strides, * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, */ static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) { CYTHON_UNUSED Py_ssize_t __pyx_v_i; CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent; Py_ssize_t __pyx_v_dst_extent; Py_ssize_t __pyx_v_src_stride; Py_ssize_t __pyx_v_dst_stride; int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; Py_ssize_t __pyx_t_4; Py_ssize_t __pyx_t_5; Py_ssize_t __pyx_t_6; /* "View.MemoryView":1143 * * cdef Py_ssize_t i * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<< * cdef Py_ssize_t dst_extent = dst_shape[0] * cdef Py_ssize_t src_stride = src_strides[0] */ __pyx_v_src_extent = (__pyx_v_src_shape[0]); /* "View.MemoryView":1144 * cdef Py_ssize_t i * cdef Py_ssize_t src_extent = src_shape[0] * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<< * cdef Py_ssize_t src_stride = src_strides[0] * cdef Py_ssize_t dst_stride = dst_strides[0] */ __pyx_v_dst_extent = (__pyx_v_dst_shape[0]); /* "View.MemoryView":1145 * cdef Py_ssize_t src_extent = src_shape[0] * cdef Py_ssize_t dst_extent = dst_shape[0] * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<< * cdef Py_ssize_t dst_stride = dst_strides[0] * */ __pyx_v_src_stride = (__pyx_v_src_strides[0]); /* "View.MemoryView":1146 * cdef Py_ssize_t dst_extent = dst_shape[0] * cdef Py_ssize_t src_stride = src_strides[0] * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<< * * if ndim == 1: */ __pyx_v_dst_stride = (__pyx_v_dst_strides[0]); /* "View.MemoryView":1148 * cdef Py_ssize_t dst_stride = dst_strides[0] * * if ndim == 1: # <<<<<<<<<<<<<< * if (src_stride > 0 and dst_stride > 0 and * src_stride == itemsize == dst_stride): */ __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); if (__pyx_t_1) { /* "View.MemoryView":1149 * * if ndim == 1: * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< * src_stride == itemsize == dst_stride): * memcpy(dst_data, src_data, itemsize * dst_extent) */ __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L5_bool_binop_done; } __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L5_bool_binop_done; } /* "View.MemoryView":1150 * if ndim == 1: * if (src_stride > 0 and dst_stride > 0 and * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<< * memcpy(dst_data, src_data, itemsize * dst_extent) * else: */ __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize); if (__pyx_t_2) { __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride)); } __pyx_t_3 = (__pyx_t_2 != 0); __pyx_t_1 = __pyx_t_3; __pyx_L5_bool_binop_done:; /* "View.MemoryView":1149 * * if ndim == 1: * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< * src_stride == itemsize == dst_stride): * memcpy(dst_data, src_data, itemsize * dst_extent) */ if (__pyx_t_1) { /* "View.MemoryView":1151 * if (src_stride > 0 and dst_stride > 0 and * src_stride == itemsize == dst_stride): * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<< * else: * for i in range(dst_extent): */ (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent))); /* "View.MemoryView":1149 * * if ndim == 1: * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<< * src_stride == itemsize == dst_stride): * memcpy(dst_data, src_data, itemsize * dst_extent) */ goto __pyx_L4; } /* "View.MemoryView":1153 * memcpy(dst_data, src_data, itemsize * dst_extent) * else: * for i in range(dst_extent): # <<<<<<<<<<<<<< * memcpy(dst_data, src_data, itemsize) * src_data += src_stride */ /*else*/ { __pyx_t_4 = __pyx_v_dst_extent; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "View.MemoryView":1154 * else: * for i in range(dst_extent): * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<< * src_data += src_stride * dst_data += dst_stride */ (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize)); /* "View.MemoryView":1155 * for i in range(dst_extent): * memcpy(dst_data, src_data, itemsize) * src_data += src_stride # <<<<<<<<<<<<<< * dst_data += dst_stride * else: */ __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); /* "View.MemoryView":1156 * memcpy(dst_data, src_data, itemsize) * src_data += src_stride * dst_data += dst_stride # <<<<<<<<<<<<<< * else: * for i in range(dst_extent): */ __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); } } __pyx_L4:; /* "View.MemoryView":1148 * cdef Py_ssize_t dst_stride = dst_strides[0] * * if ndim == 1: # <<<<<<<<<<<<<< * if (src_stride > 0 and dst_stride > 0 and * src_stride == itemsize == dst_stride): */ goto __pyx_L3; } /* "View.MemoryView":1158 * dst_data += dst_stride * else: * for i in range(dst_extent): # <<<<<<<<<<<<<< * _copy_strided_to_strided(src_data, src_strides + 1, * dst_data, dst_strides + 1, */ /*else*/ { __pyx_t_4 = __pyx_v_dst_extent; __pyx_t_5 = __pyx_t_4; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "View.MemoryView":1159 * else: * for i in range(dst_extent): * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<< * dst_data, dst_strides + 1, * src_shape + 1, dst_shape + 1, */ _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize); /* "View.MemoryView":1163 * src_shape + 1, dst_shape + 1, * ndim - 1, itemsize) * src_data += src_stride # <<<<<<<<<<<<<< * dst_data += dst_stride * */ __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride); /* "View.MemoryView":1164 * ndim - 1, itemsize) * src_data += src_stride * dst_data += dst_stride # <<<<<<<<<<<<<< * * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, */ __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride); } } __pyx_L3:; /* "View.MemoryView":1136 * * @cython.cdivision(True) * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<< * char *dst_data, Py_ssize_t *dst_strides, * Py_ssize_t *src_shape, Py_ssize_t *dst_shape, */ /* function exit code */ } /* "View.MemoryView":1166 * dst_data += dst_stride * * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< * __Pyx_memviewslice *dst, * int ndim, size_t itemsize) nogil: */ static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) { /* "View.MemoryView":1169 * __Pyx_memviewslice *dst, * int ndim, size_t itemsize) nogil: * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<< * src.shape, dst.shape, ndim, itemsize) * */ _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize); /* "View.MemoryView":1166 * dst_data += dst_stride * * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< * __Pyx_memviewslice *dst, * int ndim, size_t itemsize) nogil: */ /* function exit code */ } /* "View.MemoryView":1173 * * @cname('__pyx_memoryview_slice_get_size') * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< * "Return the size of the memory occupied by the slice in number of bytes" * cdef int i */ static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) { int __pyx_v_i; Py_ssize_t __pyx_v_size; Py_ssize_t __pyx_r; Py_ssize_t __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; /* "View.MemoryView":1176 * "Return the size of the memory occupied by the slice in number of bytes" * cdef int i * cdef Py_ssize_t size = src.memview.view.itemsize # <<<<<<<<<<<<<< * * for i in range(ndim): */ __pyx_t_1 = __pyx_v_src->memview->view.itemsize; __pyx_v_size = __pyx_t_1; /* "View.MemoryView":1178 * cdef Py_ssize_t size = src.memview.view.itemsize * * for i in range(ndim): # <<<<<<<<<<<<<< * size *= src.shape[i] * */ __pyx_t_2 = __pyx_v_ndim; __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; /* "View.MemoryView":1179 * * for i in range(ndim): * size *= src.shape[i] # <<<<<<<<<<<<<< * * return size */ __pyx_v_size = (__pyx_v_size * (__pyx_v_src->shape[__pyx_v_i])); } /* "View.MemoryView":1181 * size *= src.shape[i] * * return size # <<<<<<<<<<<<<< * * @cname('__pyx_fill_contig_strides_array') */ __pyx_r = __pyx_v_size; goto __pyx_L0; /* "View.MemoryView":1173 * * @cname('__pyx_memoryview_slice_get_size') * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<< * "Return the size of the memory occupied by the slice in number of bytes" * cdef int i */ /* function exit code */ __pyx_L0:; return __pyx_r; } /* "View.MemoryView":1184 * * @cname('__pyx_fill_contig_strides_array') * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, * int ndim, char order) nogil: */ static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) { int __pyx_v_idx; Py_ssize_t __pyx_r; int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; /* "View.MemoryView":1193 * cdef int idx * * if order == 'F': # <<<<<<<<<<<<<< * for idx in range(ndim): * strides[idx] = stride */ __pyx_t_1 = ((__pyx_v_order == 'F') != 0); if (__pyx_t_1) { /* "View.MemoryView":1194 * * if order == 'F': * for idx in range(ndim): # <<<<<<<<<<<<<< * strides[idx] = stride * stride = stride * shape[idx] */ __pyx_t_2 = __pyx_v_ndim; __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_idx = __pyx_t_4; /* "View.MemoryView":1195 * if order == 'F': * for idx in range(ndim): * strides[idx] = stride # <<<<<<<<<<<<<< * stride = stride * shape[idx] * else: */ (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; /* "View.MemoryView":1196 * for idx in range(ndim): * strides[idx] = stride * stride = stride * shape[idx] # <<<<<<<<<<<<<< * else: * for idx in range(ndim - 1, -1, -1): */ __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); } /* "View.MemoryView":1193 * cdef int idx * * if order == 'F': # <<<<<<<<<<<<<< * for idx in range(ndim): * strides[idx] = stride */ goto __pyx_L3; } /* "View.MemoryView":1198 * stride = stride * shape[idx] * else: * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< * strides[idx] = stride * stride = stride * shape[idx] */ /*else*/ { for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) { __pyx_v_idx = __pyx_t_2; /* "View.MemoryView":1199 * else: * for idx in range(ndim - 1, -1, -1): * strides[idx] = stride # <<<<<<<<<<<<<< * stride = stride * shape[idx] * */ (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride; /* "View.MemoryView":1200 * for idx in range(ndim - 1, -1, -1): * strides[idx] = stride * stride = stride * shape[idx] # <<<<<<<<<<<<<< * * return stride */ __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx])); } } __pyx_L3:; /* "View.MemoryView":1202 * stride = stride * shape[idx] * * return stride # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_copy_data_to_temp') */ __pyx_r = __pyx_v_stride; goto __pyx_L0; /* "View.MemoryView":1184 * * @cname('__pyx_fill_contig_strides_array') * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<< * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride, * int ndim, char order) nogil: */ /* function exit code */ __pyx_L0:; return __pyx_r; } /* "View.MemoryView":1205 * * @cname('__pyx_memoryview_copy_data_to_temp') * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< * __Pyx_memviewslice *tmpslice, * char order, */ static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) { int __pyx_v_i; void *__pyx_v_result; size_t __pyx_v_itemsize; size_t __pyx_v_size; void *__pyx_r; Py_ssize_t __pyx_t_1; int __pyx_t_2; int __pyx_t_3; struct __pyx_memoryview_obj *__pyx_t_4; int __pyx_t_5; int __pyx_t_6; /* "View.MemoryView":1216 * cdef void *result * * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< * cdef size_t size = slice_get_size(src, ndim) * */ __pyx_t_1 = __pyx_v_src->memview->view.itemsize; __pyx_v_itemsize = __pyx_t_1; /* "View.MemoryView":1217 * * cdef size_t itemsize = src.memview.view.itemsize * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<< * * result = malloc(size) */ __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim); /* "View.MemoryView":1219 * cdef size_t size = slice_get_size(src, ndim) * * result = malloc(size) # <<<<<<<<<<<<<< * if not result: * _err(MemoryError, NULL) */ __pyx_v_result = malloc(__pyx_v_size); /* "View.MemoryView":1220 * * result = malloc(size) * if not result: # <<<<<<<<<<<<<< * _err(MemoryError, NULL) * */ __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":1221 * result = malloc(size) * if not result: * _err(MemoryError, NULL) # <<<<<<<<<<<<<< * * */ __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 1221, __pyx_L1_error) /* "View.MemoryView":1220 * * result = malloc(size) * if not result: # <<<<<<<<<<<<<< * _err(MemoryError, NULL) * */ } /* "View.MemoryView":1224 * * * tmpslice.data = result # <<<<<<<<<<<<<< * tmpslice.memview = src.memview * for i in range(ndim): */ __pyx_v_tmpslice->data = ((char *)__pyx_v_result); /* "View.MemoryView":1225 * * tmpslice.data = result * tmpslice.memview = src.memview # <<<<<<<<<<<<<< * for i in range(ndim): * tmpslice.shape[i] = src.shape[i] */ __pyx_t_4 = __pyx_v_src->memview; __pyx_v_tmpslice->memview = __pyx_t_4; /* "View.MemoryView":1226 * tmpslice.data = result * tmpslice.memview = src.memview * for i in range(ndim): # <<<<<<<<<<<<<< * tmpslice.shape[i] = src.shape[i] * tmpslice.suboffsets[i] = -1 */ __pyx_t_3 = __pyx_v_ndim; __pyx_t_5 = __pyx_t_3; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "View.MemoryView":1227 * tmpslice.memview = src.memview * for i in range(ndim): * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<< * tmpslice.suboffsets[i] = -1 * */ (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]); /* "View.MemoryView":1228 * for i in range(ndim): * tmpslice.shape[i] = src.shape[i] * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< * * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, */ (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L; } /* "View.MemoryView":1230 * tmpslice.suboffsets[i] = -1 * * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<< * ndim, order) * */ (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order)); /* "View.MemoryView":1234 * * * for i in range(ndim): # <<<<<<<<<<<<<< * if tmpslice.shape[i] == 1: * tmpslice.strides[i] = 0 */ __pyx_t_3 = __pyx_v_ndim; __pyx_t_5 = __pyx_t_3; for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) { __pyx_v_i = __pyx_t_6; /* "View.MemoryView":1235 * * for i in range(ndim): * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< * tmpslice.strides[i] = 0 * */ __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0); if (__pyx_t_2) { /* "View.MemoryView":1236 * for i in range(ndim): * if tmpslice.shape[i] == 1: * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<< * * if slice_is_contig(src[0], order, ndim): */ (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0; /* "View.MemoryView":1235 * * for i in range(ndim): * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<< * tmpslice.strides[i] = 0 * */ } } /* "View.MemoryView":1238 * tmpslice.strides[i] = 0 * * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< * memcpy(result, src.data, size) * else: */ __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0); if (__pyx_t_2) { /* "View.MemoryView":1239 * * if slice_is_contig(src[0], order, ndim): * memcpy(result, src.data, size) # <<<<<<<<<<<<<< * else: * copy_strided_to_strided(src, tmpslice, ndim, itemsize) */ (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size)); /* "View.MemoryView":1238 * tmpslice.strides[i] = 0 * * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<< * memcpy(result, src.data, size) * else: */ goto __pyx_L9; } /* "View.MemoryView":1241 * memcpy(result, src.data, size) * else: * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<< * * return result */ /*else*/ { copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize); } __pyx_L9:; /* "View.MemoryView":1243 * copy_strided_to_strided(src, tmpslice, ndim, itemsize) * * return result # <<<<<<<<<<<<<< * * */ __pyx_r = __pyx_v_result; goto __pyx_L0; /* "View.MemoryView":1205 * * @cname('__pyx_memoryview_copy_data_to_temp') * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<< * __Pyx_memviewslice *tmpslice, * char order, */ /* function exit code */ __pyx_L1_error:; { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif } __pyx_r = NULL; __pyx_L0:; return __pyx_r; } /* "View.MemoryView":1248 * * @cname('__pyx_memoryview_err_extents') * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< * Py_ssize_t extent2) except -1 with gil: * raise ValueError("got differing extents in dimension %d (got %d and %d)" % */ static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_RefNannySetupContext("_err_extents", 0); /* "View.MemoryView":1251 * Py_ssize_t extent2) except -1 with gil: * raise ValueError("got differing extents in dimension %d (got %d and %d)" % * (i, extent1, extent2)) # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_err_dim') */ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; /* "View.MemoryView":1250 * cdef int _err_extents(int i, Py_ssize_t extent1, * Py_ssize_t extent2) except -1 with gil: * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<< * (i, extent1, extent2)) * */ __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1250, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1250, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 1250, __pyx_L1_error) /* "View.MemoryView":1248 * * @cname('__pyx_memoryview_err_extents') * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<< * Py_ssize_t extent2) except -1 with gil: * raise ValueError("got differing extents in dimension %d (got %d and %d)" % */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __Pyx_RefNannyFinishContext(); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif return __pyx_r; } /* "View.MemoryView":1254 * * @cname('__pyx_memoryview_err_dim') * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< * raise error(msg.decode('ascii') % dim) * */ static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) { int __pyx_r; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_RefNannySetupContext("_err_dim", 0); __Pyx_INCREF(__pyx_v_error); /* "View.MemoryView":1255 * @cname('__pyx_memoryview_err_dim') * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_err') */ __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_INCREF(__pyx_v_error); __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); } } __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1255, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_Raise(__pyx_t_1, 0, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __PYX_ERR(2, 1255, __pyx_L1_error) /* "View.MemoryView":1254 * * @cname('__pyx_memoryview_err_dim') * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<< * raise error(msg.decode('ascii') % dim) * */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __Pyx_XDECREF(__pyx_v_error); __Pyx_RefNannyFinishContext(); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif return __pyx_r; } /* "View.MemoryView":1258 * * @cname('__pyx_memoryview_err') * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< * if msg != NULL: * raise error(msg.decode('ascii')) */ static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) { int __pyx_r; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_RefNannySetupContext("_err", 0); __Pyx_INCREF(__pyx_v_error); /* "View.MemoryView":1259 * @cname('__pyx_memoryview_err') * cdef int _err(object error, char *msg) except -1 with gil: * if msg != NULL: # <<<<<<<<<<<<<< * raise error(msg.decode('ascii')) * else: */ __pyx_t_1 = ((__pyx_v_msg != NULL) != 0); if (unlikely(__pyx_t_1)) { /* "View.MemoryView":1260 * cdef int _err(object error, char *msg) except -1 with gil: * if msg != NULL: * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<< * else: * raise error */ __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_error); __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); } } __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(2, 1260, __pyx_L1_error) /* "View.MemoryView":1259 * @cname('__pyx_memoryview_err') * cdef int _err(object error, char *msg) except -1 with gil: * if msg != NULL: # <<<<<<<<<<<<<< * raise error(msg.decode('ascii')) * else: */ } /* "View.MemoryView":1262 * raise error(msg.decode('ascii')) * else: * raise error # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_copy_contents') */ /*else*/ { __Pyx_Raise(__pyx_v_error, 0, 0, 0); __PYX_ERR(2, 1262, __pyx_L1_error) } /* "View.MemoryView":1258 * * @cname('__pyx_memoryview_err') * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<< * if msg != NULL: * raise error(msg.decode('ascii')) */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __Pyx_XDECREF(__pyx_v_error); __Pyx_RefNannyFinishContext(); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif return __pyx_r; } /* "View.MemoryView":1265 * * @cname('__pyx_memoryview_copy_contents') * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< * __Pyx_memviewslice dst, * int src_ndim, int dst_ndim, */ static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) { void *__pyx_v_tmpdata; size_t __pyx_v_itemsize; int __pyx_v_i; char __pyx_v_order; int __pyx_v_broadcasting; int __pyx_v_direct_copy; __Pyx_memviewslice __pyx_v_tmp; int __pyx_v_ndim; int __pyx_r; Py_ssize_t __pyx_t_1; int __pyx_t_2; int __pyx_t_3; int __pyx_t_4; int __pyx_t_5; int __pyx_t_6; void *__pyx_t_7; int __pyx_t_8; /* "View.MemoryView":1273 * Check for overlapping memory and verify the shapes. * """ * cdef void *tmpdata = NULL # <<<<<<<<<<<<<< * cdef size_t itemsize = src.memview.view.itemsize * cdef int i */ __pyx_v_tmpdata = NULL; /* "View.MemoryView":1274 * """ * cdef void *tmpdata = NULL * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<< * cdef int i * cdef char order = get_best_order(&src, src_ndim) */ __pyx_t_1 = __pyx_v_src.memview->view.itemsize; __pyx_v_itemsize = __pyx_t_1; /* "View.MemoryView":1276 * cdef size_t itemsize = src.memview.view.itemsize * cdef int i * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<< * cdef bint broadcasting = False * cdef bint direct_copy = False */ __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim); /* "View.MemoryView":1277 * cdef int i * cdef char order = get_best_order(&src, src_ndim) * cdef bint broadcasting = False # <<<<<<<<<<<<<< * cdef bint direct_copy = False * cdef __Pyx_memviewslice tmp */ __pyx_v_broadcasting = 0; /* "View.MemoryView":1278 * cdef char order = get_best_order(&src, src_ndim) * cdef bint broadcasting = False * cdef bint direct_copy = False # <<<<<<<<<<<<<< * cdef __Pyx_memviewslice tmp * */ __pyx_v_direct_copy = 0; /* "View.MemoryView":1281 * cdef __Pyx_memviewslice tmp * * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< * broadcast_leading(&src, src_ndim, dst_ndim) * elif dst_ndim < src_ndim: */ __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0); if (__pyx_t_2) { /* "View.MemoryView":1282 * * if src_ndim < dst_ndim: * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<< * elif dst_ndim < src_ndim: * broadcast_leading(&dst, dst_ndim, src_ndim) */ __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim); /* "View.MemoryView":1281 * cdef __Pyx_memviewslice tmp * * if src_ndim < dst_ndim: # <<<<<<<<<<<<<< * broadcast_leading(&src, src_ndim, dst_ndim) * elif dst_ndim < src_ndim: */ goto __pyx_L3; } /* "View.MemoryView":1283 * if src_ndim < dst_ndim: * broadcast_leading(&src, src_ndim, dst_ndim) * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< * broadcast_leading(&dst, dst_ndim, src_ndim) * */ __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0); if (__pyx_t_2) { /* "View.MemoryView":1284 * broadcast_leading(&src, src_ndim, dst_ndim) * elif dst_ndim < src_ndim: * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<< * * cdef int ndim = max(src_ndim, dst_ndim) */ __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim); /* "View.MemoryView":1283 * if src_ndim < dst_ndim: * broadcast_leading(&src, src_ndim, dst_ndim) * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<< * broadcast_leading(&dst, dst_ndim, src_ndim) * */ } __pyx_L3:; /* "View.MemoryView":1286 * broadcast_leading(&dst, dst_ndim, src_ndim) * * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<< * * for i in range(ndim): */ __pyx_t_3 = __pyx_v_dst_ndim; __pyx_t_4 = __pyx_v_src_ndim; if (((__pyx_t_3 > __pyx_t_4) != 0)) { __pyx_t_5 = __pyx_t_3; } else { __pyx_t_5 = __pyx_t_4; } __pyx_v_ndim = __pyx_t_5; /* "View.MemoryView":1288 * cdef int ndim = max(src_ndim, dst_ndim) * * for i in range(ndim): # <<<<<<<<<<<<<< * if src.shape[i] != dst.shape[i]: * if src.shape[i] == 1: */ __pyx_t_5 = __pyx_v_ndim; __pyx_t_3 = __pyx_t_5; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; /* "View.MemoryView":1289 * * for i in range(ndim): * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< * if src.shape[i] == 1: * broadcasting = True */ __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0); if (__pyx_t_2) { /* "View.MemoryView":1290 * for i in range(ndim): * if src.shape[i] != dst.shape[i]: * if src.shape[i] == 1: # <<<<<<<<<<<<<< * broadcasting = True * src.strides[i] = 0 */ __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0); if (__pyx_t_2) { /* "View.MemoryView":1291 * if src.shape[i] != dst.shape[i]: * if src.shape[i] == 1: * broadcasting = True # <<<<<<<<<<<<<< * src.strides[i] = 0 * else: */ __pyx_v_broadcasting = 1; /* "View.MemoryView":1292 * if src.shape[i] == 1: * broadcasting = True * src.strides[i] = 0 # <<<<<<<<<<<<<< * else: * _err_extents(i, dst.shape[i], src.shape[i]) */ (__pyx_v_src.strides[__pyx_v_i]) = 0; /* "View.MemoryView":1290 * for i in range(ndim): * if src.shape[i] != dst.shape[i]: * if src.shape[i] == 1: # <<<<<<<<<<<<<< * broadcasting = True * src.strides[i] = 0 */ goto __pyx_L7; } /* "View.MemoryView":1294 * src.strides[i] = 0 * else: * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<< * * if src.suboffsets[i] >= 0: */ /*else*/ { __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1294, __pyx_L1_error) } __pyx_L7:; /* "View.MemoryView":1289 * * for i in range(ndim): * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<< * if src.shape[i] == 1: * broadcasting = True */ } /* "View.MemoryView":1296 * _err_extents(i, dst.shape[i], src.shape[i]) * * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< * _err_dim(ValueError, "Dimension %d is not direct", i) * */ __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0); if (__pyx_t_2) { /* "View.MemoryView":1297 * * if src.suboffsets[i] >= 0: * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<< * * if slices_overlap(&src, &dst, ndim, itemsize): */ __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 1297, __pyx_L1_error) /* "View.MemoryView":1296 * _err_extents(i, dst.shape[i], src.shape[i]) * * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<< * _err_dim(ValueError, "Dimension %d is not direct", i) * */ } } /* "View.MemoryView":1299 * _err_dim(ValueError, "Dimension %d is not direct", i) * * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< * * if not slice_is_contig(src, order, ndim): */ __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0); if (__pyx_t_2) { /* "View.MemoryView":1301 * if slices_overlap(&src, &dst, ndim, itemsize): * * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< * order = get_best_order(&dst, ndim) * */ __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":1302 * * if not slice_is_contig(src, order, ndim): * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<< * * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) */ __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim); /* "View.MemoryView":1301 * if slices_overlap(&src, &dst, ndim, itemsize): * * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<< * order = get_best_order(&dst, ndim) * */ } /* "View.MemoryView":1304 * order = get_best_order(&dst, ndim) * * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<< * src = tmp * */ __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(2, 1304, __pyx_L1_error) __pyx_v_tmpdata = __pyx_t_7; /* "View.MemoryView":1305 * * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) * src = tmp # <<<<<<<<<<<<<< * * if not broadcasting: */ __pyx_v_src = __pyx_v_tmp; /* "View.MemoryView":1299 * _err_dim(ValueError, "Dimension %d is not direct", i) * * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<< * * if not slice_is_contig(src, order, ndim): */ } /* "View.MemoryView":1307 * src = tmp * * if not broadcasting: # <<<<<<<<<<<<<< * * */ __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0); if (__pyx_t_2) { /* "View.MemoryView":1310 * * * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< * direct_copy = slice_is_contig(dst, 'C', ndim) * elif slice_is_contig(src, 'F', ndim): */ __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0); if (__pyx_t_2) { /* "View.MemoryView":1311 * * if slice_is_contig(src, 'C', ndim): * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<< * elif slice_is_contig(src, 'F', ndim): * direct_copy = slice_is_contig(dst, 'F', ndim) */ __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim); /* "View.MemoryView":1310 * * * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<< * direct_copy = slice_is_contig(dst, 'C', ndim) * elif slice_is_contig(src, 'F', ndim): */ goto __pyx_L12; } /* "View.MemoryView":1312 * if slice_is_contig(src, 'C', ndim): * direct_copy = slice_is_contig(dst, 'C', ndim) * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< * direct_copy = slice_is_contig(dst, 'F', ndim) * */ __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0); if (__pyx_t_2) { /* "View.MemoryView":1313 * direct_copy = slice_is_contig(dst, 'C', ndim) * elif slice_is_contig(src, 'F', ndim): * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<< * * if direct_copy: */ __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim); /* "View.MemoryView":1312 * if slice_is_contig(src, 'C', ndim): * direct_copy = slice_is_contig(dst, 'C', ndim) * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<< * direct_copy = slice_is_contig(dst, 'F', ndim) * */ } __pyx_L12:; /* "View.MemoryView":1315 * direct_copy = slice_is_contig(dst, 'F', ndim) * * if direct_copy: # <<<<<<<<<<<<<< * * refcount_copying(&dst, dtype_is_object, ndim, False) */ __pyx_t_2 = (__pyx_v_direct_copy != 0); if (__pyx_t_2) { /* "View.MemoryView":1317 * if direct_copy: * * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) * refcount_copying(&dst, dtype_is_object, ndim, True) */ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); /* "View.MemoryView":1318 * * refcount_copying(&dst, dtype_is_object, ndim, False) * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<< * refcount_copying(&dst, dtype_is_object, ndim, True) * free(tmpdata) */ (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim))); /* "View.MemoryView":1319 * refcount_copying(&dst, dtype_is_object, ndim, False) * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< * free(tmpdata) * return 0 */ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); /* "View.MemoryView":1320 * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) * refcount_copying(&dst, dtype_is_object, ndim, True) * free(tmpdata) # <<<<<<<<<<<<<< * return 0 * */ free(__pyx_v_tmpdata); /* "View.MemoryView":1321 * refcount_copying(&dst, dtype_is_object, ndim, True) * free(tmpdata) * return 0 # <<<<<<<<<<<<<< * * if order == 'F' == get_best_order(&dst, ndim): */ __pyx_r = 0; goto __pyx_L0; /* "View.MemoryView":1315 * direct_copy = slice_is_contig(dst, 'F', ndim) * * if direct_copy: # <<<<<<<<<<<<<< * * refcount_copying(&dst, dtype_is_object, ndim, False) */ } /* "View.MemoryView":1307 * src = tmp * * if not broadcasting: # <<<<<<<<<<<<<< * * */ } /* "View.MemoryView":1323 * return 0 * * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< * * */ __pyx_t_2 = (__pyx_v_order == 'F'); if (__pyx_t_2) { __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim)); } __pyx_t_8 = (__pyx_t_2 != 0); if (__pyx_t_8) { /* "View.MemoryView":1326 * * * transpose_memslice(&src) # <<<<<<<<<<<<<< * transpose_memslice(&dst) * */ __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1326, __pyx_L1_error) /* "View.MemoryView":1327 * * transpose_memslice(&src) * transpose_memslice(&dst) # <<<<<<<<<<<<<< * * refcount_copying(&dst, dtype_is_object, ndim, False) */ __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(2, 1327, __pyx_L1_error) /* "View.MemoryView":1323 * return 0 * * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<< * * */ } /* "View.MemoryView":1329 * transpose_memslice(&dst) * * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< * copy_strided_to_strided(&src, &dst, ndim, itemsize) * refcount_copying(&dst, dtype_is_object, ndim, True) */ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0); /* "View.MemoryView":1330 * * refcount_copying(&dst, dtype_is_object, ndim, False) * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<< * refcount_copying(&dst, dtype_is_object, ndim, True) * */ copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize); /* "View.MemoryView":1331 * refcount_copying(&dst, dtype_is_object, ndim, False) * copy_strided_to_strided(&src, &dst, ndim, itemsize) * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< * * free(tmpdata) */ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1); /* "View.MemoryView":1333 * refcount_copying(&dst, dtype_is_object, ndim, True) * * free(tmpdata) # <<<<<<<<<<<<<< * return 0 * */ free(__pyx_v_tmpdata); /* "View.MemoryView":1334 * * free(tmpdata) * return 0 # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_broadcast_leading') */ __pyx_r = 0; goto __pyx_L0; /* "View.MemoryView":1265 * * @cname('__pyx_memoryview_copy_contents') * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<< * __Pyx_memviewslice dst, * int src_ndim, int dst_ndim, */ /* function exit code */ __pyx_L1_error:; { #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif } __pyx_r = -1; __pyx_L0:; return __pyx_r; } /* "View.MemoryView":1337 * * @cname('__pyx_memoryview_broadcast_leading') * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< * int ndim, * int ndim_other) nogil: */ static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) { int __pyx_v_i; int __pyx_v_offset; int __pyx_t_1; int __pyx_t_2; int __pyx_t_3; /* "View.MemoryView":1341 * int ndim_other) nogil: * cdef int i * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<< * * for i in range(ndim - 1, -1, -1): */ __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim); /* "View.MemoryView":1343 * cdef int offset = ndim_other - ndim * * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<< * mslice.shape[i + offset] = mslice.shape[i] * mslice.strides[i + offset] = mslice.strides[i] */ for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) { __pyx_v_i = __pyx_t_1; /* "View.MemoryView":1344 * * for i in range(ndim - 1, -1, -1): * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<< * mslice.strides[i + offset] = mslice.strides[i] * mslice.suboffsets[i + offset] = mslice.suboffsets[i] */ (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]); /* "View.MemoryView":1345 * for i in range(ndim - 1, -1, -1): * mslice.shape[i + offset] = mslice.shape[i] * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<< * mslice.suboffsets[i + offset] = mslice.suboffsets[i] * */ (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]); /* "View.MemoryView":1346 * mslice.shape[i + offset] = mslice.shape[i] * mslice.strides[i + offset] = mslice.strides[i] * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<< * * for i in range(offset): */ (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]); } /* "View.MemoryView":1348 * mslice.suboffsets[i + offset] = mslice.suboffsets[i] * * for i in range(offset): # <<<<<<<<<<<<<< * mslice.shape[i] = 1 * mslice.strides[i] = mslice.strides[0] */ __pyx_t_1 = __pyx_v_offset; __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_i = __pyx_t_3; /* "View.MemoryView":1349 * * for i in range(offset): * mslice.shape[i] = 1 # <<<<<<<<<<<<<< * mslice.strides[i] = mslice.strides[0] * mslice.suboffsets[i] = -1 */ (__pyx_v_mslice->shape[__pyx_v_i]) = 1; /* "View.MemoryView":1350 * for i in range(offset): * mslice.shape[i] = 1 * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<< * mslice.suboffsets[i] = -1 * */ (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]); /* "View.MemoryView":1351 * mslice.shape[i] = 1 * mslice.strides[i] = mslice.strides[0] * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<< * * */ (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L; } /* "View.MemoryView":1337 * * @cname('__pyx_memoryview_broadcast_leading') * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<< * int ndim, * int ndim_other) nogil: */ /* function exit code */ } /* "View.MemoryView":1359 * * @cname('__pyx_memoryview_refcount_copying') * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< * int ndim, bint inc) nogil: * */ static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) { int __pyx_t_1; /* "View.MemoryView":1363 * * * if dtype_is_object: # <<<<<<<<<<<<<< * refcount_objects_in_slice_with_gil(dst.data, dst.shape, * dst.strides, ndim, inc) */ __pyx_t_1 = (__pyx_v_dtype_is_object != 0); if (__pyx_t_1) { /* "View.MemoryView":1364 * * if dtype_is_object: * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<< * dst.strides, ndim, inc) * */ __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc); /* "View.MemoryView":1363 * * * if dtype_is_object: # <<<<<<<<<<<<<< * refcount_objects_in_slice_with_gil(dst.data, dst.shape, * dst.strides, ndim, inc) */ } /* "View.MemoryView":1359 * * @cname('__pyx_memoryview_refcount_copying') * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<< * int ndim, bint inc) nogil: * */ /* function exit code */ } /* "View.MemoryView":1368 * * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< * Py_ssize_t *strides, int ndim, * bint inc) with gil: */ static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { __Pyx_RefNannyDeclarations #ifdef WITH_THREAD PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure(); #endif __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0); /* "View.MemoryView":1371 * Py_ssize_t *strides, int ndim, * bint inc) with gil: * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<< * * @cname('__pyx_memoryview_refcount_objects_in_slice') */ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc); /* "View.MemoryView":1368 * * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil') * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< * Py_ssize_t *strides, int ndim, * bint inc) with gil: */ /* function exit code */ __Pyx_RefNannyFinishContext(); #ifdef WITH_THREAD __Pyx_PyGILState_Release(__pyx_gilstate_save); #endif } /* "View.MemoryView":1374 * * @cname('__pyx_memoryview_refcount_objects_in_slice') * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< * Py_ssize_t *strides, int ndim, bint inc): * cdef Py_ssize_t i */ static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) { CYTHON_UNUSED Py_ssize_t __pyx_v_i; __Pyx_RefNannyDeclarations Py_ssize_t __pyx_t_1; Py_ssize_t __pyx_t_2; Py_ssize_t __pyx_t_3; int __pyx_t_4; __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0); /* "View.MemoryView":1378 * cdef Py_ssize_t i * * for i in range(shape[0]): # <<<<<<<<<<<<<< * if ndim == 1: * if inc: */ __pyx_t_1 = (__pyx_v_shape[0]); __pyx_t_2 = __pyx_t_1; for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) { __pyx_v_i = __pyx_t_3; /* "View.MemoryView":1379 * * for i in range(shape[0]): * if ndim == 1: # <<<<<<<<<<<<<< * if inc: * Py_INCREF(( data)[0]) */ __pyx_t_4 = ((__pyx_v_ndim == 1) != 0); if (__pyx_t_4) { /* "View.MemoryView":1380 * for i in range(shape[0]): * if ndim == 1: * if inc: # <<<<<<<<<<<<<< * Py_INCREF(( data)[0]) * else: */ __pyx_t_4 = (__pyx_v_inc != 0); if (__pyx_t_4) { /* "View.MemoryView":1381 * if ndim == 1: * if inc: * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<< * else: * Py_DECREF(( data)[0]) */ Py_INCREF((((PyObject **)__pyx_v_data)[0])); /* "View.MemoryView":1380 * for i in range(shape[0]): * if ndim == 1: * if inc: # <<<<<<<<<<<<<< * Py_INCREF(( data)[0]) * else: */ goto __pyx_L6; } /* "View.MemoryView":1383 * Py_INCREF(( data)[0]) * else: * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<< * else: * refcount_objects_in_slice(data, shape + 1, strides + 1, */ /*else*/ { Py_DECREF((((PyObject **)__pyx_v_data)[0])); } __pyx_L6:; /* "View.MemoryView":1379 * * for i in range(shape[0]): * if ndim == 1: # <<<<<<<<<<<<<< * if inc: * Py_INCREF(( data)[0]) */ goto __pyx_L5; } /* "View.MemoryView":1385 * Py_DECREF(( data)[0]) * else: * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< * ndim - 1, inc) * */ /*else*/ { /* "View.MemoryView":1386 * else: * refcount_objects_in_slice(data, shape + 1, strides + 1, * ndim - 1, inc) # <<<<<<<<<<<<<< * * data += strides[0] */ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc); } __pyx_L5:; /* "View.MemoryView":1388 * ndim - 1, inc) * * data += strides[0] # <<<<<<<<<<<<<< * * */ __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0])); } /* "View.MemoryView":1374 * * @cname('__pyx_memoryview_refcount_objects_in_slice') * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< * Py_ssize_t *strides, int ndim, bint inc): * cdef Py_ssize_t i */ /* function exit code */ __Pyx_RefNannyFinishContext(); } /* "View.MemoryView":1394 * * @cname('__pyx_memoryview_slice_assign_scalar') * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< * size_t itemsize, void *item, * bint dtype_is_object) nogil: */ static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) { /* "View.MemoryView":1397 * size_t itemsize, void *item, * bint dtype_is_object) nogil: * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<< * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, * itemsize, item) */ __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0); /* "View.MemoryView":1398 * bint dtype_is_object) nogil: * refcount_copying(dst, dtype_is_object, ndim, False) * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<< * itemsize, item) * refcount_copying(dst, dtype_is_object, ndim, True) */ __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item); /* "View.MemoryView":1400 * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, * itemsize, item) * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<< * * */ __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1); /* "View.MemoryView":1394 * * @cname('__pyx_memoryview_slice_assign_scalar') * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<< * size_t itemsize, void *item, * bint dtype_is_object) nogil: */ /* function exit code */ } /* "View.MemoryView":1404 * * @cname('__pyx_memoryview__slice_assign_scalar') * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< * Py_ssize_t *strides, int ndim, * size_t itemsize, void *item) nogil: */ static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) { CYTHON_UNUSED Py_ssize_t __pyx_v_i; Py_ssize_t __pyx_v_stride; Py_ssize_t __pyx_v_extent; int __pyx_t_1; Py_ssize_t __pyx_t_2; Py_ssize_t __pyx_t_3; Py_ssize_t __pyx_t_4; /* "View.MemoryView":1408 * size_t itemsize, void *item) nogil: * cdef Py_ssize_t i * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<< * cdef Py_ssize_t extent = shape[0] * */ __pyx_v_stride = (__pyx_v_strides[0]); /* "View.MemoryView":1409 * cdef Py_ssize_t i * cdef Py_ssize_t stride = strides[0] * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<< * * if ndim == 1: */ __pyx_v_extent = (__pyx_v_shape[0]); /* "View.MemoryView":1411 * cdef Py_ssize_t extent = shape[0] * * if ndim == 1: # <<<<<<<<<<<<<< * for i in range(extent): * memcpy(data, item, itemsize) */ __pyx_t_1 = ((__pyx_v_ndim == 1) != 0); if (__pyx_t_1) { /* "View.MemoryView":1412 * * if ndim == 1: * for i in range(extent): # <<<<<<<<<<<<<< * memcpy(data, item, itemsize) * data += stride */ __pyx_t_2 = __pyx_v_extent; __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; /* "View.MemoryView":1413 * if ndim == 1: * for i in range(extent): * memcpy(data, item, itemsize) # <<<<<<<<<<<<<< * data += stride * else: */ (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize)); /* "View.MemoryView":1414 * for i in range(extent): * memcpy(data, item, itemsize) * data += stride # <<<<<<<<<<<<<< * else: * for i in range(extent): */ __pyx_v_data = (__pyx_v_data + __pyx_v_stride); } /* "View.MemoryView":1411 * cdef Py_ssize_t extent = shape[0] * * if ndim == 1: # <<<<<<<<<<<<<< * for i in range(extent): * memcpy(data, item, itemsize) */ goto __pyx_L3; } /* "View.MemoryView":1416 * data += stride * else: * for i in range(extent): # <<<<<<<<<<<<<< * _slice_assign_scalar(data, shape + 1, strides + 1, * ndim - 1, itemsize, item) */ /*else*/ { __pyx_t_2 = __pyx_v_extent; __pyx_t_3 = __pyx_t_2; for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; /* "View.MemoryView":1417 * else: * for i in range(extent): * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<< * ndim - 1, itemsize, item) * data += stride */ __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item); /* "View.MemoryView":1419 * _slice_assign_scalar(data, shape + 1, strides + 1, * ndim - 1, itemsize, item) * data += stride # <<<<<<<<<<<<<< * * */ __pyx_v_data = (__pyx_v_data + __pyx_v_stride); } } __pyx_L3:; /* "View.MemoryView":1404 * * @cname('__pyx_memoryview__slice_assign_scalar') * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<< * Py_ssize_t *strides, int ndim, * size_t itemsize, void *item) nogil: */ /* function exit code */ } /* "(tree fragment)":1 * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ /* Python wrapper */ static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0}; static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0); { static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; PyObject* values[3] = {0,0,0}; if (unlikely(__pyx_kwds)) { Py_ssize_t kw_args; const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); switch (pos_args) { case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); CYTHON_FALLTHROUGH; case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } kw_args = PyDict_Size(__pyx_kwds); switch (pos_args) { case 0: if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { goto __pyx_L5_argtuple_error; } else { values[0] = PyTuple_GET_ITEM(__pyx_args, 0); values[1] = PyTuple_GET_ITEM(__pyx_args, 1); values[2] = PyTuple_GET_ITEM(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) __pyx_L3_error:; __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; int __pyx_t_6; __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) */ __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0); if (__pyx_t_1) { /* "(tree fragment)":5 * cdef object __pyx_result * if __pyx_checksum != 0xb068931: * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) * __pyx_result = Enum.__new__(__pyx_type) */ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_t_2); __pyx_v___pyx_PickleError = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 * if __pyx_checksum != 0xb068931: * from pickle import PickleError as __pyx_PickleError * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) # <<<<<<<<<<<<<< * __pyx_result = Enum.__new__(__pyx_type) * if __pyx_state is not None: */ __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_INCREF(__pyx_v___pyx_PickleError); __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_Raise(__pyx_t_3, 0, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result * if __pyx_checksum != 0xb068931: # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v___pyx_result = __pyx_t_3; __pyx_t_3 = 0; /* "(tree fragment)":8 * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) * __pyx_result = Enum.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) * return __pyx_result */ __pyx_t_1 = (__pyx_v___pyx_state != Py_None); __pyx_t_6 = (__pyx_t_1 != 0); if (__pyx_t_6) { /* "(tree fragment)":9 * __pyx_result = Enum.__new__(__pyx_type) * if __pyx_state is not None: * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< * return __pyx_result * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): */ if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":8 * raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum) * __pyx_result = Enum.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) * return __pyx_result */ } /* "(tree fragment)":10 * if __pyx_state is not None: * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) * return __pyx_result # <<<<<<<<<<<<<< * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): * __pyx_result.name = __pyx_state[0] */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v___pyx_result); __pyx_r = __pyx_v___pyx_result; goto __pyx_L0; /* "(tree fragment)":1 * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF(__pyx_v___pyx_PickleError); __Pyx_XDECREF(__pyx_v___pyx_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } /* "(tree fragment)":11 * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) * return __pyx_result * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< * __pyx_result.name = __pyx_state[0] * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): */ static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; Py_ssize_t __pyx_t_3; int __pyx_t_4; int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0); /* "(tree fragment)":12 * return __pyx_result * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<< * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[1]) */ if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->name); __Pyx_DECREF(__pyx_v___pyx_result->name); __pyx_v___pyx_result->name = __pyx_t_1; __pyx_t_1 = 0; /* "(tree fragment)":13 * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): * __pyx_result.name = __pyx_state[0] * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< * __pyx_result.__dict__.update(__pyx_state[1]) */ if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) __pyx_t_4 = ((__pyx_t_3 > 1) != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) __pyx_t_5 = (__pyx_t_4 != 0); __pyx_t_2 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { /* "(tree fragment)":14 * __pyx_result.name = __pyx_state[0] * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = NULL; if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); if (likely(__pyx_t_8)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_7, function); } } __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): * __pyx_result.name = __pyx_state[0] * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< * __pyx_result.__dict__.update(__pyx_state[1]) */ } /* "(tree fragment)":11 * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) * return __pyx_result * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< * __pyx_result.name = __pyx_state[0] * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } static struct __pyx_vtabstruct_array __pyx_vtable_array; static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_array_obj *p; PyObject *o; if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; p = ((struct __pyx_array_obj *)o); p->__pyx_vtab = __pyx_vtabptr_array; p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None); p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None); if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad; return o; bad: Py_DECREF(o); o = 0; return NULL; } static void __pyx_tp_dealloc_array(PyObject *o) { struct __pyx_array_obj *p = (struct __pyx_array_obj *)o; #if CYTHON_USE_TP_FINALIZE if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { if (PyObject_CallFinalizerFromDealloc(o)) return; } #endif { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); ++Py_REFCNT(o); __pyx_array___dealloc__(o); --Py_REFCNT(o); PyErr_Restore(etype, eval, etb); } Py_CLEAR(p->mode); Py_CLEAR(p->_format); (*Py_TYPE(o)->tp_free)(o); } static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) { PyObject *r; PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); Py_DECREF(x); return r; } static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) { if (v) { return __pyx_array___setitem__(o, i, v); } else { PyErr_Format(PyExc_NotImplementedError, "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); return -1; } } static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) { PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n); if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) { PyErr_Clear(); v = __pyx_array___getattr__(o, n); } return v; } static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o); } static PyMethodDef __pyx_methods_array[] = { {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0}, {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0}, {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; static struct PyGetSetDef __pyx_getsets_array[] = { {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0}, {0, 0, 0, 0, 0} }; static PySequenceMethods __pyx_tp_as_sequence_array = { __pyx_array___len__, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ __pyx_sq_item_array, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_array = { __pyx_array___len__, /*mp_length*/ __pyx_array___getitem__, /*mp_subscript*/ __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_array = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif __pyx_array_getbuffer, /*bf_getbuffer*/ 0, /*bf_releasebuffer*/ }; static PyTypeObject __pyx_type___pyx_array = { PyVarObject_HEAD_INIT(0, 0) "im2col_cython.array", /*tp_name*/ sizeof(struct __pyx_array_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_array, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #endif #if PY_MAJOR_VERSION >= 3 0, /*tp_as_async*/ #endif 0, /*tp_repr*/ 0, /*tp_as_number*/ &__pyx_tp_as_sequence_array, /*tp_as_sequence*/ &__pyx_tp_as_mapping_array, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ __pyx_tp_getattro_array, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_array, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_array, /*tp_methods*/ 0, /*tp_members*/ __pyx_getsets_array, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_array, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 0, /*tp_finalize*/ #endif }; static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_MemviewEnum_obj *p; PyObject *o; if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; p = ((struct __pyx_MemviewEnum_obj *)o); p->name = Py_None; Py_INCREF(Py_None); return o; } static void __pyx_tp_dealloc_Enum(PyObject *o) { struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; #if CYTHON_USE_TP_FINALIZE if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { if (PyObject_CallFinalizerFromDealloc(o)) return; } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->name); (*Py_TYPE(o)->tp_free)(o); } static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) { int e; struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; if (p->name) { e = (*v)(p->name, a); if (e) return e; } return 0; } static int __pyx_tp_clear_Enum(PyObject *o) { PyObject* tmp; struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o; tmp = ((PyObject*)p->name); p->name = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); return 0; } static PyMethodDef __pyx_methods_Enum[] = { {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0}, {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; static PyTypeObject __pyx_type___pyx_MemviewEnum = { PyVarObject_HEAD_INIT(0, 0) "im2col_cython.Enum", /*tp_name*/ sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_Enum, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #endif #if PY_MAJOR_VERSION >= 3 0, /*tp_as_async*/ #endif __pyx_MemviewEnum___repr__, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_Enum, /*tp_traverse*/ __pyx_tp_clear_Enum, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_Enum, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ __pyx_MemviewEnum___init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_Enum, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 0, /*tp_finalize*/ #endif }; static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview; static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_memoryview_obj *p; PyObject *o; if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; p = ((struct __pyx_memoryview_obj *)o); p->__pyx_vtab = __pyx_vtabptr_memoryview; p->obj = Py_None; Py_INCREF(Py_None); p->_size = Py_None; Py_INCREF(Py_None); p->_array_interface = Py_None; Py_INCREF(Py_None); p->view.obj = NULL; if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad; return o; bad: Py_DECREF(o); o = 0; return NULL; } static void __pyx_tp_dealloc_memoryview(PyObject *o) { struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; #if CYTHON_USE_TP_FINALIZE if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { if (PyObject_CallFinalizerFromDealloc(o)) return; } #endif PyObject_GC_UnTrack(o); { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); ++Py_REFCNT(o); __pyx_memoryview___dealloc__(o); --Py_REFCNT(o); PyErr_Restore(etype, eval, etb); } Py_CLEAR(p->obj); Py_CLEAR(p->_size); Py_CLEAR(p->_array_interface); (*Py_TYPE(o)->tp_free)(o); } static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) { int e; struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; if (p->obj) { e = (*v)(p->obj, a); if (e) return e; } if (p->_size) { e = (*v)(p->_size, a); if (e) return e; } if (p->_array_interface) { e = (*v)(p->_array_interface, a); if (e) return e; } if (p->view.obj) { e = (*v)(p->view.obj, a); if (e) return e; } return 0; } static int __pyx_tp_clear_memoryview(PyObject *o) { PyObject* tmp; struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o; tmp = ((PyObject*)p->obj); p->obj = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); tmp = ((PyObject*)p->_size); p->_size = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); tmp = ((PyObject*)p->_array_interface); p->_array_interface = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); Py_CLEAR(p->view.obj); return 0; } static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) { PyObject *r; PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); Py_DECREF(x); return r; } static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) { if (v) { return __pyx_memoryview___setitem__(o, i, v); } else { PyErr_Format(PyExc_NotImplementedError, "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name); return -1; } } static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o); } static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o); } static PyMethodDef __pyx_methods_memoryview[] = { {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0}, {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0}, {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0}, {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0}, {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0}, {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; static struct PyGetSetDef __pyx_getsets_memoryview[] = { {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0}, {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0}, {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0}, {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0}, {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0}, {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0}, {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0}, {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0}, {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0}, {0, 0, 0, 0, 0} }; static PySequenceMethods __pyx_tp_as_sequence_memoryview = { __pyx_memoryview___len__, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ __pyx_sq_item_memoryview, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ 0, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; static PyMappingMethods __pyx_tp_as_mapping_memoryview = { __pyx_memoryview___len__, /*mp_length*/ __pyx_memoryview___getitem__, /*mp_subscript*/ __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/ }; static PyBufferProcs __pyx_tp_as_buffer_memoryview = { #if PY_MAJOR_VERSION < 3 0, /*bf_getreadbuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getwritebuffer*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getsegcount*/ #endif #if PY_MAJOR_VERSION < 3 0, /*bf_getcharbuffer*/ #endif __pyx_memoryview_getbuffer, /*bf_getbuffer*/ 0, /*bf_releasebuffer*/ }; static PyTypeObject __pyx_type___pyx_memoryview = { PyVarObject_HEAD_INIT(0, 0) "im2col_cython.memoryview", /*tp_name*/ sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_memoryview, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #endif #if PY_MAJOR_VERSION >= 3 0, /*tp_as_async*/ #endif __pyx_memoryview___repr__, /*tp_repr*/ 0, /*tp_as_number*/ &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/ &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ __pyx_memoryview___str__, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ &__pyx_tp_as_buffer_memoryview, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ 0, /*tp_doc*/ __pyx_tp_traverse_memoryview, /*tp_traverse*/ __pyx_tp_clear_memoryview, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods_memoryview, /*tp_methods*/ 0, /*tp_members*/ __pyx_getsets_memoryview, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_memoryview, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 0, /*tp_finalize*/ #endif }; static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice; static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) { struct __pyx_memoryviewslice_obj *p; PyObject *o = __pyx_tp_new_memoryview(t, a, k); if (unlikely(!o)) return 0; p = ((struct __pyx_memoryviewslice_obj *)o); p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice; p->from_object = Py_None; Py_INCREF(Py_None); p->from_slice.memview = NULL; return o; } static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) { struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; #if CYTHON_USE_TP_FINALIZE if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { if (PyObject_CallFinalizerFromDealloc(o)) return; } #endif PyObject_GC_UnTrack(o); { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); ++Py_REFCNT(o); __pyx_memoryviewslice___dealloc__(o); --Py_REFCNT(o); PyErr_Restore(etype, eval, etb); } Py_CLEAR(p->from_object); PyObject_GC_Track(o); __pyx_tp_dealloc_memoryview(o); } static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) { int e; struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e; if (p->from_object) { e = (*v)(p->from_object, a); if (e) return e; } return 0; } static int __pyx_tp_clear__memoryviewslice(PyObject *o) { PyObject* tmp; struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o; __pyx_tp_clear_memoryview(o); tmp = ((PyObject*)p->from_object); p->from_object = Py_None; Py_INCREF(Py_None); Py_XDECREF(tmp); __PYX_XDEC_MEMVIEW(&p->from_slice, 1); return 0; } static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) { return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o); } static PyMethodDef __pyx_methods__memoryviewslice[] = { {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0}, {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = { {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0}, {0, 0, 0, 0, 0} }; static PyTypeObject __pyx_type___pyx_memoryviewslice = { PyVarObject_HEAD_INIT(0, 0) "im2col_cython._memoryviewslice", /*tp_name*/ sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ #endif #if PY_MAJOR_VERSION >= 3 0, /*tp_as_async*/ #endif #if CYTHON_COMPILING_IN_PYPY __pyx_memoryview___repr__, /*tp_repr*/ #else 0, /*tp_repr*/ #endif 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ #if CYTHON_COMPILING_IN_PYPY __pyx_memoryview___str__, /*tp_str*/ #else 0, /*tp_str*/ #endif 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ "Internal class for passing memoryview slices to Python", /*tp_doc*/ __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/ __pyx_tp_clear__memoryviewslice, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ __pyx_methods__memoryviewslice, /*tp_methods*/ 0, /*tp_members*/ __pyx_getsets__memoryviewslice, /*tp_getset*/ 0, /*tp_base*/ 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new__memoryviewslice, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ 0, /*tp_mro*/ 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 0, /*tp_finalize*/ #endif }; static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; #if PY_MAJOR_VERSION >= 3 #if CYTHON_PEP489_MULTI_PHASE_INIT static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ static int __pyx_pymod_exec_im2col_cython(PyObject* module); /*proto*/ static PyModuleDef_Slot __pyx_moduledef_slots[] = { {Py_mod_create, (void*)__pyx_pymod_create}, {Py_mod_exec, (void*)__pyx_pymod_exec_im2col_cython}, {0, NULL} }; #endif static struct PyModuleDef __pyx_moduledef = { PyModuleDef_HEAD_INIT, "im2col_cython", 0, /* m_doc */ #if CYTHON_PEP489_MULTI_PHASE_INIT 0, /* m_size */ #else -1, /* m_size */ #endif __pyx_methods /* m_methods */, #if CYTHON_PEP489_MULTI_PHASE_INIT __pyx_moduledef_slots, /* m_slots */ #else NULL, /* m_reload */ #endif NULL, /* m_traverse */ NULL, /* m_clear */ NULL /* m_free */ }; #endif #ifndef CYTHON_SMALL_CODE #if defined(__clang__) #define CYTHON_SMALL_CODE #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) #define CYTHON_SMALL_CODE __attribute__((cold)) #else #define CYTHON_SMALL_CODE #endif #endif static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, {&__pyx_n_s_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 0, 1, 1}, {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0}, {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0}, {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0}, {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, {&__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_k_Expected_at_least_d_argument_s_g, sizeof(__pyx_k_Expected_at_least_d_argument_s_g), 0, 0, 1, 0}, {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, {&__pyx_kp_s_Function_call_with_ambiguous_arg, __pyx_k_Function_call_with_ambiguous_arg, sizeof(__pyx_k_Function_call_with_ambiguous_arg), 0, 0, 1, 0}, {&__pyx_n_s_H, __pyx_k_H, sizeof(__pyx_k_H), 0, 0, 1, 1}, {&__pyx_n_s_HH, __pyx_k_HH, sizeof(__pyx_k_HH), 0, 0, 1, 1}, {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0}, {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0}, {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0}, {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, {&__pyx_n_s_N, __pyx_k_N, sizeof(__pyx_k_N), 0, 0, 1, 1}, {&__pyx_kp_s_No_matching_signature_found, __pyx_k_No_matching_signature_found, sizeof(__pyx_k_No_matching_signature_found), 0, 0, 1, 0}, {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0}, {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, {&__pyx_n_s_W, __pyx_k_W, sizeof(__pyx_k_W), 0, 0, 1, 1}, {&__pyx_n_s_WW, __pyx_k_WW, sizeof(__pyx_k_WW), 0, 0, 1, 1}, {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0}, {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1}, {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, {&__pyx_n_s_col2im_6d_cython, __pyx_k_col2im_6d_cython, sizeof(__pyx_k_col2im_6d_cython), 0, 0, 1, 1}, {&__pyx_n_s_col2im_cython, __pyx_k_col2im_cython, sizeof(__pyx_k_col2im_cython), 0, 0, 1, 1}, {&__pyx_n_s_cols, __pyx_k_cols, sizeof(__pyx_k_cols), 0, 0, 1, 1}, {&__pyx_n_s_constant, __pyx_k_constant, sizeof(__pyx_k_constant), 0, 0, 1, 1}, {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, {&__pyx_n_s_defaults, __pyx_k_defaults, sizeof(__pyx_k_defaults), 0, 0, 1, 1}, {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1}, {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, {&__pyx_n_s_field_height, __pyx_k_field_height, sizeof(__pyx_k_field_height), 0, 0, 1, 1}, {&__pyx_n_s_field_width, __pyx_k_field_width, sizeof(__pyx_k_field_width), 0, 0, 1, 1}, {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, {&__pyx_n_s_float32_t, __pyx_k_float32_t, sizeof(__pyx_k_float32_t), 0, 0, 1, 1}, {&__pyx_n_s_float64_t, __pyx_k_float64_t, sizeof(__pyx_k_float64_t), 0, 0, 1, 1}, {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0}, {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, {&__pyx_n_s_im2col_cython, __pyx_k_im2col_cython, sizeof(__pyx_k_im2col_cython), 0, 0, 1, 1}, {&__pyx_kp_s_im2col_cython_pyx, __pyx_k_im2col_cython_pyx, sizeof(__pyx_k_im2col_cython_pyx), 0, 0, 1, 0}, {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1}, {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, {&__pyx_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0}, {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0}, {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, {&__pyx_n_s_out_h, __pyx_k_out_h, sizeof(__pyx_k_out_h), 0, 0, 1, 1}, {&__pyx_n_s_out_w, __pyx_k_out_w, sizeof(__pyx_k_out_w), 0, 0, 1, 1}, {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1}, {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, {&__pyx_n_s_pad, __pyx_k_pad, sizeof(__pyx_k_pad), 0, 0, 1, 1}, {&__pyx_n_s_padding, __pyx_k_padding, sizeof(__pyx_k_padding), 0, 0, 1, 1}, {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1}, {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1}, {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, {&__pyx_n_s_signatures, __pyx_k_signatures, sizeof(__pyx_k_signatures), 0, 0, 1, 1}, {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, {&__pyx_n_s_stride, __pyx_k_stride, sizeof(__pyx_k_stride), 0, 0, 1, 1}, {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0}, {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0}, {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1}, {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, {&__pyx_n_s_x_padded, __pyx_k_x_padded, sizeof(__pyx_k_x_padded), 0, 0, 1, 1}, {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 12, __pyx_L1_error) __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 272, __pyx_L1_error) __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(1, 856, __pyx_L1_error) __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(1, 1038, __pyx_L1_error) __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(2, 148, __pyx_L1_error) __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(2, 151, __pyx_L1_error) __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(2, 400, __pyx_L1_error) __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(2, 609, __pyx_L1_error) __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(2, 828, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); /* "im2col_cython.pyx":12 * np.float64_t * * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, # <<<<<<<<<<<<<< * int field_width, int padding, int stride): * cdef int N = x.shape[0] */ __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__3); __Pyx_GIVEREF(__pyx_tuple__3); __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4); /* "im2col_cython.pyx":24 * cdef int p = padding * cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, * ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') # <<<<<<<<<<<<<< * * cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( */ __pyx_tuple__5 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5); /* "im2col_cython.pyx":70 * field_height, field_width, padding, stride) * if padding > 0: * return x_padded[:, :, padding:-padding, padding:-padding] # <<<<<<<<<<<<<< * return x_padded * */ __pyx_slice__6 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__6)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__6); __Pyx_GIVEREF(__pyx_slice__6); __pyx_slice__7 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__7)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__7); __Pyx_GIVEREF(__pyx_slice__7); __pyx_slice__8 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__8)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__8); __Pyx_GIVEREF(__pyx_slice__8); __pyx_slice__9 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__9)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__9); __Pyx_GIVEREF(__pyx_slice__9); /* "im2col_cython.pyx":120 * * if pad > 0: * return x_padded[:, :, pad:-pad, pad:-pad] # <<<<<<<<<<<<<< * return x_padded */ __pyx_slice__10 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__10)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__10); __Pyx_GIVEREF(__pyx_slice__10); __pyx_slice__11 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__11)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__11); __Pyx_GIVEREF(__pyx_slice__11); __pyx_slice__12 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__12)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__12); __Pyx_GIVEREF(__pyx_slice__12); __pyx_slice__13 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__13)) __PYX_ERR(0, 120, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__13); __Pyx_GIVEREF(__pyx_slice__13); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":272 * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)): * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< * * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) */ __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 272, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":276 * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) * and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)): * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< * * info.buf = PyArray_DATA(self) */ __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 276, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":306 * if ((descr.byteorder == c'>' and little_endian) or * (descr.byteorder == c'<' and not little_endian)): * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< * if t == NPY_BYTE: f = "b" * elif t == NPY_UBYTE: f = "B" */ __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":856 * * if (end - f) - (new_offset - offset[0]) < 15: * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< * * if ((child.byteorder == c'>' and little_endian) or */ __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 856, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":880 * t = child.type_num * if end - f < 5: * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< * * # Until ticket #99 is fixed, use integers to avoid warnings */ __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 880, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__18); __Pyx_GIVEREF(__pyx_tuple__18); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1038 * _import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_umath() except -1: */ __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 1038, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__19); __Pyx_GIVEREF(__pyx_tuple__19); /* "../../../Anaconda3/lib/site-packages/Cython/Includes/numpy/__init__.pxd":1044 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< * * cdef inline int import_ufunc() except -1: */ __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 1044, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__20); __Pyx_GIVEREF(__pyx_tuple__20); /* "View.MemoryView":133 * * if not self.ndim: * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<< * * if itemsize <= 0: */ __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(2, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21); /* "View.MemoryView":136 * * if itemsize <= 0: * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<< * * if not isinstance(format, bytes): */ __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(2, 136, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__22); __Pyx_GIVEREF(__pyx_tuple__22); /* "View.MemoryView":148 * * if not self._shape: * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<< * * */ __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(2, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__23); __Pyx_GIVEREF(__pyx_tuple__23); /* "View.MemoryView":176 * self.data = malloc(self.len) * if not self.data: * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<< * * if self.dtype_is_object: */ __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(2, 176, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__24); __Pyx_GIVEREF(__pyx_tuple__24); /* "View.MemoryView":192 * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS * if not (flags & bufmode): * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<< * info.buf = self.data * info.len = self.len */ __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(2, 192, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__25); __Pyx_GIVEREF(__pyx_tuple__25); /* "(tree fragment)":2 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(2, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__26); __Pyx_GIVEREF(__pyx_tuple__26); /* "(tree fragment)":4 * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< */ __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__27); __Pyx_GIVEREF(__pyx_tuple__27); /* "View.MemoryView":414 * def __setitem__(memoryview self, object index, object value): * if self.view.readonly: * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<< * * have_slices, index = _unellipsify(index, self.view.ndim) */ __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(2, 414, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__28); __Pyx_GIVEREF(__pyx_tuple__28); /* "View.MemoryView":491 * result = struct.unpack(self.view.format, bytesitem) * except struct.error: * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<< * else: * if len(self.view.format) == 1: */ __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(2, 491, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__29); __Pyx_GIVEREF(__pyx_tuple__29); /* "View.MemoryView":516 * def __getbuffer__(self, Py_buffer *info, int flags): * if flags & PyBUF_WRITABLE and self.view.readonly: * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<< * * if flags & PyBUF_ND: */ __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(2, 516, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__30); __Pyx_GIVEREF(__pyx_tuple__30); /* "View.MemoryView":566 * if self.view.strides == NULL: * * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<< * * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) */ __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(2, 566, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__31); __Pyx_GIVEREF(__pyx_tuple__31); /* "View.MemoryView":573 * def suboffsets(self): * if self.view.suboffsets == NULL: * return (-1,) * self.view.ndim # <<<<<<<<<<<<<< * * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) */ __pyx_tuple__32 = PyTuple_New(1); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(2, 573, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_INCREF(__pyx_int_neg_1); __Pyx_GIVEREF(__pyx_int_neg_1); PyTuple_SET_ITEM(__pyx_tuple__32, 0, __pyx_int_neg_1); __Pyx_GIVEREF(__pyx_tuple__32); /* "(tree fragment)":2 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(2, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33); /* "(tree fragment)":4 * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< */ __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__34); __Pyx_GIVEREF(__pyx_tuple__34); /* "View.MemoryView":678 * if item is Ellipsis: * if not seen_ellipsis: * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<< * seen_ellipsis = True * else: */ __pyx_slice__35 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__35)) __PYX_ERR(2, 678, __pyx_L1_error) __Pyx_GOTREF(__pyx_slice__35); __Pyx_GIVEREF(__pyx_slice__35); /* "View.MemoryView":699 * for suboffset in suboffsets[:ndim]: * if suboffset >= 0: * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<< * * */ __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(2, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__36); __Pyx_GIVEREF(__pyx_tuple__36); /* "(tree fragment)":2 * def __reduce_cython__(self): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") */ __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(2, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__37); __Pyx_GIVEREF(__pyx_tuple__37); /* "(tree fragment)":4 * raise TypeError("no default __reduce__ due to non-trivial __cinit__") * def __setstate_cython__(self, __pyx_state): * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< */ __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__38); __Pyx_GIVEREF(__pyx_tuple__38); /* "im2col_cython.pyx":12 * np.float64_t * * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, # <<<<<<<<<<<<<< * int field_width, int padding, int stride): * cdef int N = x.shape[0] */ __pyx_tuple__39 = PyTuple_Pack(14, __pyx_n_s_x, __pyx_n_s_field_height, __pyx_n_s_field_width, __pyx_n_s_padding, __pyx_n_s_stride, __pyx_n_s_N, __pyx_n_s_C, __pyx_n_s_H, __pyx_n_s_W, __pyx_n_s_HH, __pyx_n_s_WW, __pyx_n_s_p, __pyx_n_s_x_padded, __pyx_n_s_cols); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__39); __Pyx_GIVEREF(__pyx_tuple__39); __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(5, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_im2col_cython_pyx, __pyx_n_s_im2col_cython, 12, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 12, __pyx_L1_error) /* "im2col_cython.pyx":57 * * * def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ __pyx_tuple__41 = PyTuple_Pack(13, __pyx_n_s_cols, __pyx_n_s_N, __pyx_n_s_C, __pyx_n_s_H, __pyx_n_s_W, __pyx_n_s_field_height, __pyx_n_s_field_width, __pyx_n_s_padding, __pyx_n_s_stride, __pyx_n_s_x, __pyx_n_s_HH, __pyx_n_s_WW, __pyx_n_s_x_padded); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__41); __Pyx_GIVEREF(__pyx_tuple__41); __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(9, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_im2col_cython_pyx, __pyx_n_s_col2im_cython, 57, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 57, __pyx_L1_error) /* "im2col_cython.pyx":109 * * * def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ __pyx_tuple__43 = PyTuple_Pack(13, __pyx_n_s_cols, __pyx_n_s_N, __pyx_n_s_C, __pyx_n_s_H, __pyx_n_s_W, __pyx_n_s_HH, __pyx_n_s_WW, __pyx_n_s_pad, __pyx_n_s_stride, __pyx_n_s_x, __pyx_n_s_out_h, __pyx_n_s_out_w, __pyx_n_s_x_padded); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__43); __Pyx_GIVEREF(__pyx_tuple__43); __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(9, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_im2col_cython_pyx, __pyx_n_s_col2im_6d_cython, 109, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 109, __pyx_L1_error) /* "View.MemoryView":286 * return self.name * * cdef generic = Enum("") # <<<<<<<<<<<<<< * cdef strided = Enum("") # default * cdef indirect = Enum("") */ __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(2, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__45); __Pyx_GIVEREF(__pyx_tuple__45); /* "View.MemoryView":287 * * cdef generic = Enum("") * cdef strided = Enum("") # default # <<<<<<<<<<<<<< * cdef indirect = Enum("") * */ __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(2, 287, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__46); __Pyx_GIVEREF(__pyx_tuple__46); /* "View.MemoryView":288 * cdef generic = Enum("") * cdef strided = Enum("") # default * cdef indirect = Enum("") # <<<<<<<<<<<<<< * * */ __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(2, 288, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__47); __Pyx_GIVEREF(__pyx_tuple__47); /* "View.MemoryView":291 * * * cdef contiguous = Enum("") # <<<<<<<<<<<<<< * cdef indirect_contiguous = Enum("") * */ __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(2, 291, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__48); __Pyx_GIVEREF(__pyx_tuple__48); /* "View.MemoryView":292 * * cdef contiguous = Enum("") * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< * * */ __pyx_tuple__49 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(2, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__49); __Pyx_GIVEREF(__pyx_tuple__49); /* "(tree fragment)":1 * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ __pyx_tuple__50 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__50); __Pyx_GIVEREF(__pyx_tuple__50); __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ static int __Pyx_modinit_global_init_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); /*--- Global init code ---*/ generic = Py_None; Py_INCREF(Py_None); strided = Py_None; Py_INCREF(Py_None); indirect = Py_None; Py_INCREF(Py_None); contiguous = Py_None; Py_INCREF(Py_None); indirect_contiguous = Py_None; Py_INCREF(Py_None); __Pyx_RefNannyFinishContext(); return 0; } static int __Pyx_modinit_variable_export_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); /*--- Variable export code ---*/ __Pyx_RefNannyFinishContext(); return 0; } static int __Pyx_modinit_function_export_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); /*--- Function export code ---*/ __Pyx_RefNannyFinishContext(); return 0; } static int __Pyx_modinit_type_init_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); /*--- Type init code ---*/ __pyx_vtabptr_array = &__pyx_vtable_array; __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) __pyx_type___pyx_array.tp_print = 0; if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(2, 105, __pyx_L1_error) __pyx_array_type = &__pyx_type___pyx_array; if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 279, __pyx_L1_error) __pyx_type___pyx_MemviewEnum.tp_print = 0; if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) { __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr; } if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(2, 279, __pyx_L1_error) __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum; __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview; __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer; __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice; __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment; __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar; __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed; __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object; __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object; if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) __pyx_type___pyx_memoryview.tp_print = 0; if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) { __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr; } if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(2, 330, __pyx_L1_error) __pyx_memoryview_type = &__pyx_type___pyx_memoryview; __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice; __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview; __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object; __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object; __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type; if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 961, __pyx_L1_error) __pyx_type___pyx_memoryviewslice.tp_print = 0; if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) { __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr; } if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(2, 961, __pyx_L1_error) if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(2, 961, __pyx_L1_error) __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice; __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_modinit_type_import_code(void) { __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); /*--- Type import code ---*/ __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 sizeof(PyTypeObject), #else sizeof(PyHeapTypeObject), #endif __Pyx_ImportType_CheckSize_Warn); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 206, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_ptype_5numpy_dtype = __Pyx_ImportType(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __Pyx_ImportType_CheckSize_Ignore); if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(1, 206, __pyx_L1_error) __pyx_ptype_5numpy_flatiter = __Pyx_ImportType(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __Pyx_ImportType_CheckSize_Warn); if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(1, 229, __pyx_L1_error) __pyx_ptype_5numpy_broadcast = __Pyx_ImportType(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __Pyx_ImportType_CheckSize_Warn); if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(1, 233, __pyx_L1_error) __pyx_ptype_5numpy_ndarray = __Pyx_ImportType(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __Pyx_ImportType_CheckSize_Ignore); if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(1, 242, __pyx_L1_error) __pyx_ptype_5numpy_ufunc = __Pyx_ImportType(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __Pyx_ImportType_CheckSize_Warn); if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(1, 918, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_RefNannyFinishContext(); return -1; } static int __Pyx_modinit_variable_import_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); /*--- Variable import code ---*/ __Pyx_RefNannyFinishContext(); return 0; } static int __Pyx_modinit_function_import_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); /*--- Function import code ---*/ __Pyx_RefNannyFinishContext(); return 0; } #if PY_MAJOR_VERSION < 3 #ifdef CYTHON_NO_PYINIT_EXPORT #define __Pyx_PyMODINIT_FUNC void #else #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC #endif #else #ifdef CYTHON_NO_PYINIT_EXPORT #define __Pyx_PyMODINIT_FUNC PyObject * #else #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC #endif #endif #if PY_MAJOR_VERSION < 3 __Pyx_PyMODINIT_FUNC initim2col_cython(void) CYTHON_SMALL_CODE; /*proto*/ __Pyx_PyMODINIT_FUNC initim2col_cython(void) #else __Pyx_PyMODINIT_FUNC PyInit_im2col_cython(void) CYTHON_SMALL_CODE; /*proto*/ __Pyx_PyMODINIT_FUNC PyInit_im2col_cython(void) #if CYTHON_PEP489_MULTI_PHASE_INIT { return PyModuleDef_Init(&__pyx_moduledef); } static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { #if PY_VERSION_HEX >= 0x030700A1 static PY_INT64_T main_interpreter_id = -1; PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); if (main_interpreter_id == -1) { main_interpreter_id = current_id; return (unlikely(current_id == -1)) ? -1 : 0; } else if (unlikely(main_interpreter_id != current_id)) #else static PyInterpreterState *main_interpreter = NULL; PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; if (!main_interpreter) { main_interpreter = current_interpreter; } else if (unlikely(main_interpreter != current_interpreter)) #endif { PyErr_SetString( PyExc_ImportError, "Interpreter change detected - this module can only be loaded into one interpreter per process."); return -1; } return 0; } static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { PyObject *value = PyObject_GetAttrString(spec, from_name); int result = 0; if (likely(value)) { if (allow_none || value != Py_None) { result = PyDict_SetItemString(moddict, to_name, value); } Py_DECREF(value); } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { PyErr_Clear(); } else { result = -1; } return result; } static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { PyObject *module = NULL, *moddict, *modname; if (__Pyx_check_single_interpreter()) return NULL; if (__pyx_m) return __Pyx_NewRef(__pyx_m); modname = PyObject_GetAttrString(spec, "name"); if (unlikely(!modname)) goto bad; module = PyModule_NewObject(modname); Py_DECREF(modname); if (unlikely(!module)) goto bad; moddict = PyModule_GetDict(module); if (unlikely(!moddict)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; return module; bad: Py_XDECREF(module); return NULL; } static CYTHON_SMALL_CODE int __pyx_pymod_exec_im2col_cython(PyObject *__pyx_pyinit_module) #endif #endif { PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; static PyThread_type_lock __pyx_t_8[8]; __Pyx_RefNannyDeclarations #if CYTHON_PEP489_MULTI_PHASE_INIT if (__pyx_m) { if (__pyx_m == __pyx_pyinit_module) return 0; PyErr_SetString(PyExc_RuntimeError, "Module 'im2col_cython' has already been imported. Re-initialisation is not supported."); return -1; } #elif PY_MAJOR_VERSION >= 3 if (__pyx_m) return __Pyx_NewRef(__pyx_m); #endif #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { PyErr_Clear(); __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); if (!__Pyx_RefNanny) Py_FatalError("failed to import 'refnanny' module"); } #endif __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_im2col_cython(void)", 0); if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pxy_PyFrame_Initialize_Offsets __Pxy_PyFrame_Initialize_Offsets(); #endif __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pyx_CyFunction_USED if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_FusedFunction_USED if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Coroutine_USED if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Generator_USED if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_AsyncGen_USED if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_StopAsyncIteration_USED if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS #ifdef WITH_THREAD /* Python build with threading support? */ PyEval_InitThreads(); #endif #endif /*--- Module creation code ---*/ #if CYTHON_PEP489_MULTI_PHASE_INIT __pyx_m = __pyx_pyinit_module; Py_INCREF(__pyx_m); #else #if PY_MAJOR_VERSION < 3 __pyx_m = Py_InitModule4("im2col_cython", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); #else __pyx_m = PyModule_Create(&__pyx_moduledef); #endif if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) #endif __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) Py_INCREF(__pyx_d); __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) #if CYTHON_COMPILING_IN_PYPY Py_INCREF(__pyx_b); #endif if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); /*--- Initialize various global constants etc. ---*/ if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif if (__pyx_module_is_main_im2col_cython) { if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) } #if PY_MAJOR_VERSION >= 3 { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) if (!PyDict_GetItemString(modules, "im2col_cython")) { if (unlikely(PyDict_SetItemString(modules, "im2col_cython", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) } } #endif /*--- Builtin init code ---*/ if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) /*--- Constants init code ---*/ if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) /*--- Global type/function init code ---*/ (void)__Pyx_modinit_global_init_code(); (void)__Pyx_modinit_variable_export_code(); (void)__Pyx_modinit_function_export_code(); if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error; if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error; (void)__Pyx_modinit_variable_import_code(); (void)__Pyx_modinit_function_import_code(); /*--- Execution code ---*/ #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif /* "im2col_cython.pyx":1 * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np * cimport cython */ __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "im2col_cython.pyx":12 * np.float64_t * * def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, # <<<<<<<<<<<<<< * int field_width, int padding, int stride): * cdef int N = x.shape[0] */ __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_13im2col_cython_7im2col_cython, 0, __pyx_n_s_im2col_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_float32_t, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_13im2col_cython_9im2col_cython, 0, __pyx_n_s_im2col_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_float64_t, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __pyx_FusedFunction_NewEx(&__pyx_mdef_13im2col_cython_1im2col_cython, 0, __pyx_n_s_im2col_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_empty_tuple); ((__pyx_FusedFunctionObject *) __pyx_t_2)->__signatures__ = __pyx_t_1; __Pyx_GIVEREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_im2col_cython, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "im2col_cython.pyx":57 * * * def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int field_height, int field_width, int padding, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_13im2col_cython_13col2im_cython, 0, __pyx_n_s_col2im_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float32_t, __pyx_t_4) < 0) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_13im2col_cython_15col2im_cython, 0, __pyx_n_s_col2im_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float64_t, __pyx_t_4) < 0) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = __pyx_FusedFunction_NewEx(&__pyx_mdef_13im2col_cython_3col2im_cython, 0, __pyx_n_s_col2im_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_empty_tuple); ((__pyx_FusedFunctionObject *) __pyx_t_4)->__signatures__ = __pyx_t_3; __Pyx_GIVEREF(__pyx_t_3); if (PyDict_SetItem(__pyx_d, __pyx_n_s_col2im_cython, __pyx_t_4) < 0) __PYX_ERR(0, 57, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "im2col_cython.pyx":109 * * * def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, # <<<<<<<<<<<<<< * int HH, int WW, int pad, int stride): * cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) */ __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_13im2col_cython_19col2im_6d_cython, 0, __pyx_n_s_col2im_6d_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_float32_t, __pyx_t_6) < 0) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_13im2col_cython_21col2im_6d_cython, 0, __pyx_n_s_col2im_6d_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_float64_t, __pyx_t_6) < 0) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __pyx_FusedFunction_NewEx(&__pyx_mdef_13im2col_cython_5col2im_6d_cython, 0, __pyx_n_s_col2im_6d_cython, NULL, __pyx_n_s_im2col_cython, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_6, __pyx_empty_tuple); ((__pyx_FusedFunctionObject *) __pyx_t_6)->__signatures__ = __pyx_t_5; __Pyx_GIVEREF(__pyx_t_5); if (PyDict_SetItem(__pyx_d, __pyx_n_s_col2im_6d_cython, __pyx_t_6) < 0) __PYX_ERR(0, 109, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* "im2col_cython.pyx":1 * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np * cimport cython */ __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_7) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":209 * info.obj = self * * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< * * def __dealloc__(array self): */ __pyx_t_7 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 209, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_7) < 0) __PYX_ERR(2, 209, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; PyType_Modified(__pyx_array_type); /* "View.MemoryView":286 * return self.name * * cdef generic = Enum("") # <<<<<<<<<<<<<< * cdef strided = Enum("") # default * cdef indirect = Enum("") */ __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(generic); __Pyx_DECREF_SET(generic, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":287 * * cdef generic = Enum("") * cdef strided = Enum("") # default # <<<<<<<<<<<<<< * cdef indirect = Enum("") * */ __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 287, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(strided); __Pyx_DECREF_SET(strided, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":288 * cdef generic = Enum("") * cdef strided = Enum("") # default * cdef indirect = Enum("") # <<<<<<<<<<<<<< * * */ __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 288, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(indirect); __Pyx_DECREF_SET(indirect, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":291 * * * cdef contiguous = Enum("") # <<<<<<<<<<<<<< * cdef indirect_contiguous = Enum("") * */ __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 291, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(contiguous); __Pyx_DECREF_SET(contiguous, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":292 * * cdef contiguous = Enum("") * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<< * * */ __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__49, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(indirect_contiguous); __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_7); __pyx_t_7 = 0; /* "View.MemoryView":316 * * DEF THREAD_LOCKS_PREALLOCATED = 8 * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<< * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ * PyThread_allocate_lock(), */ __pyx_memoryview_thread_locks_used = 0; /* "View.MemoryView":317 * DEF THREAD_LOCKS_PREALLOCATED = 8 * cdef int __pyx_memoryview_thread_locks_used = 0 * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<< * PyThread_allocate_lock(), * PyThread_allocate_lock(), */ __pyx_t_8[0] = PyThread_allocate_lock(); __pyx_t_8[1] = PyThread_allocate_lock(); __pyx_t_8[2] = PyThread_allocate_lock(); __pyx_t_8[3] = PyThread_allocate_lock(); __pyx_t_8[4] = PyThread_allocate_lock(); __pyx_t_8[5] = PyThread_allocate_lock(); __pyx_t_8[6] = PyThread_allocate_lock(); __pyx_t_8[7] = PyThread_allocate_lock(); memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_8, sizeof(__pyx_memoryview_thread_locks[0]) * (8)); /* "View.MemoryView":545 * info.obj = self * * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< * * */ __pyx_t_7 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_7) < 0) __PYX_ERR(2, 545, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; PyType_Modified(__pyx_memoryview_type); /* "View.MemoryView":991 * return self.from_object * * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<< * * */ __pyx_t_7 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 991, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_7) < 0) __PYX_ERR(2, 991, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; PyType_Modified(__pyx_memoryviewslice_type); /* "(tree fragment)":1 * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ __pyx_t_7 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_7) < 0) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "(tree fragment)":11 * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) * return __pyx_result * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< * __pyx_result.name = __pyx_state[0] * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): */ /*--- Wrapped vars code ---*/ goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); if (__pyx_m) { if (__pyx_d) { __Pyx_AddTraceback("init im2col_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); } Py_CLEAR(__pyx_m); } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init im2col_cython"); } __pyx_L0:; __Pyx_RefNannyFinishContext(); #if CYTHON_PEP489_MULTI_PHASE_INIT return (__pyx_m != NULL) ? 0 : -1; #elif PY_MAJOR_VERSION >= 3 return __pyx_m; #else return; #endif } /* --- Runtime support code --- */ /* Refnanny */ #if CYTHON_REFNANNY static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { PyObject *m = NULL, *p = NULL; void *r = NULL; m = PyImport_ImportModule(modname); if (!m) goto end; p = PyObject_GetAttrString(m, "RefNannyAPI"); if (!p) goto end; r = PyLong_AsVoidPtr(p); end: Py_XDECREF(p); Py_XDECREF(m); return (__Pyx_RefNannyAPIStruct *)r; } #endif /* PyObjectGetAttrStr */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { PyTypeObject* tp = Py_TYPE(obj); if (likely(tp->tp_getattro)) return tp->tp_getattro(obj, attr_name); #if PY_MAJOR_VERSION < 3 if (likely(tp->tp_getattr)) return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); #endif return PyObject_GetAttr(obj, attr_name); } #endif /* GetBuiltinName */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); if (unlikely(!result)) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); #else "name '%.200s' is not defined", PyString_AS_STRING(name)); #endif } return result; } /* RaiseArgTupleInvalid */ static void __Pyx_RaiseArgtupleInvalid( const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found) { Py_ssize_t num_expected; const char *more_or_less; if (num_found < num_min) { num_expected = num_min; more_or_less = "at least"; } else { num_expected = num_max; more_or_less = "at most"; } if (exact) { more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", func_name, more_or_less, num_expected, (num_expected == 1) ? "" : "s", num_found); } /* RaiseDoubleKeywords */ static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name) { PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION >= 3 "%s() got multiple values for keyword argument '%U'", func_name, kw_name); #else "%s() got multiple values for keyword argument '%s'", func_name, PyString_AsString(kw_name)); #endif } /* ParseKeywords */ static int __Pyx_ParseOptionalKeywords( PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name) { PyObject *key = 0, *value = 0; Py_ssize_t pos = 0; PyObject*** name; PyObject*** first_kw_arg = argnames + num_pos_args; while (PyDict_Next(kwds, &pos, &key, &value)) { name = first_kw_arg; while (*name && (**name != key)) name++; if (*name) { values[name-argnames] = value; continue; } name = first_kw_arg; #if PY_MAJOR_VERSION < 3 if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { while (*name) { if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) && _PyString_Eq(**name, key)) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { if ((**argname == key) || ( (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) && _PyString_Eq(**argname, key))) { goto arg_passed_twice; } argname++; } } } else #endif if (likely(PyUnicode_Check(key))) { while (*name) { int cmp = (**name == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**name, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) { values[name-argnames] = value; break; } name++; } if (*name) continue; else { PyObject*** argname = argnames; while (argname != first_kw_arg) { int cmp = (**argname == key) ? 0 : #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : #endif PyUnicode_Compare(**argname, key); if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; if (cmp == 0) goto arg_passed_twice; argname++; } } } else goto invalid_keyword_type; if (kwds2) { if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { goto invalid_keyword; } } return 0; arg_passed_twice: __Pyx_RaiseDoubleKeywordsError(function_name, key); goto bad; invalid_keyword_type: PyErr_Format(PyExc_TypeError, "%.200s() keywords must be strings", function_name); goto bad; invalid_keyword: PyErr_Format(PyExc_TypeError, #if PY_MAJOR_VERSION < 3 "%.200s() got an unexpected keyword argument '%.200s'", function_name, PyString_AsString(key)); #else "%s() got an unexpected keyword argument '%U'", function_name, key); #endif bad: return -1; } /* GetItemInt */ static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { PyObject *r; if (!j) return NULL; r = PyObject_GetItem(o, j); Py_DECREF(j); return r; } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS Py_ssize_t wrapped_i = i; if (wraparound & unlikely(i < 0)) { wrapped_i += PyList_GET_SIZE(o); } if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { PyObject *r = PyList_GET_ITEM(o, wrapped_i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS Py_ssize_t wrapped_i = i; if (wraparound & unlikely(i < 0)) { wrapped_i += PyTuple_GET_SIZE(o); } if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); Py_INCREF(r); return r; } return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else return PySequence_GetItem(o, i); #endif } static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS if (is_list || PyList_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { PyObject *r = PyList_GET_ITEM(o, n); Py_INCREF(r); return r; } } else if (PyTuple_CheckExact(o)) { Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { PyObject *r = PyTuple_GET_ITEM(o, n); Py_INCREF(r); return r; } } else { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_item)) { if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { Py_ssize_t l = m->sq_length(o); if (likely(l >= 0)) { i += l; } else { if (!PyErr_ExceptionMatches(PyExc_OverflowError)) return NULL; PyErr_Clear(); } } return m->sq_item(o, i); } } #else if (is_list || PySequence_Check(o)) { return PySequence_GetItem(o, i); } #endif return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } /* DictGetItem */ #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { PyObject *value; value = PyDict_GetItemWithError(d, key); if (unlikely(!value)) { if (!PyErr_Occurred()) { if (unlikely(PyTuple_Check(key))) { PyObject* args = PyTuple_Pack(1, key); if (likely(args)) { PyErr_SetObject(PyExc_KeyError, args); Py_DECREF(args); } } else { PyErr_SetObject(PyExc_KeyError, key); } } return NULL; } Py_INCREF(value); return value; } #endif /* PyCFunctionFastCall */ #if CYTHON_FAST_PYCCALL static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { PyCFunctionObject *func = (PyCFunctionObject*)func_obj; PyCFunction meth = PyCFunction_GET_FUNCTION(func); PyObject *self = PyCFunction_GET_SELF(func); int flags = PyCFunction_GET_FLAGS(func); assert(PyCFunction_Check(func)); assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); assert(nargs >= 0); assert(nargs == 0 || args != NULL); /* _PyCFunction_FastCallDict() must not be called with an exception set, because it may clear it (directly or indirectly) and so the caller loses its exception */ assert(!PyErr_Occurred()); if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); } else { return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); } } #endif /* PyFunctionFastCall */ #if CYTHON_FAST_PYCALL static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, PyObject *globals) { PyFrameObject *f; PyThreadState *tstate = __Pyx_PyThreadState_Current; PyObject **fastlocals; Py_ssize_t i; PyObject *result; assert(globals != NULL); /* XXX Perhaps we should create a specialized PyFrame_New() that doesn't take locals, but does take builtins without sanity checking them. */ assert(tstate != NULL); f = PyFrame_New(tstate, co, globals, NULL); if (f == NULL) { return NULL; } fastlocals = __Pyx_PyFrame_GetLocalsplus(f); for (i = 0; i < na; i++) { Py_INCREF(*args); fastlocals[i] = *args++; } result = PyEval_EvalFrameEx(f,0); ++tstate->recursion_depth; Py_DECREF(f); --tstate->recursion_depth; return result; } #if 1 || PY_VERSION_HEX < 0x030600B1 static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) { PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); PyObject *globals = PyFunction_GET_GLOBALS(func); PyObject *argdefs = PyFunction_GET_DEFAULTS(func); PyObject *closure; #if PY_MAJOR_VERSION >= 3 PyObject *kwdefs; #endif PyObject *kwtuple, **k; PyObject **d; Py_ssize_t nd; Py_ssize_t nk; PyObject *result; assert(kwargs == NULL || PyDict_Check(kwargs)); nk = kwargs ? PyDict_Size(kwargs) : 0; if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { return NULL; } if ( #if PY_MAJOR_VERSION >= 3 co->co_kwonlyargcount == 0 && #endif likely(kwargs == NULL || nk == 0) && co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { if (argdefs == NULL && co->co_argcount == nargs) { result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); goto done; } else if (nargs == 0 && argdefs != NULL && co->co_argcount == Py_SIZE(argdefs)) { /* function called with no arguments, but all parameters have a default value: use default values as arguments .*/ args = &PyTuple_GET_ITEM(argdefs, 0); result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); goto done; } } if (kwargs != NULL) { Py_ssize_t pos, i; kwtuple = PyTuple_New(2 * nk); if (kwtuple == NULL) { result = NULL; goto done; } k = &PyTuple_GET_ITEM(kwtuple, 0); pos = i = 0; while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { Py_INCREF(k[i]); Py_INCREF(k[i+1]); i += 2; } nk = i / 2; } else { kwtuple = NULL; k = NULL; } closure = PyFunction_GET_CLOSURE(func); #if PY_MAJOR_VERSION >= 3 kwdefs = PyFunction_GET_KW_DEFAULTS(func); #endif if (argdefs != NULL) { d = &PyTuple_GET_ITEM(argdefs, 0); nd = Py_SIZE(argdefs); } else { d = NULL; nd = 0; } #if PY_MAJOR_VERSION >= 3 result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, args, nargs, k, (int)nk, d, (int)nd, kwdefs, closure); #else result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, args, nargs, k, (int)nk, d, (int)nd, closure); #endif Py_XDECREF(kwtuple); done: Py_LeaveRecursiveCall(); return result; } #endif #endif /* PyObjectCall */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { PyObject *result; ternaryfunc call = func->ob_type->tp_call; if (unlikely(!call)) return PyObject_Call(func, arg, kw); if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) return NULL; result = (*call)(func, arg, kw); Py_LeaveRecursiveCall(); if (unlikely(!result) && unlikely(!PyErr_Occurred())) { PyErr_SetString( PyExc_SystemError, "NULL result without error in PyObject_Call"); } return result; } #endif /* PyObjectCallMethO */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { PyObject *self, *result; PyCFunction cfunc; cfunc = PyCFunction_GET_FUNCTION(func); self = PyCFunction_GET_SELF(func); if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) return NULL; result = cfunc(self, arg); Py_LeaveRecursiveCall(); if (unlikely(!result) && unlikely(!PyErr_Occurred())) { PyErr_SetString( PyExc_SystemError, "NULL result without error in PyObject_Call"); } return result; } #endif /* PyObjectCallOneArg */ #if CYTHON_COMPILING_IN_CPYTHON static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { PyObject *result; PyObject *args = PyTuple_New(1); if (unlikely(!args)) return NULL; Py_INCREF(arg); PyTuple_SET_ITEM(args, 0, arg); result = __Pyx_PyObject_Call(func, args, NULL); Py_DECREF(args); return result; } static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { #if CYTHON_FAST_PYCALL if (PyFunction_Check(func)) { return __Pyx_PyFunction_FastCall(func, &arg, 1); } #endif if (likely(PyCFunction_Check(func))) { if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { return __Pyx_PyObject_CallMethO(func, arg); #if CYTHON_FAST_PYCCALL } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { return __Pyx_PyCFunction_FastCall(func, &arg, 1); #endif } } return __Pyx__PyObject_CallOneArg(func, arg); } #else static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { PyObject *result; PyObject *args = PyTuple_Pack(1, arg); if (unlikely(!args)) return NULL; result = __Pyx_PyObject_Call(func, args, NULL); Py_DECREF(args); return result; } #endif /* PyErrFetchRestore */ #if CYTHON_FAST_THREAD_STATE static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { PyObject *tmp_type, *tmp_value, *tmp_tb; tmp_type = tstate->curexc_type; tmp_value = tstate->curexc_value; tmp_tb = tstate->curexc_traceback; tstate->curexc_type = type; tstate->curexc_value = value; tstate->curexc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); } static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { *type = tstate->curexc_type; *value = tstate->curexc_value; *tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; } #endif /* RaiseException */ #if PY_MAJOR_VERSION < 3 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, CYTHON_UNUSED PyObject *cause) { __Pyx_PyThreadState_declare Py_XINCREF(type); if (!value || value == Py_None) value = NULL; else Py_INCREF(value); if (!tb || tb == Py_None) tb = NULL; else { Py_INCREF(tb); if (!PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto raise_error; } } if (PyType_Check(type)) { #if CYTHON_COMPILING_IN_PYPY if (!value) { Py_INCREF(Py_None); value = Py_None; } #endif PyErr_NormalizeException(&type, &value, &tb); } else { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto raise_error; } value = type; type = (PyObject*) Py_TYPE(type); Py_INCREF(type); if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto raise_error; } } __Pyx_PyThreadState_assign __Pyx_ErrRestore(type, value, tb); return; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(tb); return; } #else static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { PyObject* owned_instance = NULL; if (tb == Py_None) { tb = 0; } else if (tb && !PyTraceBack_Check(tb)) { PyErr_SetString(PyExc_TypeError, "raise: arg 3 must be a traceback or None"); goto bad; } if (value == Py_None) value = 0; if (PyExceptionInstance_Check(type)) { if (value) { PyErr_SetString(PyExc_TypeError, "instance exception may not have a separate value"); goto bad; } value = type; type = (PyObject*) Py_TYPE(value); } else if (PyExceptionClass_Check(type)) { PyObject *instance_class = NULL; if (value && PyExceptionInstance_Check(value)) { instance_class = (PyObject*) Py_TYPE(value); if (instance_class != type) { int is_subclass = PyObject_IsSubclass(instance_class, type); if (!is_subclass) { instance_class = NULL; } else if (unlikely(is_subclass == -1)) { goto bad; } else { type = instance_class; } } } if (!instance_class) { PyObject *args; if (!value) args = PyTuple_New(0); else if (PyTuple_Check(value)) { Py_INCREF(value); args = value; } else args = PyTuple_Pack(1, value); if (!args) goto bad; owned_instance = PyObject_Call(type, args, NULL); Py_DECREF(args); if (!owned_instance) goto bad; value = owned_instance; if (!PyExceptionInstance_Check(value)) { PyErr_Format(PyExc_TypeError, "calling %R should have returned an instance of " "BaseException, not %R", type, Py_TYPE(value)); goto bad; } } } else { PyErr_SetString(PyExc_TypeError, "raise: exception class must be a subclass of BaseException"); goto bad; } if (cause) { PyObject *fixed_cause; if (cause == Py_None) { fixed_cause = NULL; } else if (PyExceptionClass_Check(cause)) { fixed_cause = PyObject_CallObject(cause, NULL); if (fixed_cause == NULL) goto bad; } else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; Py_INCREF(fixed_cause); } else { PyErr_SetString(PyExc_TypeError, "exception causes must derive from " "BaseException"); goto bad; } PyException_SetCause(value, fixed_cause); } PyErr_SetObject(type, value); if (tb) { #if CYTHON_COMPILING_IN_PYPY PyObject *tmp_type, *tmp_value, *tmp_tb; PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); Py_INCREF(tb); PyErr_Restore(tmp_type, tmp_value, tb); Py_XDECREF(tmp_tb); #else PyThreadState *tstate = __Pyx_PyThreadState_Current; PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { Py_INCREF(tb); tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } #endif } bad: Py_XDECREF(owned_instance); return; } #endif /* UnicodeAsUCS4 */ static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) { Py_ssize_t length; #if CYTHON_PEP393_ENABLED length = PyUnicode_GET_LENGTH(x); if (likely(length == 1)) { return PyUnicode_READ_CHAR(x, 0); } #else length = PyUnicode_GET_SIZE(x); if (likely(length == 1)) { return PyUnicode_AS_UNICODE(x)[0]; } #if Py_UNICODE_SIZE == 2 else if (PyUnicode_GET_SIZE(x) == 2) { Py_UCS4 high_val = PyUnicode_AS_UNICODE(x)[0]; if (high_val >= 0xD800 && high_val <= 0xDBFF) { Py_UCS4 low_val = PyUnicode_AS_UNICODE(x)[1]; if (low_val >= 0xDC00 && low_val <= 0xDFFF) { return 0x10000 + (((high_val & ((1<<10)-1)) << 10) | (low_val & ((1<<10)-1))); } } } #endif #endif PyErr_Format(PyExc_ValueError, "only single character unicode strings can be converted to Py_UCS4, " "got length %" CYTHON_FORMAT_SSIZE_T "d", length); return (Py_UCS4)-1; } /* object_ord */ static long __Pyx__PyObject_Ord(PyObject* c) { Py_ssize_t size; if (PyBytes_Check(c)) { size = PyBytes_GET_SIZE(c); if (likely(size == 1)) { return (unsigned char) PyBytes_AS_STRING(c)[0]; } #if PY_MAJOR_VERSION < 3 } else if (PyUnicode_Check(c)) { return (long)__Pyx_PyUnicode_AsPy_UCS4(c); #endif #if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) } else if (PyByteArray_Check(c)) { size = PyByteArray_GET_SIZE(c); if (likely(size == 1)) { return (unsigned char) PyByteArray_AS_STRING(c)[0]; } #endif } else { PyErr_Format(PyExc_TypeError, "ord() expected string of length 1, but %.200s found", c->ob_type->tp_name); return (long)(Py_UCS4)-1; } PyErr_Format(PyExc_TypeError, "ord() expected a character, but string of length %zd found", size); return (long)(Py_UCS4)-1; } /* SetItemInt */ static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) { int r; if (!j) return -1; r = PyObject_SetItem(o, j, v); Py_DECREF(j); return r; } static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list, CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS if (is_list || PyList_CheckExact(o)) { Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o)); if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) { PyObject* old = PyList_GET_ITEM(o, n); Py_INCREF(v); PyList_SET_ITEM(o, n, v); Py_DECREF(old); return 1; } } else { PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; if (likely(m && m->sq_ass_item)) { if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { Py_ssize_t l = m->sq_length(o); if (likely(l >= 0)) { i += l; } else { if (!PyErr_ExceptionMatches(PyExc_OverflowError)) return -1; PyErr_Clear(); } } return m->sq_ass_item(o, i, v); } } #else #if CYTHON_COMPILING_IN_PYPY if (is_list || (PySequence_Check(o) && !PyDict_Check(o))) #else if (is_list || PySequence_Check(o)) #endif { return PySequence_SetItem(o, i, v); } #endif return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v); } /* IterFinish */ static CYTHON_INLINE int __Pyx_IterFinish(void) { #if CYTHON_FAST_THREAD_STATE PyThreadState *tstate = __Pyx_PyThreadState_Current; PyObject* exc_type = tstate->curexc_type; if (unlikely(exc_type)) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { PyObject *exc_value, *exc_tb; exc_value = tstate->curexc_value; exc_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; Py_DECREF(exc_type); Py_XDECREF(exc_value); Py_XDECREF(exc_tb); return 0; } else { return -1; } } return 0; #else if (unlikely(PyErr_Occurred())) { if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { PyErr_Clear(); return 0; } else { return -1; } } return 0; #endif } /* PyObjectCallNoArg */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { #if CYTHON_FAST_PYCALL if (PyFunction_Check(func)) { return __Pyx_PyFunction_FastCall(func, NULL, 0); } #endif #ifdef __Pyx_CyFunction_USED if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) #else if (likely(PyCFunction_Check(func))) #endif { if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { return __Pyx_PyObject_CallMethO(func, NULL); } } return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); } #endif /* PyObjectGetMethod */ static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { PyObject *attr; #if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP PyTypeObject *tp = Py_TYPE(obj); PyObject *descr; descrgetfunc f = NULL; PyObject **dictptr, *dict; int meth_found = 0; assert (*method == NULL); if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { attr = __Pyx_PyObject_GetAttrStr(obj, name); goto try_unpack; } if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { return 0; } descr = _PyType_Lookup(tp, name); if (likely(descr != NULL)) { Py_INCREF(descr); #if PY_MAJOR_VERSION >= 3 #ifdef __Pyx_CyFunction_USED if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) #else if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) #endif #else #ifdef __Pyx_CyFunction_USED if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) #else if (likely(PyFunction_Check(descr))) #endif #endif { meth_found = 1; } else { f = Py_TYPE(descr)->tp_descr_get; if (f != NULL && PyDescr_IsData(descr)) { attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); Py_DECREF(descr); goto try_unpack; } } } dictptr = _PyObject_GetDictPtr(obj); if (dictptr != NULL && (dict = *dictptr) != NULL) { Py_INCREF(dict); attr = __Pyx_PyDict_GetItemStr(dict, name); if (attr != NULL) { Py_INCREF(attr); Py_DECREF(dict); Py_XDECREF(descr); goto try_unpack; } Py_DECREF(dict); } if (meth_found) { *method = descr; return 1; } if (f != NULL) { attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); Py_DECREF(descr); goto try_unpack; } if (descr != NULL) { *method = descr; return 0; } PyErr_Format(PyExc_AttributeError, #if PY_MAJOR_VERSION >= 3 "'%.50s' object has no attribute '%U'", tp->tp_name, name); #else "'%.50s' object has no attribute '%.400s'", tp->tp_name, PyString_AS_STRING(name)); #endif return 0; #else attr = __Pyx_PyObject_GetAttrStr(obj, name); goto try_unpack; #endif try_unpack: #if CYTHON_UNPACK_METHODS if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { PyObject *function = PyMethod_GET_FUNCTION(attr); Py_INCREF(function); Py_DECREF(attr); *method = function; return 1; } #endif *method = attr; return 0; } /* PyObjectCallMethod0 */ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { PyObject *method = NULL, *result = NULL; int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); if (likely(is_method)) { result = __Pyx_PyObject_CallOneArg(method, obj); Py_DECREF(method); return result; } if (unlikely(!method)) goto bad; result = __Pyx_PyObject_CallNoArg(method); Py_DECREF(method); bad: return result; } /* RaiseNeedMoreValuesToUnpack */ static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { PyErr_Format(PyExc_ValueError, "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", index, (index == 1) ? "" : "s"); } /* RaiseTooManyValuesToUnpack */ static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { PyErr_Format(PyExc_ValueError, "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); } /* UnpackItemEndCheck */ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { Py_DECREF(retval); __Pyx_RaiseTooManyValuesError(expected); return -1; } else { return __Pyx_IterFinish(); } return 0; } /* RaiseNoneIterError */ static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); } /* UnpackTupleError */ static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { if (t == Py_None) { __Pyx_RaiseNoneNotIterableError(); } else if (PyTuple_GET_SIZE(t) < index) { __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); } else { __Pyx_RaiseTooManyValuesError(index); } } /* UnpackTuple2 */ static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { PyObject *value1 = NULL, *value2 = NULL; #if CYTHON_COMPILING_IN_PYPY value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; #else value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); #endif if (decref_tuple) { Py_DECREF(tuple); } *pvalue1 = value1; *pvalue2 = value2; return 0; #if CYTHON_COMPILING_IN_PYPY bad: Py_XDECREF(value1); Py_XDECREF(value2); if (decref_tuple) { Py_XDECREF(tuple); } return -1; #endif } static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int has_known_size, int decref_tuple) { Py_ssize_t index; PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; iternextfunc iternext; iter = PyObject_GetIter(tuple); if (unlikely(!iter)) goto bad; if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } iternext = Py_TYPE(iter)->tp_iternext; value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; Py_DECREF(iter); *pvalue1 = value1; *pvalue2 = value2; return 0; unpacking_failed: if (!has_known_size && __Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); bad: Py_XDECREF(iter); Py_XDECREF(value1); Py_XDECREF(value2); if (decref_tuple) { Py_XDECREF(tuple); } return -1; } /* dict_iter */ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, Py_ssize_t* p_orig_length, int* p_source_is_dict) { is_dict = is_dict || likely(PyDict_CheckExact(iterable)); *p_source_is_dict = is_dict; if (is_dict) { #if !CYTHON_COMPILING_IN_PYPY *p_orig_length = PyDict_Size(iterable); Py_INCREF(iterable); return iterable; #elif PY_MAJOR_VERSION >= 3 static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; PyObject **pp = NULL; if (method_name) { const char *name = PyUnicode_AsUTF8(method_name); if (strcmp(name, "iteritems") == 0) pp = &py_items; else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; else if (strcmp(name, "itervalues") == 0) pp = &py_values; if (pp) { if (!*pp) { *pp = PyUnicode_FromString(name + 4); if (!*pp) return NULL; } method_name = *pp; } } #endif } *p_orig_length = 0; if (method_name) { PyObject* iter; iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); if (!iterable) return NULL; #if !CYTHON_COMPILING_IN_PYPY if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) return iterable; #endif iter = PyObject_GetIter(iterable); Py_DECREF(iterable); return iter; } return PyObject_GetIter(iterable); } static CYTHON_INLINE int __Pyx_dict_iter_next( PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { PyObject* next_item; #if !CYTHON_COMPILING_IN_PYPY if (source_is_dict) { PyObject *key, *value; if (unlikely(orig_length != PyDict_Size(iter_obj))) { PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); return -1; } if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { return 0; } if (pitem) { PyObject* tuple = PyTuple_New(2); if (unlikely(!tuple)) { return -1; } Py_INCREF(key); Py_INCREF(value); PyTuple_SET_ITEM(tuple, 0, key); PyTuple_SET_ITEM(tuple, 1, value); *pitem = tuple; } else { if (pkey) { Py_INCREF(key); *pkey = key; } if (pvalue) { Py_INCREF(value); *pvalue = value; } } return 1; } else if (PyTuple_CheckExact(iter_obj)) { Py_ssize_t pos = *ppos; if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; *ppos = pos + 1; next_item = PyTuple_GET_ITEM(iter_obj, pos); Py_INCREF(next_item); } else if (PyList_CheckExact(iter_obj)) { Py_ssize_t pos = *ppos; if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; *ppos = pos + 1; next_item = PyList_GET_ITEM(iter_obj, pos); Py_INCREF(next_item); } else #endif { next_item = PyIter_Next(iter_obj); if (unlikely(!next_item)) { return __Pyx_IterFinish(); } } if (pitem) { *pitem = next_item; } else if (pkey && pvalue) { if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) return -1; } else if (pkey) { *pkey = next_item; } else { *pvalue = next_item; } return 1; } /* PyObjectCall2Args */ static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { PyObject *args, *result = NULL; #if CYTHON_FAST_PYCALL if (PyFunction_Check(function)) { PyObject *args[2] = {arg1, arg2}; return __Pyx_PyFunction_FastCall(function, args, 2); } #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(function)) { PyObject *args[2] = {arg1, arg2}; return __Pyx_PyCFunction_FastCall(function, args, 2); } #endif args = PyTuple_New(2); if (unlikely(!args)) goto done; Py_INCREF(arg1); PyTuple_SET_ITEM(args, 0, arg1); Py_INCREF(arg2); PyTuple_SET_ITEM(args, 1, arg2); Py_INCREF(function); result = __Pyx_PyObject_Call(function, args, NULL); Py_DECREF(args); Py_DECREF(function); done: return result; } /* ArgTypeTest */ static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) { if (unlikely(!type)) { PyErr_SetString(PyExc_SystemError, "Missing type object"); return 0; } else if (exact) { #if PY_MAJOR_VERSION == 2 if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; #endif } else { if (likely(__Pyx_TypeCheck(obj, type))) return 1; } PyErr_Format(PyExc_TypeError, "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", name, type->tp_name, Py_TYPE(obj)->tp_name); return 0; } /* IsLittleEndian */ static CYTHON_INLINE int __Pyx_Is_Little_Endian(void) { union { uint32_t u32; uint8_t u8[4]; } S; S.u32 = 0x01020304; return S.u8[0] == 4; } /* BufferFormatCheck */ static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, __Pyx_BufFmt_StackElem* stack, __Pyx_TypeInfo* type) { stack[0].field = &ctx->root; stack[0].parent_offset = 0; ctx->root.type = type; ctx->root.name = "buffer dtype"; ctx->root.offset = 0; ctx->head = stack; ctx->head->field = &ctx->root; ctx->fmt_offset = 0; ctx->head->parent_offset = 0; ctx->new_packmode = '@'; ctx->enc_packmode = '@'; ctx->new_count = 1; ctx->enc_count = 0; ctx->enc_type = 0; ctx->is_complex = 0; ctx->is_valid_array = 0; ctx->struct_alignment = 0; while (type->typegroup == 'S') { ++ctx->head; ctx->head->field = type->fields; ctx->head->parent_offset = 0; type = type->fields->type; } } static int __Pyx_BufFmt_ParseNumber(const char** ts) { int count; const char* t = *ts; if (*t < '0' || *t > '9') { return -1; } else { count = *t++ - '0'; while (*t >= '0' && *t < '9') { count *= 10; count += *t++ - '0'; } } *ts = t; return count; } static int __Pyx_BufFmt_ExpectNumber(const char **ts) { int number = __Pyx_BufFmt_ParseNumber(ts); if (number == -1) PyErr_Format(PyExc_ValueError,\ "Does not understand character buffer dtype format string ('%c')", **ts); return number; } static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { PyErr_Format(PyExc_ValueError, "Unexpected format string character: '%c'", ch); } static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { switch (ch) { case 'c': return "'char'"; case 'b': return "'signed char'"; case 'B': return "'unsigned char'"; case 'h': return "'short'"; case 'H': return "'unsigned short'"; case 'i': return "'int'"; case 'I': return "'unsigned int'"; case 'l': return "'long'"; case 'L': return "'unsigned long'"; case 'q': return "'long long'"; case 'Q': return "'unsigned long long'"; case 'f': return (is_complex ? "'complex float'" : "'float'"); case 'd': return (is_complex ? "'complex double'" : "'double'"); case 'g': return (is_complex ? "'complex long double'" : "'long double'"); case 'T': return "a struct"; case 'O': return "Python object"; case 'P': return "a pointer"; case 's': case 'p': return "a string"; case 0: return "end"; default: return "unparseable format string"; } } static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return 2; case 'i': case 'I': case 'l': case 'L': return 4; case 'q': case 'Q': return 8; case 'f': return (is_complex ? 8 : 4); case 'd': return (is_complex ? 16 : 8); case 'g': { PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); return 0; } case 'O': case 'P': return sizeof(void*); default: __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { switch (ch) { case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(short); case 'i': case 'I': return sizeof(int); case 'l': case 'L': return sizeof(long); #ifdef HAVE_LONG_LONG case 'q': case 'Q': return sizeof(PY_LONG_LONG); #endif case 'f': return sizeof(float) * (is_complex ? 2 : 1); case 'd': return sizeof(double) * (is_complex ? 2 : 1); case 'g': return sizeof(long double) * (is_complex ? 2 : 1); case 'O': case 'P': return sizeof(void*); default: { __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } } typedef struct { char c; short x; } __Pyx_st_short; typedef struct { char c; int x; } __Pyx_st_int; typedef struct { char c; long x; } __Pyx_st_long; typedef struct { char c; float x; } __Pyx_st_float; typedef struct { char c; double x; } __Pyx_st_double; typedef struct { char c; long double x; } __Pyx_st_longdouble; typedef struct { char c; void *x; } __Pyx_st_void_p; #ifdef HAVE_LONG_LONG typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; #endif static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); #ifdef HAVE_LONG_LONG case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); #endif case 'f': return sizeof(__Pyx_st_float) - sizeof(float); case 'd': return sizeof(__Pyx_st_double) - sizeof(double); case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); default: __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } /* These are for computing the padding at the end of the struct to align on the first member of the struct. This will probably the same as above, but we don't have any guarantees. */ typedef struct { short x; char c; } __Pyx_pad_short; typedef struct { int x; char c; } __Pyx_pad_int; typedef struct { long x; char c; } __Pyx_pad_long; typedef struct { float x; char c; } __Pyx_pad_float; typedef struct { double x; char c; } __Pyx_pad_double; typedef struct { long double x; char c; } __Pyx_pad_longdouble; typedef struct { void *x; char c; } __Pyx_pad_void_p; #ifdef HAVE_LONG_LONG typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; #endif static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { switch (ch) { case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); #ifdef HAVE_LONG_LONG case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); #endif case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); default: __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { switch (ch) { case 'c': return 'H'; case 'b': case 'h': case 'i': case 'l': case 'q': case 's': case 'p': return 'I'; case 'B': case 'H': case 'I': case 'L': case 'Q': return 'U'; case 'f': case 'd': case 'g': return (is_complex ? 'C' : 'R'); case 'O': return 'O'; case 'P': return 'P'; default: { __Pyx_BufFmt_RaiseUnexpectedChar(ch); return 0; } } } static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { if (ctx->head == NULL || ctx->head->field == &ctx->root) { const char* expected; const char* quote; if (ctx->head == NULL) { expected = "end"; quote = ""; } else { expected = ctx->head->field->type->name; quote = "'"; } PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch, expected %s%s%s but got %s", quote, expected, quote, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); } else { __Pyx_StructField* field = ctx->head->field; __Pyx_StructField* parent = (ctx->head - 1)->field; PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), parent->type->name, field->name); } } static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { char group; size_t size, offset, arraysize = 1; if (ctx->enc_type == 0) return 0; if (ctx->head->field->type->arraysize[0]) { int i, ndim = 0; if (ctx->enc_type == 's' || ctx->enc_type == 'p') { ctx->is_valid_array = ctx->head->field->type->ndim == 1; ndim = 1; if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { PyErr_Format(PyExc_ValueError, "Expected a dimension of size %zu, got %zu", ctx->head->field->type->arraysize[0], ctx->enc_count); return -1; } } if (!ctx->is_valid_array) { PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", ctx->head->field->type->ndim, ndim); return -1; } for (i = 0; i < ctx->head->field->type->ndim; i++) { arraysize *= ctx->head->field->type->arraysize[i]; } ctx->is_valid_array = 0; ctx->enc_count = 1; } group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); do { __Pyx_StructField* field = ctx->head->field; __Pyx_TypeInfo* type = field->type; if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); } else { size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); } if (ctx->enc_packmode == '@') { size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); size_t align_mod_offset; if (align_at == 0) return -1; align_mod_offset = ctx->fmt_offset % align_at; if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; if (ctx->struct_alignment == 0) ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, ctx->is_complex); } if (type->size != size || type->typegroup != group) { if (type->typegroup == 'C' && type->fields != NULL) { size_t parent_offset = ctx->head->parent_offset + field->offset; ++ctx->head; ctx->head->field = type->fields; ctx->head->parent_offset = parent_offset; continue; } if ((type->typegroup == 'H' || group == 'H') && type->size == size) { } else { __Pyx_BufFmt_RaiseExpected(ctx); return -1; } } offset = ctx->head->parent_offset + field->offset; if (ctx->fmt_offset != offset) { PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); return -1; } ctx->fmt_offset += size; if (arraysize) ctx->fmt_offset += (arraysize - 1) * size; --ctx->enc_count; while (1) { if (field == &ctx->root) { ctx->head = NULL; if (ctx->enc_count != 0) { __Pyx_BufFmt_RaiseExpected(ctx); return -1; } break; } ctx->head->field = ++field; if (field->type == NULL) { --ctx->head; field = ctx->head->field; continue; } else if (field->type->typegroup == 'S') { size_t parent_offset = ctx->head->parent_offset + field->offset; if (field->type->fields->type == NULL) continue; field = field->type->fields; ++ctx->head; ctx->head->field = field; ctx->head->parent_offset = parent_offset; break; } else { break; } } } while (ctx->enc_count); ctx->enc_type = 0; ctx->is_complex = 0; return 0; } static PyObject * __pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) { const char *ts = *tsp; int i = 0, number; int ndim = ctx->head->field->type->ndim; ; ++ts; if (ctx->new_count != 1) { PyErr_SetString(PyExc_ValueError, "Cannot handle repeated arrays in format string"); return NULL; } if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; while (*ts && *ts != ')') { switch (*ts) { case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; default: break; } number = __Pyx_BufFmt_ExpectNumber(&ts); if (number == -1) return NULL; if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) return PyErr_Format(PyExc_ValueError, "Expected a dimension of size %zu, got %d", ctx->head->field->type->arraysize[i], number); if (*ts != ',' && *ts != ')') return PyErr_Format(PyExc_ValueError, "Expected a comma in format string, got '%c'", *ts); if (*ts == ',') ts++; i++; } if (i != ndim) return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", ctx->head->field->type->ndim, i); if (!*ts) { PyErr_SetString(PyExc_ValueError, "Unexpected end of format string, expected ')'"); return NULL; } ctx->is_valid_array = 1; ctx->new_count = 1; *tsp = ++ts; return Py_None; } static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { int got_Z = 0; while (1) { switch(*ts) { case 0: if (ctx->enc_type != 0 && ctx->head == NULL) { __Pyx_BufFmt_RaiseExpected(ctx); return NULL; } if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; if (ctx->head != NULL) { __Pyx_BufFmt_RaiseExpected(ctx); return NULL; } return ts; case ' ': case '\r': case '\n': ++ts; break; case '<': if (!__Pyx_Is_Little_Endian()) { PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); return NULL; } ctx->new_packmode = '='; ++ts; break; case '>': case '!': if (__Pyx_Is_Little_Endian()) { PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); return NULL; } ctx->new_packmode = '='; ++ts; break; case '=': case '@': case '^': ctx->new_packmode = *ts++; break; case 'T': { const char* ts_after_sub; size_t i, struct_count = ctx->new_count; size_t struct_alignment = ctx->struct_alignment; ctx->new_count = 1; ++ts; if (*ts != '{') { PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); return NULL; } if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->enc_type = 0; ctx->enc_count = 0; ctx->struct_alignment = 0; ++ts; ts_after_sub = ts; for (i = 0; i != struct_count; ++i) { ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); if (!ts_after_sub) return NULL; } ts = ts_after_sub; if (struct_alignment) ctx->struct_alignment = struct_alignment; } break; case '}': { size_t alignment = ctx->struct_alignment; ++ts; if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->enc_type = 0; if (alignment && ctx->fmt_offset % alignment) { ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); } } return ts; case 'x': if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->fmt_offset += ctx->new_count; ctx->new_count = 1; ctx->enc_count = 0; ctx->enc_type = 0; ctx->enc_packmode = ctx->new_packmode; ++ts; break; case 'Z': got_Z = 1; ++ts; if (*ts != 'f' && *ts != 'd' && *ts != 'g') { __Pyx_BufFmt_RaiseUnexpectedChar('Z'); return NULL; } CYTHON_FALLTHROUGH; case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': case 'l': case 'L': case 'q': case 'Q': case 'f': case 'd': case 'g': case 'O': case 'p': if (ctx->enc_type == *ts && got_Z == ctx->is_complex && ctx->enc_packmode == ctx->new_packmode) { ctx->enc_count += ctx->new_count; ctx->new_count = 1; got_Z = 0; ++ts; break; } CYTHON_FALLTHROUGH; case 's': if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; ctx->enc_count = ctx->new_count; ctx->enc_packmode = ctx->new_packmode; ctx->enc_type = *ts; ctx->is_complex = got_Z; ++ts; ctx->new_count = 1; got_Z = 0; break; case ':': ++ts; while(*ts != ':') ++ts; ++ts; break; case '(': if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; break; default: { int number = __Pyx_BufFmt_ExpectNumber(&ts); if (number == -1) return NULL; ctx->new_count = (size_t)number; } } } } /* BufferGetAndValidate */ static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { if (unlikely(info->buf == NULL)) return; if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; __Pyx_ReleaseBuffer(info); } static void __Pyx_ZeroBuffer(Py_buffer* buf) { buf->buf = NULL; buf->obj = NULL; buf->strides = __Pyx_zeros; buf->shape = __Pyx_zeros; buf->suboffsets = __Pyx_minusones; } static int __Pyx__GetBufferAndValidate( Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack) { buf->buf = NULL; if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) { __Pyx_ZeroBuffer(buf); return -1; } if (unlikely(buf->ndim != nd)) { PyErr_Format(PyExc_ValueError, "Buffer has wrong number of dimensions (expected %d, got %d)", nd, buf->ndim); goto fail; } if (!cast) { __Pyx_BufFmt_Context ctx; __Pyx_BufFmt_Init(&ctx, stack, dtype); if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; } if (unlikely((unsigned)buf->itemsize != dtype->size)) { PyErr_Format(PyExc_ValueError, "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", buf->itemsize, (buf->itemsize > 1) ? "s" : "", dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); goto fail; } if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; return 0; fail:; __Pyx_SafeReleaseBuffer(buf); return -1; } /* None */ static CYTHON_INLINE long __Pyx_div_long(long a, long b) { long q = a / b; long r = a - q*b; q -= ((r != 0) & ((r ^ b) < 0)); return q; } /* GetModuleGlobalName */ #if CYTHON_USE_DICT_VERSIONS static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) #else static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) #endif { PyObject *result; #if !CYTHON_AVOID_BORROWED_REFS #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) if (likely(result)) { return __Pyx_NewRef(result); } else if (unlikely(PyErr_Occurred())) { return NULL; } #else result = PyDict_GetItem(__pyx_d, name); __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) if (likely(result)) { return __Pyx_NewRef(result); } #endif #else result = PyObject_GetItem(__pyx_d, name); __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) if (likely(result)) { return __Pyx_NewRef(result); } PyErr_Clear(); #endif return __Pyx_GetBuiltinName(name); } /* ExtTypeTest */ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { if (unlikely(!type)) { PyErr_SetString(PyExc_SystemError, "Missing type object"); return 0; } if (likely(__Pyx_TypeCheck(obj, type))) return 1; PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", Py_TYPE(obj)->tp_name, type->tp_name); return 0; } /* ObjectGetItem */ #if CYTHON_USE_TYPE_SLOTS static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { PyObject *runerr; Py_ssize_t key_value; PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; if (unlikely(!(m && m->sq_item))) { PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); return NULL; } key_value = __Pyx_PyIndex_AsSsize_t(index); if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); } if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { PyErr_Clear(); PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); } return NULL; } static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; if (likely(m && m->mp_subscript)) { return m->mp_subscript(obj, key); } return __Pyx_PyObject_GetIndex(obj, key); } #endif /* GetTopmostException */ #if CYTHON_USE_EXC_INFO_STACK static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate) { _PyErr_StackItem *exc_info = tstate->exc_info; while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && exc_info->previous_item != NULL) { exc_info = exc_info->previous_item; } return exc_info; } #endif /* SaveResetException */ #if CYTHON_FAST_THREAD_STATE static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_USE_EXC_INFO_STACK _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); *type = exc_info->exc_type; *value = exc_info->exc_value; *tb = exc_info->exc_traceback; #else *type = tstate->exc_type; *value = tstate->exc_value; *tb = tstate->exc_traceback; #endif Py_XINCREF(*type); Py_XINCREF(*value); Py_XINCREF(*tb); } static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { PyObject *tmp_type, *tmp_value, *tmp_tb; #if CYTHON_USE_EXC_INFO_STACK _PyErr_StackItem *exc_info = tstate->exc_info; tmp_type = exc_info->exc_type; tmp_value = exc_info->exc_value; tmp_tb = exc_info->exc_traceback; exc_info->exc_type = type; exc_info->exc_value = value; exc_info->exc_traceback = tb; #else tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = type; tstate->exc_value = value; tstate->exc_traceback = tb; #endif Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); } #endif /* PyErrExceptionMatches */ #if CYTHON_FAST_THREAD_STATE static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { Py_ssize_t i, n; n = PyTuple_GET_SIZE(tuple); #if PY_MAJOR_VERSION >= 3 for (i=0; icurexc_type; if (exc_type == err) return 1; if (unlikely(!exc_type)) return 0; if (unlikely(PyTuple_Check(err))) return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); } #endif /* GetException */ #if CYTHON_FAST_THREAD_STATE static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) #else static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) #endif { PyObject *local_type, *local_value, *local_tb; #if CYTHON_FAST_THREAD_STATE PyObject *tmp_type, *tmp_value, *tmp_tb; local_type = tstate->curexc_type; local_value = tstate->curexc_value; local_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; #else PyErr_Fetch(&local_type, &local_value, &local_tb); #endif PyErr_NormalizeException(&local_type, &local_value, &local_tb); #if CYTHON_FAST_THREAD_STATE if (unlikely(tstate->curexc_type)) #else if (unlikely(PyErr_Occurred())) #endif goto bad; #if PY_MAJOR_VERSION >= 3 if (local_tb) { if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) goto bad; } #endif Py_XINCREF(local_tb); Py_XINCREF(local_type); Py_XINCREF(local_value); *type = local_type; *value = local_value; *tb = local_tb; #if CYTHON_FAST_THREAD_STATE #if CYTHON_USE_EXC_INFO_STACK { _PyErr_StackItem *exc_info = tstate->exc_info; tmp_type = exc_info->exc_type; tmp_value = exc_info->exc_value; tmp_tb = exc_info->exc_traceback; exc_info->exc_type = local_type; exc_info->exc_value = local_value; exc_info->exc_traceback = local_tb; } #else tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = local_type; tstate->exc_value = local_value; tstate->exc_traceback = local_tb; #endif Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); #else PyErr_SetExcInfo(local_type, local_value, local_tb); #endif return 0; bad: *type = 0; *value = 0; *tb = 0; Py_XDECREF(local_type); Py_XDECREF(local_value); Py_XDECREF(local_tb); return -1; } /* BytesEquals */ static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { #if CYTHON_COMPILING_IN_PYPY return PyObject_RichCompareBool(s1, s2, equals); #else if (s1 == s2) { return (equals == Py_EQ); } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { const char *ps1, *ps2; Py_ssize_t length = PyBytes_GET_SIZE(s1); if (length != PyBytes_GET_SIZE(s2)) return (equals == Py_NE); ps1 = PyBytes_AS_STRING(s1); ps2 = PyBytes_AS_STRING(s2); if (ps1[0] != ps2[0]) { return (equals == Py_NE); } else if (length == 1) { return (equals == Py_EQ); } else { int result; #if CYTHON_USE_UNICODE_INTERNALS Py_hash_t hash1, hash2; hash1 = ((PyBytesObject*)s1)->ob_shash; hash2 = ((PyBytesObject*)s2)->ob_shash; if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { return (equals == Py_NE); } #endif result = memcmp(ps1, ps2, (size_t)length); return (equals == Py_EQ) ? (result == 0) : (result != 0); } } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { return (equals == Py_NE); } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { return (equals == Py_NE); } else { int result; PyObject* py_result = PyObject_RichCompare(s1, s2, equals); if (!py_result) return -1; result = __Pyx_PyObject_IsTrue(py_result); Py_DECREF(py_result); return result; } #endif } /* UnicodeEquals */ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { #if CYTHON_COMPILING_IN_PYPY return PyObject_RichCompareBool(s1, s2, equals); #else #if PY_MAJOR_VERSION < 3 PyObject* owned_ref = NULL; #endif int s1_is_unicode, s2_is_unicode; if (s1 == s2) { goto return_eq; } s1_is_unicode = PyUnicode_CheckExact(s1); s2_is_unicode = PyUnicode_CheckExact(s2); #if PY_MAJOR_VERSION < 3 if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { owned_ref = PyUnicode_FromObject(s2); if (unlikely(!owned_ref)) return -1; s2 = owned_ref; s2_is_unicode = 1; } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { owned_ref = PyUnicode_FromObject(s1); if (unlikely(!owned_ref)) return -1; s1 = owned_ref; s1_is_unicode = 1; } else if (((!s2_is_unicode) & (!s1_is_unicode))) { return __Pyx_PyBytes_Equals(s1, s2, equals); } #endif if (s1_is_unicode & s2_is_unicode) { Py_ssize_t length; int kind; void *data1, *data2; if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) return -1; length = __Pyx_PyUnicode_GET_LENGTH(s1); if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { goto return_ne; } #if CYTHON_USE_UNICODE_INTERNALS { Py_hash_t hash1, hash2; #if CYTHON_PEP393_ENABLED hash1 = ((PyASCIIObject*)s1)->hash; hash2 = ((PyASCIIObject*)s2)->hash; #else hash1 = ((PyUnicodeObject*)s1)->hash; hash2 = ((PyUnicodeObject*)s2)->hash; #endif if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { goto return_ne; } } #endif kind = __Pyx_PyUnicode_KIND(s1); if (kind != __Pyx_PyUnicode_KIND(s2)) { goto return_ne; } data1 = __Pyx_PyUnicode_DATA(s1); data2 = __Pyx_PyUnicode_DATA(s2); if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { goto return_ne; } else if (length == 1) { goto return_eq; } else { int result = memcmp(data1, data2, (size_t)(length * kind)); #if PY_MAJOR_VERSION < 3 Py_XDECREF(owned_ref); #endif return (equals == Py_EQ) ? (result == 0) : (result != 0); } } else if ((s1 == Py_None) & s2_is_unicode) { goto return_ne; } else if ((s2 == Py_None) & s1_is_unicode) { goto return_ne; } else { int result; PyObject* py_result = PyObject_RichCompare(s1, s2, equals); #if PY_MAJOR_VERSION < 3 Py_XDECREF(owned_ref); #endif if (!py_result) return -1; result = __Pyx_PyObject_IsTrue(py_result); Py_DECREF(py_result); return result; } return_eq: #if PY_MAJOR_VERSION < 3 Py_XDECREF(owned_ref); #endif return (equals == Py_EQ); return_ne: #if PY_MAJOR_VERSION < 3 Py_XDECREF(owned_ref); #endif return (equals == Py_NE); #endif } /* None */ static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) { Py_ssize_t q = a / b; Py_ssize_t r = a - q*b; q -= ((r != 0) & ((r ^ b) < 0)); return q; } /* GetAttr */ static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { #if CYTHON_USE_TYPE_SLOTS #if PY_MAJOR_VERSION >= 3 if (likely(PyUnicode_Check(n))) #else if (likely(PyString_Check(n))) #endif return __Pyx_PyObject_GetAttrStr(o, n); #endif return PyObject_GetAttr(o, n); } /* decode_c_string */ static CYTHON_INLINE PyObject* __Pyx_decode_c_string( const char* cstring, Py_ssize_t start, Py_ssize_t stop, const char* encoding, const char* errors, PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { Py_ssize_t length; if (unlikely((start < 0) | (stop < 0))) { size_t slen = strlen(cstring); if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { PyErr_SetString(PyExc_OverflowError, "c-string too long to convert to Python"); return NULL; } length = (Py_ssize_t) slen; if (start < 0) { start += length; if (start < 0) start = 0; } if (stop < 0) stop += length; } length = stop - start; if (unlikely(length <= 0)) return PyUnicode_FromUnicode(NULL, 0); cstring += start; if (decode_func) { return decode_func(cstring, length, errors); } else { return PyUnicode_Decode(cstring, length, encoding, errors); } } /* GetAttr3 */ static PyObject *__Pyx_GetAttr3Default(PyObject *d) { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) return NULL; __Pyx_PyErr_Clear(); Py_INCREF(d); return d; } static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { PyObject *r = __Pyx_GetAttr(o, n); return (likely(r)) ? r : __Pyx_GetAttr3Default(d); } /* SwapException */ #if CYTHON_FAST_THREAD_STATE static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { PyObject *tmp_type, *tmp_value, *tmp_tb; #if CYTHON_USE_EXC_INFO_STACK _PyErr_StackItem *exc_info = tstate->exc_info; tmp_type = exc_info->exc_type; tmp_value = exc_info->exc_value; tmp_tb = exc_info->exc_traceback; exc_info->exc_type = *type; exc_info->exc_value = *value; exc_info->exc_traceback = *tb; #else tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = *type; tstate->exc_value = *value; tstate->exc_traceback = *tb; #endif *type = tmp_type; *value = tmp_value; *tb = tmp_tb; } #else static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { PyObject *tmp_type, *tmp_value, *tmp_tb; PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); PyErr_SetExcInfo(*type, *value, *tb); *type = tmp_type; *value = tmp_value; *tb = tmp_tb; } #endif /* Import */ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { PyObject *empty_list = 0; PyObject *module = 0; PyObject *global_dict = 0; PyObject *empty_dict = 0; PyObject *list; #if PY_MAJOR_VERSION < 3 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); if (!py_import) goto bad; #endif if (from_list) list = from_list; else { empty_list = PyList_New(0); if (!empty_list) goto bad; list = empty_list; } global_dict = PyModule_GetDict(__pyx_m); if (!global_dict) goto bad; empty_dict = PyDict_New(); if (!empty_dict) goto bad; { #if PY_MAJOR_VERSION >= 3 if (level == -1) { if (strchr(__Pyx_MODULE_NAME, '.')) { module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, 1); if (!module) { if (!PyErr_ExceptionMatches(PyExc_ImportError)) goto bad; PyErr_Clear(); } } level = 0; } #endif if (!module) { #if PY_MAJOR_VERSION < 3 PyObject *py_level = PyInt_FromLong(level); if (!py_level) goto bad; module = PyObject_CallFunctionObjArgs(py_import, name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( name, global_dict, empty_dict, list, level); #endif } } bad: #if PY_MAJOR_VERSION < 3 Py_XDECREF(py_import); #endif Py_XDECREF(empty_list); Py_XDECREF(empty_dict); return module; } /* FastTypeChecks */ #if CYTHON_COMPILING_IN_CPYTHON static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { while (a) { a = a->tp_base; if (a == b) return 1; } return b == &PyBaseObject_Type; } static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { PyObject *mro; if (a == b) return 1; mro = a->tp_mro; if (likely(mro)) { Py_ssize_t i, n; n = PyTuple_GET_SIZE(mro); for (i = 0; i < n; i++) { if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) return 1; } return 0; } return __Pyx_InBases(a, b); } #if PY_MAJOR_VERSION == 2 static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { PyObject *exception, *value, *tb; int res; __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign __Pyx_ErrFetch(&exception, &value, &tb); res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; if (unlikely(res == -1)) { PyErr_WriteUnraisable(err); res = 0; } if (!res) { res = PyObject_IsSubclass(err, exc_type2); if (unlikely(res == -1)) { PyErr_WriteUnraisable(err); res = 0; } } __Pyx_ErrRestore(exception, value, tb); return res; } #else static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; if (!res) { res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); } return res; } #endif static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { Py_ssize_t i, n; assert(PyExceptionClass_Check(exc_type)); n = PyTuple_GET_SIZE(tuple); #if PY_MAJOR_VERSION >= 3 for (i=0; i= 0 || (x^b) >= 0)) return PyInt_FromLong(x); return PyLong_Type.tp_as_number->nb_add(op1, op2); } #endif #if CYTHON_USE_PYLONG_INTERNALS if (likely(PyLong_CheckExact(op1))) { const long b = intval; long a, x; #ifdef HAVE_LONG_LONG const PY_LONG_LONG llb = intval; PY_LONG_LONG lla, llx; #endif const digit* digits = ((PyLongObject*)op1)->ob_digit; const Py_ssize_t size = Py_SIZE(op1); if (likely(__Pyx_sst_abs(size) <= 1)) { a = likely(size) ? digits[0] : 0; if (size == -1) a = -a; } else { switch (size) { case -2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; #endif } CYTHON_FALLTHROUGH; default: return PyLong_Type.tp_as_number->nb_add(op1, op2); } } x = a + b; return PyLong_FromLong(x); #ifdef HAVE_LONG_LONG long_long: llx = lla + llb; return PyLong_FromLongLong(llx); #endif } #endif if (PyFloat_CheckExact(op1)) { const long b = intval; double a = PyFloat_AS_DOUBLE(op1); double result; PyFPE_START_PROTECT("add", return NULL) result = ((double)a) + (double)b; PyFPE_END_PROTECT(result) return PyFloat_FromDouble(result); } return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); } #endif /* None */ static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); } /* WriteUnraisableException */ static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, int full_traceback, CYTHON_UNUSED int nogil) { PyObject *old_exc, *old_val, *old_tb; PyObject *ctx; __Pyx_PyThreadState_declare #ifdef WITH_THREAD PyGILState_STATE state; if (nogil) state = PyGILState_Ensure(); #ifdef _MSC_VER else state = (PyGILState_STATE)-1; #endif #endif __Pyx_PyThreadState_assign __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); if (full_traceback) { Py_XINCREF(old_exc); Py_XINCREF(old_val); Py_XINCREF(old_tb); __Pyx_ErrRestore(old_exc, old_val, old_tb); PyErr_PrintEx(1); } #if PY_MAJOR_VERSION < 3 ctx = PyString_FromString(name); #else ctx = PyUnicode_FromString(name); #endif __Pyx_ErrRestore(old_exc, old_val, old_tb); if (!ctx) { PyErr_WriteUnraisable(Py_None); } else { PyErr_WriteUnraisable(ctx); Py_DECREF(ctx); } #ifdef WITH_THREAD if (nogil) PyGILState_Release(state); #endif } /* ImportFrom */ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { PyErr_Format(PyExc_ImportError, #if PY_MAJOR_VERSION < 3 "cannot import name %.230s", PyString_AS_STRING(name)); #else "cannot import name %S", name); #endif } return value; } /* HasAttr */ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { PyObject *r; if (unlikely(!__Pyx_PyBaseString_Check(n))) { PyErr_SetString(PyExc_TypeError, "hasattr(): attribute name must be string"); return -1; } r = __Pyx_GetAttr(o, n); if (unlikely(!r)) { PyErr_Clear(); return 0; } else { Py_DECREF(r); return 1; } } /* PyObject_GenericGetAttrNoDict */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { PyErr_Format(PyExc_AttributeError, #if PY_MAJOR_VERSION >= 3 "'%.50s' object has no attribute '%U'", tp->tp_name, attr_name); #else "'%.50s' object has no attribute '%.400s'", tp->tp_name, PyString_AS_STRING(attr_name)); #endif return NULL; } static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { PyObject *descr; PyTypeObject *tp = Py_TYPE(obj); if (unlikely(!PyString_Check(attr_name))) { return PyObject_GenericGetAttr(obj, attr_name); } assert(!tp->tp_dictoffset); descr = _PyType_Lookup(tp, attr_name); if (unlikely(!descr)) { return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); } Py_INCREF(descr); #if PY_MAJOR_VERSION < 3 if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) #endif { descrgetfunc f = Py_TYPE(descr)->tp_descr_get; if (unlikely(f)) { PyObject *res = f(descr, obj, (PyObject *)tp); Py_DECREF(descr); return res; } } return descr; } #endif /* PyObject_GenericGetAttr */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { return PyObject_GenericGetAttr(obj, attr_name); } return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); } #endif /* SetVTable */ static int __Pyx_SetVtable(PyObject *dict, void *vtable) { #if PY_VERSION_HEX >= 0x02070000 PyObject *ob = PyCapsule_New(vtable, 0, 0); #else PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); #endif if (!ob) goto bad; if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) goto bad; Py_DECREF(ob); return 0; bad: Py_XDECREF(ob); return -1; } /* SetupReduce */ static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { int ret; PyObject *name_attr; name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2); if (likely(name_attr)) { ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); } else { ret = -1; } if (unlikely(ret < 0)) { PyErr_Clear(); ret = 0; } Py_XDECREF(name_attr); return ret; } static int __Pyx_setup_reduce(PyObject* type_obj) { int ret = 0; PyObject *object_reduce = NULL; PyObject *object_reduce_ex = NULL; PyObject *reduce = NULL; PyObject *reduce_ex = NULL; PyObject *reduce_cython = NULL; PyObject *setstate = NULL; PyObject *setstate_cython = NULL; #if CYTHON_USE_PYTYPE_LOOKUP if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD; #else if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD; #endif #if CYTHON_USE_PYTYPE_LOOKUP object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; #else object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD; #endif reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD; if (reduce_ex == object_reduce_ex) { #if CYTHON_USE_PYTYPE_LOOKUP object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; #else object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD; #endif reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD; if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD; ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD; ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD; setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); if (!setstate) PyErr_Clear(); if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD; ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD; ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD; } PyType_Modified((PyTypeObject*)type_obj); } } goto GOOD; BAD: if (!PyErr_Occurred()) PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); ret = -1; GOOD: #if !CYTHON_USE_PYTYPE_LOOKUP Py_XDECREF(object_reduce); Py_XDECREF(object_reduce_ex); #endif Py_XDECREF(reduce); Py_XDECREF(reduce_ex); Py_XDECREF(reduce_cython); Py_XDECREF(setstate); Py_XDECREF(setstate_cython); return ret; } /* TypeImport */ #ifndef __PYX_HAVE_RT_ImportType #define __PYX_HAVE_RT_ImportType static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size) { PyObject *result = 0; char warning[200]; Py_ssize_t basicsize; #ifdef Py_LIMITED_API PyObject *py_basicsize; #endif result = PyObject_GetAttrString(module, class_name); if (!result) goto bad; if (!PyType_Check(result)) { PyErr_Format(PyExc_TypeError, "%.200s.%.200s is not a type object", module_name, class_name); goto bad; } #ifndef Py_LIMITED_API basicsize = ((PyTypeObject *)result)->tp_basicsize; #else py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); if (!py_basicsize) goto bad; basicsize = PyLong_AsSsize_t(py_basicsize); Py_DECREF(py_basicsize); py_basicsize = 0; if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) goto bad; #endif if ((size_t)basicsize < size) { PyErr_Format(PyExc_ValueError, "%.200s.%.200s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", module_name, class_name, size, basicsize); goto bad; } if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { PyErr_Format(PyExc_ValueError, "%.200s.%.200s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", module_name, class_name, size, basicsize); goto bad; } else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { PyOS_snprintf(warning, sizeof(warning), "%s.%s size changed, may indicate binary incompatibility. " "Expected %zd from C header, got %zd from PyObject", module_name, class_name, size, basicsize); if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; } return (PyTypeObject *)result; bad: Py_XDECREF(result); return NULL; } #endif /* FetchCommonType */ static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { PyObject* fake_module; PyTypeObject* cached_type = NULL; fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); if (!fake_module) return NULL; Py_INCREF(fake_module); cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); if (cached_type) { if (!PyType_Check((PyObject*)cached_type)) { PyErr_Format(PyExc_TypeError, "Shared Cython type %.200s is not a type object", type->tp_name); goto bad; } if (cached_type->tp_basicsize != type->tp_basicsize) { PyErr_Format(PyExc_TypeError, "Shared Cython type %.200s has the wrong size, try recompiling", type->tp_name); goto bad; } } else { if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; PyErr_Clear(); if (PyType_Ready(type) < 0) goto bad; if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) goto bad; Py_INCREF(type); cached_type = type; } done: Py_DECREF(fake_module); return cached_type; bad: Py_XDECREF(cached_type); cached_type = NULL; goto done; } /* CythonFunction */ #include static PyObject * __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) { if (unlikely(op->func_doc == NULL)) { if (op->func.m_ml->ml_doc) { #if PY_MAJOR_VERSION >= 3 op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); #else op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); #endif if (unlikely(op->func_doc == NULL)) return NULL; } else { Py_INCREF(Py_None); return Py_None; } } Py_INCREF(op->func_doc); return op->func_doc; } static int __Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) { PyObject *tmp = op->func_doc; if (value == NULL) { value = Py_None; } Py_INCREF(value); op->func_doc = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { if (unlikely(op->func_name == NULL)) { #if PY_MAJOR_VERSION >= 3 op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); #else op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); #endif if (unlikely(op->func_name == NULL)) return NULL; } Py_INCREF(op->func_name); return op->func_name; } static int __Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) { PyObject *tmp; #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) #else if (unlikely(value == NULL || !PyString_Check(value))) #endif { PyErr_SetString(PyExc_TypeError, "__name__ must be set to a string object"); return -1; } tmp = op->func_name; Py_INCREF(value); op->func_name = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { Py_INCREF(op->func_qualname); return op->func_qualname; } static int __Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) { PyObject *tmp; #if PY_MAJOR_VERSION >= 3 if (unlikely(value == NULL || !PyUnicode_Check(value))) #else if (unlikely(value == NULL || !PyString_Check(value))) #endif { PyErr_SetString(PyExc_TypeError, "__qualname__ must be set to a string object"); return -1; } tmp = op->func_qualname; Py_INCREF(value); op->func_qualname = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) { PyObject *self; self = m->func_closure; if (self == NULL) self = Py_None; Py_INCREF(self); return self; } static PyObject * __Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { if (unlikely(op->func_dict == NULL)) { op->func_dict = PyDict_New(); if (unlikely(op->func_dict == NULL)) return NULL; } Py_INCREF(op->func_dict); return op->func_dict; } static int __Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) { PyObject *tmp; if (unlikely(value == NULL)) { PyErr_SetString(PyExc_TypeError, "function's dictionary may not be deleted"); return -1; } if (unlikely(!PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, "setting function's dictionary to a non-dict"); return -1; } tmp = op->func_dict; Py_INCREF(value); op->func_dict = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { Py_INCREF(op->func_globals); return op->func_globals; } static PyObject * __Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { Py_INCREF(Py_None); return Py_None; } static PyObject * __Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { PyObject* result = (op->func_code) ? op->func_code : Py_None; Py_INCREF(result); return result; } static int __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { int result = 0; PyObject *res = op->defaults_getter((PyObject *) op); if (unlikely(!res)) return -1; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS op->defaults_tuple = PyTuple_GET_ITEM(res, 0); Py_INCREF(op->defaults_tuple); op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); Py_INCREF(op->defaults_kwdict); #else op->defaults_tuple = PySequence_ITEM(res, 0); if (unlikely(!op->defaults_tuple)) result = -1; else { op->defaults_kwdict = PySequence_ITEM(res, 1); if (unlikely(!op->defaults_kwdict)) result = -1; } #endif Py_DECREF(res); return result; } static int __Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { PyObject* tmp; if (!value) { value = Py_None; } else if (value != Py_None && !PyTuple_Check(value)) { PyErr_SetString(PyExc_TypeError, "__defaults__ must be set to a tuple object"); return -1; } Py_INCREF(value); tmp = op->defaults_tuple; op->defaults_tuple = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { PyObject* result = op->defaults_tuple; if (unlikely(!result)) { if (op->defaults_getter) { if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; result = op->defaults_tuple; } else { result = Py_None; } } Py_INCREF(result); return result; } static int __Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { PyObject* tmp; if (!value) { value = Py_None; } else if (value != Py_None && !PyDict_Check(value)) { PyErr_SetString(PyExc_TypeError, "__kwdefaults__ must be set to a dict object"); return -1; } Py_INCREF(value); tmp = op->defaults_kwdict; op->defaults_kwdict = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { PyObject* result = op->defaults_kwdict; if (unlikely(!result)) { if (op->defaults_getter) { if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; result = op->defaults_kwdict; } else { result = Py_None; } } Py_INCREF(result); return result; } static int __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { PyObject* tmp; if (!value || value == Py_None) { value = NULL; } else if (!PyDict_Check(value)) { PyErr_SetString(PyExc_TypeError, "__annotations__ must be set to a dict object"); return -1; } Py_XINCREF(value); tmp = op->func_annotations; op->func_annotations = value; Py_XDECREF(tmp); return 0; } static PyObject * __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { PyObject* result = op->func_annotations; if (unlikely(!result)) { result = PyDict_New(); if (unlikely(!result)) return NULL; op->func_annotations = result; } Py_INCREF(result); return result; } static PyGetSetDef __pyx_CyFunction_getsets[] = { {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, {0, 0, 0, 0, 0} }; static PyMemberDef __pyx_CyFunction_members[] = { {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0}, {0, 0, 0, 0, 0} }; static PyObject * __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) { #if PY_MAJOR_VERSION >= 3 return PyUnicode_FromString(m->func.m_ml->ml_name); #else return PyString_FromString(m->func.m_ml->ml_name); #endif } static PyMethodDef __pyx_CyFunction_methods[] = { {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, {0, 0, 0, 0} }; #if PY_VERSION_HEX < 0x030500A0 #define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) #else #define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist) #endif static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); if (op == NULL) return NULL; op->flags = flags; __Pyx_CyFunction_weakreflist(op) = NULL; op->func.m_ml = ml; op->func.m_self = (PyObject *) op; Py_XINCREF(closure); op->func_closure = closure; Py_XINCREF(module); op->func.m_module = module; op->func_dict = NULL; op->func_name = NULL; Py_INCREF(qualname); op->func_qualname = qualname; op->func_doc = NULL; op->func_classobj = NULL; op->func_globals = globals; Py_INCREF(op->func_globals); Py_XINCREF(code); op->func_code = code; op->defaults_pyobjects = 0; op->defaults = NULL; op->defaults_tuple = NULL; op->defaults_kwdict = NULL; op->defaults_getter = NULL; op->func_annotations = NULL; PyObject_GC_Track(op); return (PyObject *) op; } static int __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) { Py_CLEAR(m->func_closure); Py_CLEAR(m->func.m_module); Py_CLEAR(m->func_dict); Py_CLEAR(m->func_name); Py_CLEAR(m->func_qualname); Py_CLEAR(m->func_doc); Py_CLEAR(m->func_globals); Py_CLEAR(m->func_code); Py_CLEAR(m->func_classobj); Py_CLEAR(m->defaults_tuple); Py_CLEAR(m->defaults_kwdict); Py_CLEAR(m->func_annotations); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; for (i = 0; i < m->defaults_pyobjects; i++) Py_XDECREF(pydefaults[i]); PyObject_Free(m->defaults); m->defaults = NULL; } return 0; } static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) { if (__Pyx_CyFunction_weakreflist(m) != NULL) PyObject_ClearWeakRefs((PyObject *) m); __Pyx_CyFunction_clear(m); PyObject_GC_Del(m); } static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) { PyObject_GC_UnTrack(m); __Pyx__CyFunction_dealloc(m); } static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) { Py_VISIT(m->func_closure); Py_VISIT(m->func.m_module); Py_VISIT(m->func_dict); Py_VISIT(m->func_name); Py_VISIT(m->func_qualname); Py_VISIT(m->func_doc); Py_VISIT(m->func_globals); Py_VISIT(m->func_code); Py_VISIT(m->func_classobj); Py_VISIT(m->defaults_tuple); Py_VISIT(m->defaults_kwdict); if (m->defaults) { PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); int i; for (i = 0; i < m->defaults_pyobjects; i++) Py_VISIT(pydefaults[i]); } return 0; } static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { Py_INCREF(func); return func; } if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { if (type == NULL) type = (PyObject *)(Py_TYPE(obj)); return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); } if (obj == Py_None) obj = NULL; return __Pyx_PyMethod_New(func, obj, type); } static PyObject* __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) { #if PY_MAJOR_VERSION >= 3 return PyUnicode_FromFormat("", op->func_qualname, (void *)op); #else return PyString_FromFormat("", PyString_AsString(op->func_qualname), (void *)op); #endif } static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { PyCFunctionObject* f = (PyCFunctionObject*)func; PyCFunction meth = f->m_ml->ml_meth; Py_ssize_t size; switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { case METH_VARARGS: if (likely(kw == NULL || PyDict_Size(kw) == 0)) return (*meth)(self, arg); break; case METH_VARARGS | METH_KEYWORDS: return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); case METH_NOARGS: if (likely(kw == NULL || PyDict_Size(kw) == 0)) { size = PyTuple_GET_SIZE(arg); if (likely(size == 0)) return (*meth)(self, NULL); PyErr_Format(PyExc_TypeError, "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", f->m_ml->ml_name, size); return NULL; } break; case METH_O: if (likely(kw == NULL || PyDict_Size(kw) == 0)) { size = PyTuple_GET_SIZE(arg); if (likely(size == 1)) { PyObject *result, *arg0; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS arg0 = PyTuple_GET_ITEM(arg, 0); #else arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; #endif result = (*meth)(self, arg0); #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_DECREF(arg0); #endif return result; } PyErr_Format(PyExc_TypeError, "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", f->m_ml->ml_name, size); return NULL; } break; default: PyErr_SetString(PyExc_SystemError, "Bad call flags in " "__Pyx_CyFunction_Call. METH_OLDARGS is no " "longer supported!"); return NULL; } PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", f->m_ml->ml_name); return NULL; } static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw); } static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { PyObject *result; __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { Py_ssize_t argc; PyObject *new_args; PyObject *self; argc = PyTuple_GET_SIZE(args); new_args = PyTuple_GetSlice(args, 1, argc); if (unlikely(!new_args)) return NULL; self = PyTuple_GetItem(args, 0); if (unlikely(!self)) { Py_DECREF(new_args); return NULL; } result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); Py_DECREF(new_args); } else { result = __Pyx_CyFunction_Call(func, args, kw); } return result; } static PyTypeObject __pyx_CyFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) "cython_function_or_method", sizeof(__pyx_CyFunctionObject), 0, (destructor) __Pyx_CyFunction_dealloc, 0, 0, 0, #if PY_MAJOR_VERSION < 3 0, #else 0, #endif (reprfunc) __Pyx_CyFunction_repr, 0, 0, 0, 0, __Pyx_CyFunction_CallAsMethod, 0, 0, 0, 0, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, 0, (traverseproc) __Pyx_CyFunction_traverse, (inquiry) __Pyx_CyFunction_clear, 0, #if PY_VERSION_HEX < 0x030500A0 offsetof(__pyx_CyFunctionObject, func_weakreflist), #else offsetof(PyCFunctionObject, m_weakreflist), #endif 0, 0, __pyx_CyFunction_methods, __pyx_CyFunction_members, __pyx_CyFunction_getsets, 0, 0, __Pyx_CyFunction_descr_get, 0, offsetof(__pyx_CyFunctionObject, func_dict), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #if PY_VERSION_HEX >= 0x030400a1 0, #endif }; static int __pyx_CyFunction_init(void) { __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); if (unlikely(__pyx_CyFunctionType == NULL)) { return -1; } return 0; } static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults = PyObject_Malloc(size); if (unlikely(!m->defaults)) return PyErr_NoMemory(); memset(m->defaults, 0, size); m->defaults_pyobjects = pyobjects; return m->defaults; } static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults_tuple = tuple; Py_INCREF(tuple); } static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->defaults_kwdict = dict; Py_INCREF(dict); } static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; m->func_annotations = dict; Py_INCREF(dict); } /* FusedFunction */ static PyObject * __pyx_FusedFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject *qualname, PyObject *self, PyObject *module, PyObject *globals, PyObject *code) { __pyx_FusedFunctionObject *fusedfunc = (__pyx_FusedFunctionObject *) __Pyx_CyFunction_New(type, ml, flags, qualname, self, module, globals, code); if (!fusedfunc) return NULL; fusedfunc->__signatures__ = NULL; fusedfunc->type = NULL; fusedfunc->self = NULL; return (PyObject *) fusedfunc; } static void __pyx_FusedFunction_dealloc(__pyx_FusedFunctionObject *self) { PyObject_GC_UnTrack(self); Py_CLEAR(self->self); Py_CLEAR(self->type); Py_CLEAR(self->__signatures__); __Pyx__CyFunction_dealloc((__pyx_CyFunctionObject *) self); } static int __pyx_FusedFunction_traverse(__pyx_FusedFunctionObject *self, visitproc visit, void *arg) { Py_VISIT(self->self); Py_VISIT(self->type); Py_VISIT(self->__signatures__); return __Pyx_CyFunction_traverse((__pyx_CyFunctionObject *) self, visit, arg); } static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self) { Py_CLEAR(self->self); Py_CLEAR(self->type); Py_CLEAR(self->__signatures__); return __Pyx_CyFunction_clear((__pyx_CyFunctionObject *) self); } static PyObject * __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type) { __pyx_FusedFunctionObject *func, *meth; func = (__pyx_FusedFunctionObject *) self; if (func->self || func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD) { Py_INCREF(self); return self; } if (obj == Py_None) obj = NULL; meth = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_NewEx( ((PyCFunctionObject *) func)->m_ml, ((__pyx_CyFunctionObject *) func)->flags, ((__pyx_CyFunctionObject *) func)->func_qualname, ((__pyx_CyFunctionObject *) func)->func_closure, ((PyCFunctionObject *) func)->m_module, ((__pyx_CyFunctionObject *) func)->func_globals, ((__pyx_CyFunctionObject *) func)->func_code); if (!meth) return NULL; Py_XINCREF(func->func.func_classobj); meth->func.func_classobj = func->func.func_classobj; Py_XINCREF(func->__signatures__); meth->__signatures__ = func->__signatures__; Py_XINCREF(type); meth->type = type; Py_XINCREF(func->func.defaults_tuple); meth->func.defaults_tuple = func->func.defaults_tuple; if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD) obj = type; Py_XINCREF(obj); meth->self = obj; return (PyObject *) meth; } static PyObject * _obj_to_str(PyObject *obj) { if (PyType_Check(obj)) return PyObject_GetAttr(obj, __pyx_n_s_name_2); else return PyObject_Str(obj); } static PyObject * __pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx) { PyObject *signature = NULL; PyObject *unbound_result_func; PyObject *result_func = NULL; if (self->__signatures__ == NULL) { PyErr_SetString(PyExc_TypeError, "Function is not fused"); return NULL; } if (PyTuple_Check(idx)) { PyObject *list = PyList_New(0); Py_ssize_t n = PyTuple_GET_SIZE(idx); PyObject *string = NULL; PyObject *sep = NULL; int i; if (!list) return NULL; for (i = 0; i < n; i++) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS PyObject *item = PyTuple_GET_ITEM(idx, i); #else PyObject *item = PySequence_ITEM(idx, i); #endif string = _obj_to_str(item); #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_DECREF(item); #endif if (!string || PyList_Append(list, string) < 0) goto __pyx_err; Py_DECREF(string); } sep = PyUnicode_FromString("|"); if (sep) signature = PyUnicode_Join(sep, list); __pyx_err: ; Py_DECREF(list); Py_XDECREF(sep); } else { signature = _obj_to_str(idx); } if (!signature) return NULL; unbound_result_func = PyObject_GetItem(self->__signatures__, signature); if (unbound_result_func) { if (self->self || self->type) { __pyx_FusedFunctionObject *unbound = (__pyx_FusedFunctionObject *) unbound_result_func; Py_CLEAR(unbound->func.func_classobj); Py_XINCREF(self->func.func_classobj); unbound->func.func_classobj = self->func.func_classobj; result_func = __pyx_FusedFunction_descr_get(unbound_result_func, self->self, self->type); } else { result_func = unbound_result_func; Py_INCREF(result_func); } } Py_DECREF(signature); Py_XDECREF(unbound_result_func); return result_func; } static PyObject * __pyx_FusedFunction_callfunction(PyObject *func, PyObject *args, PyObject *kw) { __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; int static_specialized = (cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD && !((__pyx_FusedFunctionObject *) func)->__signatures__); if (cyfunc->flags & __Pyx_CYFUNCTION_CCLASS && !static_specialized) { return __Pyx_CyFunction_CallAsMethod(func, args, kw); } else { return __Pyx_CyFunction_Call(func, args, kw); } } static PyObject * __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw) { __pyx_FusedFunctionObject *binding_func = (__pyx_FusedFunctionObject *) func; Py_ssize_t argc = PyTuple_GET_SIZE(args); PyObject *new_args = NULL; __pyx_FusedFunctionObject *new_func = NULL; PyObject *result = NULL; PyObject *self = NULL; int is_staticmethod = binding_func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD; int is_classmethod = binding_func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD; if (binding_func->self) { Py_ssize_t i; new_args = PyTuple_New(argc + 1); if (!new_args) return NULL; self = binding_func->self; #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_INCREF(self); #endif Py_INCREF(self); PyTuple_SET_ITEM(new_args, 0, self); for (i = 0; i < argc; i++) { #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS PyObject *item = PyTuple_GET_ITEM(args, i); Py_INCREF(item); #else PyObject *item = PySequence_ITEM(args, i); if (unlikely(!item)) goto bad; #endif PyTuple_SET_ITEM(new_args, i + 1, item); } args = new_args; } else if (binding_func->type) { if (argc < 1) { PyErr_SetString(PyExc_TypeError, "Need at least one argument, 0 given."); return NULL; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS self = PyTuple_GET_ITEM(args, 0); #else self = PySequence_ITEM(args, 0); if (unlikely(!self)) return NULL; #endif } if (self && !is_classmethod && !is_staticmethod) { int is_instance = PyObject_IsInstance(self, binding_func->type); if (unlikely(!is_instance)) { PyErr_Format(PyExc_TypeError, "First argument should be of type %.200s, got %.200s.", ((PyTypeObject *) binding_func->type)->tp_name, self->ob_type->tp_name); goto bad; } else if (unlikely(is_instance == -1)) { goto bad; } } #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_XDECREF(self); self = NULL; #endif if (binding_func->__signatures__) { PyObject *tup; if (is_staticmethod && binding_func->func.flags & __Pyx_CYFUNCTION_CCLASS) { tup = PyTuple_Pack(3, args, kw == NULL ? Py_None : kw, binding_func->func.defaults_tuple); if (unlikely(!tup)) goto bad; new_func = (__pyx_FusedFunctionObject *) __Pyx_CyFunction_CallMethod( func, binding_func->__signatures__, tup, NULL); } else { tup = PyTuple_Pack(4, binding_func->__signatures__, args, kw == NULL ? Py_None : kw, binding_func->func.defaults_tuple); if (unlikely(!tup)) goto bad; new_func = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_callfunction(func, tup, NULL); } Py_DECREF(tup); if (unlikely(!new_func)) goto bad; Py_XINCREF(binding_func->func.func_classobj); Py_CLEAR(new_func->func.func_classobj); new_func->func.func_classobj = binding_func->func.func_classobj; func = (PyObject *) new_func; } result = __pyx_FusedFunction_callfunction(func, args, kw); bad: #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) Py_XDECREF(self); #endif Py_XDECREF(new_args); Py_XDECREF((PyObject *) new_func); return result; } static PyMemberDef __pyx_FusedFunction_members[] = { {(char *) "__signatures__", T_OBJECT, offsetof(__pyx_FusedFunctionObject, __signatures__), READONLY, 0}, {0, 0, 0, 0, 0}, }; static PyMappingMethods __pyx_FusedFunction_mapping_methods = { 0, (binaryfunc) __pyx_FusedFunction_getitem, 0, }; static PyTypeObject __pyx_FusedFunctionType_type = { PyVarObject_HEAD_INIT(0, 0) "fused_cython_function", sizeof(__pyx_FusedFunctionObject), 0, (destructor) __pyx_FusedFunction_dealloc, 0, 0, 0, #if PY_MAJOR_VERSION < 3 0, #else 0, #endif 0, 0, 0, &__pyx_FusedFunction_mapping_methods, 0, (ternaryfunc) __pyx_FusedFunction_call, 0, 0, 0, 0, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, 0, (traverseproc) __pyx_FusedFunction_traverse, (inquiry) __pyx_FusedFunction_clear, 0, 0, 0, 0, 0, __pyx_FusedFunction_members, __pyx_CyFunction_getsets, &__pyx_CyFunctionType_type, 0, __pyx_FusedFunction_descr_get, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #if PY_VERSION_HEX >= 0x030400a1 0, #endif }; static int __pyx_FusedFunction_init(void) { __pyx_FusedFunctionType = __Pyx_FetchCommonType(&__pyx_FusedFunctionType_type); if (__pyx_FusedFunctionType == NULL) { return -1; } return 0; } /* CLineInTraceback */ #ifndef CYTHON_CLINE_IN_TRACEBACK static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { PyObject *use_cline; PyObject *ptype, *pvalue, *ptraceback; #if CYTHON_COMPILING_IN_CPYTHON PyObject **cython_runtime_dict; #endif if (unlikely(!__pyx_cython_runtime)) { return c_line; } __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); #if CYTHON_COMPILING_IN_CPYTHON cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); if (likely(cython_runtime_dict)) { __PYX_PY_DICT_LOOKUP_IF_MODIFIED( use_cline, *cython_runtime_dict, __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) } else #endif { PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); if (use_cline_obj) { use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; Py_DECREF(use_cline_obj); } else { PyErr_Clear(); use_cline = NULL; } } if (!use_cline) { c_line = 0; PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); } else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { c_line = 0; } __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); return c_line; } #endif /* CodeObjectCache */ static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { return count; } while (start < end) { mid = start + (end - start) / 2; if (code_line < entries[mid].code_line) { end = mid; } else if (code_line > entries[mid].code_line) { start = mid + 1; } else { return mid; } } if (code_line <= entries[mid].code_line) { return mid; } else { return mid + 1; } } static PyCodeObject *__pyx_find_code_object(int code_line) { PyCodeObject* code_object; int pos; if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { return NULL; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { return NULL; } code_object = __pyx_code_cache.entries[pos].code_object; Py_INCREF(code_object); return code_object; } static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { int pos, i; __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; if (unlikely(!code_line)) { return; } if (unlikely(!entries)) { entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); if (likely(entries)) { __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = 64; __pyx_code_cache.count = 1; entries[0].code_line = code_line; entries[0].code_object = code_object; Py_INCREF(code_object); } return; } pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { PyCodeObject* tmp = entries[pos].code_object; entries[pos].code_object = code_object; Py_DECREF(tmp); return; } if (__pyx_code_cache.count == __pyx_code_cache.max_count) { int new_max = __pyx_code_cache.max_count + 64; entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); if (unlikely(!entries)) { return; } __pyx_code_cache.entries = entries; __pyx_code_cache.max_count = new_max; } for (i=__pyx_code_cache.count; i>pos; i--) { entries[i] = entries[i-1]; } entries[pos].code_line = code_line; entries[pos].code_object = code_object; __pyx_code_cache.count++; Py_INCREF(code_object); } /* AddTraceback */ #include "compile.h" #include "frameobject.h" #include "traceback.h" static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyObject *py_srcfile = 0; PyObject *py_funcname = 0; #if PY_MAJOR_VERSION < 3 py_srcfile = PyString_FromString(filename); #else py_srcfile = PyUnicode_FromString(filename); #endif if (!py_srcfile) goto bad; if (c_line) { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #else py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); #endif } else { #if PY_MAJOR_VERSION < 3 py_funcname = PyString_FromString(funcname); #else py_funcname = PyUnicode_FromString(funcname); #endif } if (!py_funcname) goto bad; py_code = __Pyx_PyCode_New( 0, 0, 0, 0, 0, __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ __pyx_empty_tuple, /*PyObject *varnames,*/ __pyx_empty_tuple, /*PyObject *freevars,*/ __pyx_empty_tuple, /*PyObject *cellvars,*/ py_srcfile, /*PyObject *filename,*/ py_funcname, /*PyObject *name,*/ py_line, __pyx_empty_bytes /*PyObject *lnotab*/ ); Py_DECREF(py_srcfile); Py_DECREF(py_funcname); return py_code; bad: Py_XDECREF(py_srcfile); Py_XDECREF(py_funcname); return NULL; } static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename) { PyCodeObject *py_code = 0; PyFrameObject *py_frame = 0; PyThreadState *tstate = __Pyx_PyThreadState_Current; if (c_line) { c_line = __Pyx_CLineForTraceback(tstate, c_line); } py_code = __pyx_find_code_object(c_line ? -c_line : py_line); if (!py_code) { py_code = __Pyx_CreateCodeObjectForTraceback( funcname, c_line, py_line, filename); if (!py_code) goto bad; __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); } py_frame = PyFrame_New( tstate, /*PyThreadState *tstate,*/ py_code, /*PyCodeObject *code,*/ __pyx_d, /*PyObject *globals,*/ 0 /*PyObject *locals*/ ); if (!py_frame) goto bad; __Pyx_PyFrame_SetLineNumber(py_frame, py_line); PyTraceBack_Here(py_frame); bad: Py_XDECREF(py_code); Py_XDECREF(py_frame); } #if PY_MAJOR_VERSION < 3 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags); if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags); PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); return -1; } static void __Pyx_ReleaseBuffer(Py_buffer *view) { PyObject *obj = view->obj; if (!obj) return; if (PyObject_CheckBuffer(obj)) { PyBuffer_Release(view); return; } if ((0)) {} else if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); view->obj = NULL; Py_DECREF(obj); } #endif /* MemviewSliceIsContig */ static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim) { int i, index, step, start; Py_ssize_t itemsize = mvs.memview->view.itemsize; if (order == 'F') { step = 1; start = 0; } else { step = -1; start = ndim - 1; } for (i = 0; i < ndim; i++) { index = start + step * i; if (mvs.suboffsets[index] >= 0 || mvs.strides[index] != itemsize) return 0; itemsize *= mvs.shape[index]; } return 1; } /* OverlappingSlices */ static void __pyx_get_array_memory_extents(__Pyx_memviewslice *slice, void **out_start, void **out_end, int ndim, size_t itemsize) { char *start, *end; int i; start = end = slice->data; for (i = 0; i < ndim; i++) { Py_ssize_t stride = slice->strides[i]; Py_ssize_t extent = slice->shape[i]; if (extent == 0) { *out_start = *out_end = start; return; } else { if (stride > 0) end += stride * (extent - 1); else start += stride * (extent - 1); } } *out_start = start; *out_end = end + itemsize; } static int __pyx_slices_overlap(__Pyx_memviewslice *slice1, __Pyx_memviewslice *slice2, int ndim, size_t itemsize) { void *start1, *end1, *start2, *end2; __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize); __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize); return (start1 < end2) && (start2 < end1); } /* Capsule */ static CYTHON_INLINE PyObject * __pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig) { PyObject *cobj; #if PY_VERSION_HEX >= 0x02070000 cobj = PyCapsule_New(p, sig, NULL); #else cobj = PyCObject_FromVoidPtr(p, NULL); #endif return cobj; } /* TypeInfoCompare */ static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b) { int i; if (!a || !b) return 0; if (a == b) return 1; if (a->size != b->size || a->typegroup != b->typegroup || a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) { if (a->typegroup == 'H' || b->typegroup == 'H') { return a->size == b->size; } else { return 0; } } if (a->ndim) { for (i = 0; i < a->ndim; i++) if (a->arraysize[i] != b->arraysize[i]) return 0; } if (a->typegroup == 'S') { if (a->flags != b->flags) return 0; if (a->fields || b->fields) { if (!(a->fields && b->fields)) return 0; for (i = 0; a->fields[i].type && b->fields[i].type; i++) { __Pyx_StructField *field_a = a->fields + i; __Pyx_StructField *field_b = b->fields + i; if (field_a->offset != field_b->offset || !__pyx_typeinfo_cmp(field_a->type, field_b->type)) return 0; } return !a->fields[i].type && !b->fields[i].type; } } return 1; } /* MemviewSliceValidateAndInit */ static int __pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec) { if (buf->shape[dim] <= 1) return 1; if (buf->strides) { if (spec & __Pyx_MEMVIEW_CONTIG) { if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) { if (buf->strides[dim] != sizeof(void *)) { PyErr_Format(PyExc_ValueError, "Buffer is not indirectly contiguous " "in dimension %d.", dim); goto fail; } } else if (buf->strides[dim] != buf->itemsize) { PyErr_SetString(PyExc_ValueError, "Buffer and memoryview are not contiguous " "in the same dimension."); goto fail; } } if (spec & __Pyx_MEMVIEW_FOLLOW) { Py_ssize_t stride = buf->strides[dim]; if (stride < 0) stride = -stride; if (stride < buf->itemsize) { PyErr_SetString(PyExc_ValueError, "Buffer and memoryview are not contiguous " "in the same dimension."); goto fail; } } } else { if (spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1) { PyErr_Format(PyExc_ValueError, "C-contiguous buffer is not contiguous in " "dimension %d", dim); goto fail; } else if (spec & (__Pyx_MEMVIEW_PTR)) { PyErr_Format(PyExc_ValueError, "C-contiguous buffer is not indirect in " "dimension %d", dim); goto fail; } else if (buf->suboffsets) { PyErr_SetString(PyExc_ValueError, "Buffer exposes suboffsets but no strides"); goto fail; } } return 1; fail: return 0; } static int __pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec) { if (spec & __Pyx_MEMVIEW_DIRECT) { if (buf->suboffsets && buf->suboffsets[dim] >= 0) { PyErr_Format(PyExc_ValueError, "Buffer not compatible with direct access " "in dimension %d.", dim); goto fail; } } if (spec & __Pyx_MEMVIEW_PTR) { if (!buf->suboffsets || (buf->suboffsets && buf->suboffsets[dim] < 0)) { PyErr_Format(PyExc_ValueError, "Buffer is not indirectly accessible " "in dimension %d.", dim); goto fail; } } return 1; fail: return 0; } static int __pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag) { int i; if (c_or_f_flag & __Pyx_IS_F_CONTIG) { Py_ssize_t stride = 1; for (i = 0; i < ndim; i++) { if (stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1) { PyErr_SetString(PyExc_ValueError, "Buffer not fortran contiguous."); goto fail; } stride = stride * buf->shape[i]; } } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) { Py_ssize_t stride = 1; for (i = ndim - 1; i >- 1; i--) { if (stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1) { PyErr_SetString(PyExc_ValueError, "Buffer not C contiguous."); goto fail; } stride = stride * buf->shape[i]; } } return 1; fail: return 0; } static int __Pyx_ValidateAndInit_memviewslice( int *axes_specs, int c_or_f_flag, int buf_flags, int ndim, __Pyx_TypeInfo *dtype, __Pyx_BufFmt_StackElem stack[], __Pyx_memviewslice *memviewslice, PyObject *original_obj) { struct __pyx_memoryview_obj *memview, *new_memview; __Pyx_RefNannyDeclarations Py_buffer *buf; int i, spec = 0, retval = -1; __Pyx_BufFmt_Context ctx; int from_memoryview = __pyx_memoryview_check(original_obj); __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0); if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *) original_obj)->typeinfo)) { memview = (struct __pyx_memoryview_obj *) original_obj; new_memview = NULL; } else { memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( original_obj, buf_flags, 0, dtype); new_memview = memview; if (unlikely(!memview)) goto fail; } buf = &memview->view; if (buf->ndim != ndim) { PyErr_Format(PyExc_ValueError, "Buffer has wrong number of dimensions (expected %d, got %d)", ndim, buf->ndim); goto fail; } if (new_memview) { __Pyx_BufFmt_Init(&ctx, stack, dtype); if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; } if ((unsigned) buf->itemsize != dtype->size) { PyErr_Format(PyExc_ValueError, "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) " "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)", buf->itemsize, (buf->itemsize > 1) ? "s" : "", dtype->name, dtype->size, (dtype->size > 1) ? "s" : ""); goto fail; } for (i = 0; i < ndim; i++) { spec = axes_specs[i]; if (!__pyx_check_strides(buf, i, ndim, spec)) goto fail; if (!__pyx_check_suboffsets(buf, i, ndim, spec)) goto fail; } if (buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag)) goto fail; if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice, new_memview != NULL) == -1)) { goto fail; } retval = 0; goto no_fail; fail: Py_XDECREF(new_memview); retval = -1; no_fail: __Pyx_RefNannyFinishContext(); return retval; } /* ObjectToMemviewSlice */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_nn___pyx_t_5numpy_float32_t(PyObject *obj, int writable_flag) { __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_BufFmt_StackElem stack[1]; int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; int retcode; if (obj == Py_None) { result.memview = (struct __pyx_memoryview_obj *) Py_None; return result; } retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, PyBUF_RECORDS_RO | writable_flag, 4, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, stack, &result, obj); if (unlikely(retcode == -1)) goto __pyx_fail; return result; __pyx_fail: result.memview = NULL; result.data = NULL; return result; } /* ObjectToMemviewSlice */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsds_nn___pyx_t_5numpy_float64_t(PyObject *obj, int writable_flag) { __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_BufFmt_StackElem stack[1]; int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; int retcode; if (obj == Py_None) { result.memview = (struct __pyx_memoryview_obj *) Py_None; return result; } retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, PyBUF_RECORDS_RO | writable_flag, 4, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, stack, &result, obj); if (unlikely(retcode == -1)) goto __pyx_fail; return result; __pyx_fail: result.memview = NULL; result.data = NULL; return result; } /* ObjectToMemviewSlice */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5numpy_float32_t(PyObject *obj, int writable_flag) { __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_BufFmt_StackElem stack[1]; int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; int retcode; if (obj == Py_None) { result.memview = (struct __pyx_memoryview_obj *) Py_None; return result; } retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, PyBUF_RECORDS_RO | writable_flag, 2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, stack, &result, obj); if (unlikely(retcode == -1)) goto __pyx_fail; return result; __pyx_fail: result.memview = NULL; result.data = NULL; return result; } /* ObjectToMemviewSlice */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsds_nn___pyx_t_5numpy_float64_t(PyObject *obj, int writable_flag) { __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_BufFmt_StackElem stack[1]; int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; int retcode; if (obj == Py_None) { result.memview = (struct __pyx_memoryview_obj *) Py_None; return result; } retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, PyBUF_RECORDS_RO | writable_flag, 2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, stack, &result, obj); if (unlikely(retcode == -1)) goto __pyx_fail; return result; __pyx_fail: result.memview = NULL; result.data = NULL; return result; } /* ObjectToMemviewSlice */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsds_nn___pyx_t_5numpy_float32_t(PyObject *obj, int writable_flag) { __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_BufFmt_StackElem stack[1]; int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; int retcode; if (obj == Py_None) { result.memview = (struct __pyx_memoryview_obj *) Py_None; return result; } retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, PyBUF_RECORDS_RO | writable_flag, 6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, stack, &result, obj); if (unlikely(retcode == -1)) goto __pyx_fail; return result; __pyx_fail: result.memview = NULL; result.data = NULL; return result; } /* ObjectToMemviewSlice */ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dsdsdsdsdsds_nn___pyx_t_5numpy_float64_t(PyObject *obj, int writable_flag) { __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; __Pyx_BufFmt_StackElem stack[1]; int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; int retcode; if (obj == Py_None) { result.memview = (struct __pyx_memoryview_obj *) Py_None; return result; } retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, PyBUF_RECORDS_RO | writable_flag, 6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, stack, &result, obj); if (unlikely(retcode == -1)) goto __pyx_fail; return result; __pyx_fail: result.memview = NULL; result.data = NULL; return result; } /* CIntFromPyVerify */ #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) #define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) #define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ {\ func_type value = func_value;\ if (sizeof(target_type) < sizeof(func_type)) {\ if (unlikely(value != (func_type) (target_type) value)) {\ func_type zero = 0;\ if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ return (target_type) -1;\ if (is_unsigned && unlikely(value < zero))\ goto raise_neg_overflow;\ else\ goto raise_overflow;\ }\ }\ return (target_type) value;\ } /* CIntToPy */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; const int is_unsigned = neg_one > const_zero; if (is_unsigned) { if (sizeof(long) < sizeof(long)) { return PyInt_FromLong((long) value); } else if (sizeof(long) <= sizeof(unsigned long)) { return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { if (sizeof(long) <= sizeof(long)) { return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } } { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; return _PyLong_FromByteArray(bytes, sizeof(long), little, !is_unsigned); } } /* CIntToPy */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; const int is_unsigned = neg_one > const_zero; if (is_unsigned) { if (sizeof(int) < sizeof(long)) { return PyInt_FromLong((long) value); } else if (sizeof(int) <= sizeof(unsigned long)) { return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { if (sizeof(int) <= sizeof(long)) { return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } } { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; return _PyLong_FromByteArray(bytes, sizeof(int), little, !is_unsigned); } } /* Declarations */ #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return ::std::complex< float >(x, y); } #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { return x + y*(__pyx_t_float_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { __pyx_t_float_complex z; z.real = x; z.imag = y; return z; } #endif /* Arithmetic */ #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } #if 1 static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { if (b.imag == 0) { return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); } else if (fabsf(b.real) >= fabsf(b.imag)) { if (b.real == 0 && b.imag == 0) { return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); } else { float r = b.imag / b.real; float s = 1.0 / (b.real + b.imag * r); return __pyx_t_float_complex_from_parts( (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); } } else { float r = b.real / b.imag; float s = 1.0 / (b.imag + b.real * r); return __pyx_t_float_complex_from_parts( (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); } } #else static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { if (b.imag == 0) { return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); } else { float denom = b.real * b.real + b.imag * b.imag; return __pyx_t_float_complex_from_parts( (a.real * b.real + a.imag * b.imag) / denom, (a.imag * b.real - a.real * b.imag) / denom); } } #endif static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { __pyx_t_float_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrtf(z.real*z.real + z.imag*z.imag); #else return hypotf(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { __pyx_t_float_complex z; float r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { float denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prod_float(a, a); return __Pyx_c_prod_float(a, a); case 3: z = __Pyx_c_prod_float(a, a); return __Pyx_c_prod_float(z, a); case 4: z = __Pyx_c_prod_float(a, a); return __Pyx_c_prod_float(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } else if (b.imag == 0) { z.real = powf(a.real, b.real); z.imag = 0; return z; } else if (a.real > 0) { r = a.real; theta = 0; } else { r = -a.real; theta = atan2f(0, -1); } } else { r = __Pyx_c_abs_float(a); theta = atan2f(a.imag, a.real); } lnr = logf(r); z_r = expf(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cosf(z_theta); z.imag = z_r * sinf(z_theta); return z; } #endif #endif /* Declarations */ #if CYTHON_CCOMPLEX #ifdef __cplusplus static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return ::std::complex< double >(x, y); } #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { return x + y*(__pyx_t_double_complex)_Complex_I; } #endif #else static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { __pyx_t_double_complex z; z.real = x; z.imag = y; return z; } #endif /* Arithmetic */ #if CYTHON_CCOMPLEX #else static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } #if 1 static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { if (b.imag == 0) { return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); } else if (fabs(b.real) >= fabs(b.imag)) { if (b.real == 0 && b.imag == 0) { return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); } else { double r = b.imag / b.real; double s = 1.0 / (b.real + b.imag * r); return __pyx_t_double_complex_from_parts( (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); } } else { double r = b.real / b.imag; double s = 1.0 / (b.imag + b.real * r); return __pyx_t_double_complex_from_parts( (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); } } #else static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { if (b.imag == 0) { return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); } else { double denom = b.real * b.real + b.imag * b.imag; return __pyx_t_double_complex_from_parts( (a.real * b.real + a.imag * b.imag) / denom, (a.imag * b.real - a.real * b.imag) / denom); } } #endif static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = -a.real; z.imag = -a.imag; return z; } static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) { return (a.real == 0) && (a.imag == 0); } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) { __pyx_t_double_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) return sqrt(z.real*z.real + z.imag*z.imag); #else return hypot(z.real, z.imag); #endif } static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { __pyx_t_double_complex z; double r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { double denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; } switch ((int)b.real) { case 0: z.real = 1; z.imag = 0; return z; case 1: return a; case 2: z = __Pyx_c_prod_double(a, a); return __Pyx_c_prod_double(a, a); case 3: z = __Pyx_c_prod_double(a, a); return __Pyx_c_prod_double(z, a); case 4: z = __Pyx_c_prod_double(a, a); return __Pyx_c_prod_double(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } else if (b.imag == 0) { z.real = pow(a.real, b.real); z.imag = 0; return z; } else if (a.real > 0) { r = a.real; theta = 0; } else { r = -a.real; theta = atan2(0, -1); } } else { r = __Pyx_c_abs_double(a); theta = atan2(a.imag, a.real); } lnr = log(r); z_r = exp(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; z.real = z_r * cos(z_theta); z.imag = z_r * sin(z_theta); return z; } #endif #endif /* CIntToPy */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) { const enum NPY_TYPES neg_one = (enum NPY_TYPES) ((enum NPY_TYPES) 0 - (enum NPY_TYPES) 1), const_zero = (enum NPY_TYPES) 0; const int is_unsigned = neg_one > const_zero; if (is_unsigned) { if (sizeof(enum NPY_TYPES) < sizeof(long)) { return PyInt_FromLong((long) value); } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) { return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) { return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { if (sizeof(enum NPY_TYPES) <= sizeof(long)) { return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG } else if (sizeof(enum NPY_TYPES) <= sizeof(PY_LONG_LONG)) { return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } } { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; return _PyLong_FromByteArray(bytes, sizeof(enum NPY_TYPES), little, !is_unsigned); } } /* MemviewSliceCopyTemplate */ static __Pyx_memviewslice __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, const char *mode, int ndim, size_t sizeof_dtype, int contig_flag, int dtype_is_object) { __Pyx_RefNannyDeclarations int i; __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } }; struct __pyx_memoryview_obj *from_memview = from_mvs->memview; Py_buffer *buf = &from_memview->view; PyObject *shape_tuple = NULL; PyObject *temp_int = NULL; struct __pyx_array_obj *array_obj = NULL; struct __pyx_memoryview_obj *memview_obj = NULL; __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0); for (i = 0; i < ndim; i++) { if (from_mvs->suboffsets[i] >= 0) { PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with " "indirect dimensions (axis %d)", i); goto fail; } } shape_tuple = PyTuple_New(ndim); if (unlikely(!shape_tuple)) { goto fail; } __Pyx_GOTREF(shape_tuple); for(i = 0; i < ndim; i++) { temp_int = PyInt_FromSsize_t(from_mvs->shape[i]); if(unlikely(!temp_int)) { goto fail; } else { PyTuple_SET_ITEM(shape_tuple, i, temp_int); temp_int = NULL; } } array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL); if (unlikely(!array_obj)) { goto fail; } __Pyx_GOTREF(array_obj); memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( (PyObject *) array_obj, contig_flag, dtype_is_object, from_mvs->memview->typeinfo); if (unlikely(!memview_obj)) goto fail; if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0)) goto fail; if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim, dtype_is_object) < 0)) goto fail; goto no_fail; fail: __Pyx_XDECREF(new_mvs.memview); new_mvs.memview = NULL; new_mvs.data = NULL; no_fail: __Pyx_XDECREF(shape_tuple); __Pyx_XDECREF(temp_int); __Pyx_XDECREF(array_obj); __Pyx_RefNannyFinishContext(); return new_mvs; } /* MemviewSliceInit */ static int __Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, int ndim, __Pyx_memviewslice *memviewslice, int memview_is_new_reference) { __Pyx_RefNannyDeclarations int i, retval=-1; Py_buffer *buf = &memview->view; __Pyx_RefNannySetupContext("init_memviewslice", 0); if (!buf) { PyErr_SetString(PyExc_ValueError, "buf is NULL."); goto fail; } else if (memviewslice->memview || memviewslice->data) { PyErr_SetString(PyExc_ValueError, "memviewslice is already initialized!"); goto fail; } if (buf->strides) { for (i = 0; i < ndim; i++) { memviewslice->strides[i] = buf->strides[i]; } } else { Py_ssize_t stride = buf->itemsize; for (i = ndim - 1; i >= 0; i--) { memviewslice->strides[i] = stride; stride *= buf->shape[i]; } } for (i = 0; i < ndim; i++) { memviewslice->shape[i] = buf->shape[i]; if (buf->suboffsets) { memviewslice->suboffsets[i] = buf->suboffsets[i]; } else { memviewslice->suboffsets[i] = -1; } } memviewslice->memview = memview; memviewslice->data = (char *)buf->buf; if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { Py_INCREF(memview); } retval = 0; goto no_fail; fail: memviewslice->memview = 0; memviewslice->data = 0; retval = -1; no_fail: __Pyx_RefNannyFinishContext(); return retval; } #ifndef Py_NO_RETURN #define Py_NO_RETURN #endif static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { va_list vargs; char msg[200]; #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, fmt); #else va_start(vargs); #endif vsnprintf(msg, 200, fmt, vargs); va_end(vargs); Py_FatalError(msg); } static CYTHON_INLINE int __pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count, PyThread_type_lock lock) { int result; PyThread_acquire_lock(lock, 1); result = (*acquisition_count)++; PyThread_release_lock(lock); return result; } static CYTHON_INLINE int __pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count, PyThread_type_lock lock) { int result; PyThread_acquire_lock(lock, 1); result = (*acquisition_count)--; PyThread_release_lock(lock); return result; } static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) { int first_time; struct __pyx_memoryview_obj *memview = memslice->memview; if (!memview || (PyObject *) memview == Py_None) return; if (__pyx_get_slice_count(memview) < 0) __pyx_fatalerror("Acquisition count is %d (line %d)", __pyx_get_slice_count(memview), lineno); first_time = __pyx_add_acquisition_count(memview) == 0; if (first_time) { if (have_gil) { Py_INCREF((PyObject *) memview); } else { PyGILState_STATE _gilstate = PyGILState_Ensure(); Py_INCREF((PyObject *) memview); PyGILState_Release(_gilstate); } } } static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) { int last_time; struct __pyx_memoryview_obj *memview = memslice->memview; if (!memview ) { return; } else if ((PyObject *) memview == Py_None) { memslice->memview = NULL; return; } if (__pyx_get_slice_count(memview) <= 0) __pyx_fatalerror("Acquisition count is %d (line %d)", __pyx_get_slice_count(memview), lineno); last_time = __pyx_sub_acquisition_count(memview) == 1; memslice->data = NULL; if (last_time) { if (have_gil) { Py_CLEAR(memslice->memview); } else { PyGILState_STATE _gilstate = PyGILState_Ensure(); Py_CLEAR(memslice->memview); PyGILState_Release(_gilstate); } } else { memslice->memview = NULL; } } /* CIntFromPy */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { if (sizeof(int) < sizeof(long)) { __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { goto raise_neg_overflow; } return (int) val; } } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS const digit* digits = ((PyLongObject*)x)->ob_digit; switch (Py_SIZE(x)) { case 0: return (int) 0; case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) case 2: if (8 * sizeof(int) > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } } break; case 3: if (8 * sizeof(int) > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } } break; case 4: if (8 * sizeof(int) > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } } break; } #endif #if CYTHON_COMPILING_IN_CPYTHON if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } #else { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) return (int) -1; if (unlikely(result == 1)) goto raise_neg_overflow; } #endif if (sizeof(int) <= sizeof(unsigned long)) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS const digit* digits = ((PyLongObject*)x)->ob_digit; switch (Py_SIZE(x)) { case 0: return (int) 0; case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) case -2: if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case 2: if (8 * sizeof(int) > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case -3: if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case 3: if (8 * sizeof(int) > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case -4: if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case 4: if (8 * sizeof(int) > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; } #endif if (sizeof(int) <= sizeof(long)) { __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) PyErr_SetString(PyExc_RuntimeError, "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); #else int val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); #if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } #endif if (likely(v)) { int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; int ret = _PyLong_AsByteArray((PyLongObject *)v, bytes, sizeof(val), is_little, !is_unsigned); Py_DECREF(v); if (likely(!ret)) return val; } #endif return (int) -1; } } else { int val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); if (!tmp) return (int) -1; val = __Pyx_PyInt_As_int(tmp); Py_DECREF(tmp); return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, "value too large to convert to int"); return (int) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, "can't convert negative value to int"); return (int) -1; } /* BytesContains */ static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character) { const Py_ssize_t length = PyBytes_GET_SIZE(bytes); char* char_start = PyBytes_AS_STRING(bytes); return memchr(char_start, (unsigned char)character, (size_t)length) != NULL; } /* ImportNumPyArray */ static PyObject* __Pyx__ImportNumPyArray(void) { PyObject *numpy_module, *ndarray_object = NULL; numpy_module = __Pyx_Import(__pyx_n_s_numpy, NULL, 0); if (likely(numpy_module)) { ndarray_object = PyObject_GetAttrString(numpy_module, "ndarray"); Py_DECREF(numpy_module); } if (unlikely(!ndarray_object)) { PyErr_Clear(); } if (unlikely(!ndarray_object || !PyObject_TypeCheck(ndarray_object, &PyType_Type))) { Py_XDECREF(ndarray_object); Py_INCREF(Py_None); ndarray_object = Py_None; } return ndarray_object; } static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) { if (unlikely(!__pyx_numpy_ndarray)) { __pyx_numpy_ndarray = __Pyx__ImportNumPyArray(); } Py_INCREF(__pyx_numpy_ndarray); return __pyx_numpy_ndarray; } /* CIntFromPy */ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { if (sizeof(long) < sizeof(long)) { __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { goto raise_neg_overflow; } return (long) val; } } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS const digit* digits = ((PyLongObject*)x)->ob_digit; switch (Py_SIZE(x)) { case 0: return (long) 0; case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) case 2: if (8 * sizeof(long) > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } } break; case 3: if (8 * sizeof(long) > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } } break; case 4: if (8 * sizeof(long) > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } } break; } #endif #if CYTHON_COMPILING_IN_CPYTHON if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } #else { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) return (long) -1; if (unlikely(result == 1)) goto raise_neg_overflow; } #endif if (sizeof(long) <= sizeof(unsigned long)) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS const digit* digits = ((PyLongObject*)x)->ob_digit; switch (Py_SIZE(x)) { case 0: return (long) 0; case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) case -2: if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case 2: if (8 * sizeof(long) > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case -3: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case 3: if (8 * sizeof(long) > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case -4: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case 4: if (8 * sizeof(long) > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; } #endif if (sizeof(long) <= sizeof(long)) { __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) PyErr_SetString(PyExc_RuntimeError, "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); #else long val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); #if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } #endif if (likely(v)) { int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; int ret = _PyLong_AsByteArray((PyLongObject *)v, bytes, sizeof(val), is_little, !is_unsigned); Py_DECREF(v); if (likely(!ret)) return val; } #endif return (long) -1; } } else { long val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); if (!tmp) return (long) -1; val = __Pyx_PyInt_As_long(tmp); Py_DECREF(tmp); return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, "value too large to convert to long"); return (long) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, "can't convert negative value to long"); return (long) -1; } /* CIntFromPy */ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0; const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { if (sizeof(char) < sizeof(long)) { __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { goto raise_neg_overflow; } return (char) val; } } else #endif if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS const digit* digits = ((PyLongObject*)x)->ob_digit; switch (Py_SIZE(x)) { case 0: return (char) 0; case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0]) case 2: if (8 * sizeof(char) > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) { return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); } } break; case 3: if (8 * sizeof(char) > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) { return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); } } break; case 4: if (8 * sizeof(char) > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) >= 4 * PyLong_SHIFT) { return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])); } } break; } #endif #if CYTHON_COMPILING_IN_CPYTHON if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } #else { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) return (char) -1; if (unlikely(result == 1)) goto raise_neg_overflow; } #endif if (sizeof(char) <= sizeof(unsigned long)) { __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) { __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS const digit* digits = ((PyLongObject*)x)->ob_digit; switch (Py_SIZE(x)) { case 0: return (char) 0; case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0])) case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0]) case -2: if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); } } break; case 2: if (8 * sizeof(char) > 1 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); } } break; case -3: if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); } } break; case 3: if (8 * sizeof(char) > 2 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); } } break; case -4: if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) { return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); } } break; case 4: if (8 * sizeof(char) > 3 * PyLong_SHIFT) { if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) { return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]))); } } break; } #endif if (sizeof(char) <= sizeof(long)) { __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) { __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) PyErr_SetString(PyExc_RuntimeError, "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); #else char val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); #if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } #endif if (likely(v)) { int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; int ret = _PyLong_AsByteArray((PyLongObject *)v, bytes, sizeof(val), is_little, !is_unsigned); Py_DECREF(v); if (likely(!ret)) return val; } #endif return (char) -1; } } else { char val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); if (!tmp) return (char) -1; val = __Pyx_PyInt_As_char(tmp); Py_DECREF(tmp); return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, "value too large to convert to char"); return (char) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, "can't convert negative value to char"); return (char) -1; } /* CheckBinaryVersion */ static int __Pyx_check_binary_version(void) { char ctversion[4], rtversion[4]; PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { char message[200]; PyOS_snprintf(message, sizeof(message), "compiletime version %s of module '%.100s' " "does not match runtime version %s", ctversion, __Pyx_MODULE_NAME, rtversion); return PyErr_WarnEx(NULL, message, 1); } return 0; } /* InitStrings */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { #if PY_MAJOR_VERSION < 3 if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { *t->p = PyString_InternFromString(t->s); } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } #else if (t->is_unicode | t->is_str) { if (t->intern) { *t->p = PyUnicode_InternFromString(t->s); } else if (t->encoding) { *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); } else { *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); } } else { *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); } #endif if (!*t->p) return -1; if (PyObject_Hash(*t->p) == -1) return -1; ++t; } return 0; } static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); } static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; return __Pyx_PyObject_AsStringAndSize(o, &ignore); } #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT #if !CYTHON_PEP393_ENABLED static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { char* defenc_c; PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); if (!defenc) return NULL; defenc_c = PyBytes_AS_STRING(defenc); #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII { char* end = defenc_c + PyBytes_GET_SIZE(defenc); char* c; for (c = defenc_c; c < end; c++) { if ((unsigned char) (*c) >= 128) { PyUnicode_AsASCIIString(o); return NULL; } } } #endif *length = PyBytes_GET_SIZE(defenc); return defenc_c; } #else static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII if (likely(PyUnicode_IS_ASCII(o))) { *length = PyUnicode_GET_LENGTH(o); return PyUnicode_AsUTF8(o); } else { PyUnicode_AsASCIIString(o); return NULL; } #else return PyUnicode_AsUTF8AndSize(o, length); #endif } #endif #endif static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT if ( #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII __Pyx_sys_getdefaultencoding_not_ascii && #endif PyUnicode_Check(o)) { return __Pyx_PyUnicode_AsStringAndSize(o, length); } else #endif #if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) if (PyByteArray_Check(o)) { *length = PyByteArray_GET_SIZE(o); return PyByteArray_AS_STRING(o); } else #endif { char* result; int r = PyBytes_AsStringAndSize(o, &result, length); if (unlikely(r < 0)) { return NULL; } else { return result; } } } static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { int is_true = x == Py_True; if (is_true | (x == Py_False) | (x == Py_None)) return is_true; else return PyObject_IsTrue(x); } static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { int retval; if (unlikely(!x)) return -1; retval = __Pyx_PyObject_IsTrue(x); Py_DECREF(x); return retval; } static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { #if PY_MAJOR_VERSION >= 3 if (PyLong_Check(result)) { if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, "__int__ returned non-int (type %.200s). " "The ability to return an instance of a strict subclass of int " "is deprecated, and may be removed in a future version of Python.", Py_TYPE(result)->tp_name)) { Py_DECREF(result); return NULL; } return result; } #endif PyErr_Format(PyExc_TypeError, "__%.4s__ returned non-%.4s (type %.200s)", type_name, type_name, Py_TYPE(result)->tp_name); Py_DECREF(result); return NULL; } static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { #if CYTHON_USE_TYPE_SLOTS PyNumberMethods *m; #endif const char *name = NULL; PyObject *res = NULL; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x) || PyLong_Check(x))) #else if (likely(PyLong_Check(x))) #endif return __Pyx_NewRef(x); #if CYTHON_USE_TYPE_SLOTS m = Py_TYPE(x)->tp_as_number; #if PY_MAJOR_VERSION < 3 if (m && m->nb_int) { name = "int"; res = m->nb_int(x); } else if (m && m->nb_long) { name = "long"; res = m->nb_long(x); } #else if (likely(m && m->nb_int)) { name = "int"; res = m->nb_int(x); } #endif #else if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { res = PyNumber_Int(x); } #endif if (likely(res)) { #if PY_MAJOR_VERSION < 3 if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { #else if (unlikely(!PyLong_CheckExact(res))) { #endif return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); } } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_TypeError, "an integer is required"); } return res; } static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { Py_ssize_t ival; PyObject *x; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_CheckExact(b))) { if (sizeof(Py_ssize_t) >= sizeof(long)) return PyInt_AS_LONG(b); else return PyInt_AsSsize_t(b); } #endif if (likely(PyLong_CheckExact(b))) { #if CYTHON_USE_PYLONG_INTERNALS const digit* digits = ((PyLongObject*)b)->ob_digit; const Py_ssize_t size = Py_SIZE(b); if (likely(__Pyx_sst_abs(size) <= 1)) { ival = likely(size) ? digits[0] : 0; if (size == -1) ival = -ival; return ival; } else { switch (size) { case 2: if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); } break; case -2: if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); } break; case 3: if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); } break; case -3: if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); } break; case 4: if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); } break; case -4: if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); } break; } } #endif return PyLong_AsSsize_t(b); } x = PyNumber_Index(b); if (!x) return -1; ival = PyInt_AsSsize_t(x); Py_DECREF(x); return ival; } static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); } static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { return PyInt_FromSize_t(ival); } #endif /* Py_PYTHON_H */ ================================================ FILE: assignment2/cs231n/im2col_cython.pyx ================================================ import numpy as np cimport numpy as np cimport cython # DTYPE = np.float64 # ctypedef np.float64_t DTYPE_t ctypedef fused DTYPE_t: np.float32_t np.float64_t def im2col_cython(np.ndarray[DTYPE_t, ndim=4] x, int field_height, int field_width, int padding, int stride): cdef int N = x.shape[0] cdef int C = x.shape[1] cdef int H = x.shape[2] cdef int W = x.shape[3] cdef int HH = (H + 2 * padding - field_height) / stride + 1 cdef int WW = (W + 2 * padding - field_width) / stride + 1 cdef int p = padding cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.pad(x, ((0, 0), (0, 0), (p, p), (p, p)), mode='constant') cdef np.ndarray[DTYPE_t, ndim=2] cols = np.zeros( (C * field_height * field_width, N * HH * WW), dtype=x.dtype) # Moving the inner loop to a C function with no bounds checking works, but does # not seem to help performance in any measurable way. im2col_cython_inner(cols, x_padded, N, C, H, W, HH, WW, field_height, field_width, padding, stride) return cols @cython.boundscheck(False) cdef int im2col_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, np.ndarray[DTYPE_t, ndim=4] x_padded, int N, int C, int H, int W, int HH, int WW, int field_height, int field_width, int padding, int stride) except? -1: cdef int c, ii, jj, row, yy, xx, i, col for c in range(C): for yy in range(HH): for xx in range(WW): for ii in range(field_height): for jj in range(field_width): row = c * field_width * field_height + ii * field_height + jj for i in range(N): col = yy * WW * N + xx * N + i cols[row, col] = x_padded[i, c, stride * yy + ii, stride * xx + jj] def col2im_cython(np.ndarray[DTYPE_t, ndim=2] cols, int N, int C, int H, int W, int field_height, int field_width, int padding, int stride): cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) cdef int HH = (H + 2 * padding - field_height) / stride + 1 cdef int WW = (W + 2 * padding - field_width) / stride + 1 cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * padding, W + 2 * padding), dtype=cols.dtype) # Moving the inner loop to a C-function with no bounds checking improves # performance quite a bit for col2im. col2im_cython_inner(cols, x_padded, N, C, H, W, HH, WW, field_height, field_width, padding, stride) if padding > 0: return x_padded[:, :, padding:-padding, padding:-padding] return x_padded @cython.boundscheck(False) cdef int col2im_cython_inner(np.ndarray[DTYPE_t, ndim=2] cols, np.ndarray[DTYPE_t, ndim=4] x_padded, int N, int C, int H, int W, int HH, int WW, int field_height, int field_width, int padding, int stride) except? -1: cdef int c, ii, jj, row, yy, xx, i, col for c in range(C): for ii in range(field_height): for jj in range(field_width): row = c * field_width * field_height + ii * field_height + jj for yy in range(HH): for xx in range(WW): for i in range(N): col = yy * WW * N + xx * N + i x_padded[i, c, stride * yy + ii, stride * xx + jj] += cols[row, col] @cython.boundscheck(False) @cython.wraparound(False) cdef col2im_6d_cython_inner(np.ndarray[DTYPE_t, ndim=6] cols, np.ndarray[DTYPE_t, ndim=4] x_padded, int N, int C, int H, int W, int HH, int WW, int out_h, int out_w, int pad, int stride): cdef int c, hh, ww, n, h, w for n in range(N): for c in range(C): for hh in range(HH): for ww in range(WW): for h in range(out_h): for w in range(out_w): x_padded[n, c, stride * h + hh, stride * w + ww] += cols[c, hh, ww, n, h, w] def col2im_6d_cython(np.ndarray[DTYPE_t, ndim=6] cols, int N, int C, int H, int W, int HH, int WW, int pad, int stride): cdef np.ndarray x = np.empty((N, C, H, W), dtype=cols.dtype) cdef int out_h = (H + 2 * pad - HH) / stride + 1 cdef int out_w = (W + 2 * pad - WW) / stride + 1 cdef np.ndarray[DTYPE_t, ndim=4] x_padded = np.zeros((N, C, H + 2 * pad, W + 2 * pad), dtype=cols.dtype) col2im_6d_cython_inner(cols, x_padded, N, C, H, W, HH, WW, out_h, out_w, pad, stride) if pad > 0: return x_padded[:, :, pad:-pad, pad:-pad] return x_padded ================================================ FILE: assignment2/cs231n/layer_utils.py ================================================ from cs231n.layers import * from cs231n.fast_layers import * def affine_relu_forward(x, w, b): """ Convenience layer that perorms an affine transform followed by a ReLU Inputs: - x: Input to the affine layer - w, b: Weights for the affine layer Returns a tuple of: - out: Output from the ReLU - cache: Object to give to the backward pass """ a, fc_cache = affine_forward(x, w, b) out, relu_cache = relu_forward(a) cache = (fc_cache, relu_cache) return out, cache def affine_relu_backward(dout, cache): """ Backward pass for the affine-relu convenience layer """ fc_cache, relu_cache = cache da = relu_backward(dout, relu_cache) dx, dw, db = affine_backward(da, fc_cache) return dx, dw, db def conv_relu_forward(x, w, b, conv_param): """ A convenience layer that performs a convolution followed by a ReLU. Inputs: - x: Input to the convolutional layer - w, b, conv_param: Weights and parameters for the convolutional layer Returns a tuple of: - out: Output from the ReLU - cache: Object to give to the backward pass """ a, conv_cache = conv_forward_fast(x, w, b, conv_param) out, relu_cache = relu_forward(a) cache = (conv_cache, relu_cache) return out, cache def conv_relu_backward(dout, cache): """ Backward pass for the conv-relu convenience layer. """ conv_cache, relu_cache = cache da = relu_backward(dout, relu_cache) dx, dw, db = conv_backward_fast(da, conv_cache) return dx, dw, db def conv_bn_relu_forward(x, w, b, gamma, beta, conv_param, bn_param): a, conv_cache = conv_forward_fast(x, w, b, conv_param) an, bn_cache = spatial_batchnorm_forward(a, gamma, beta, bn_param) out, relu_cache = relu_forward(an) cache = (conv_cache, bn_cache, relu_cache) return out, cache def conv_bn_relu_backward(dout, cache): conv_cache, bn_cache, relu_cache = cache dan = relu_backward(dout, relu_cache) da, dgamma, dbeta = spatial_batchnorm_backward(dan, bn_cache) dx, dw, db = conv_backward_fast(da, conv_cache) return dx, dw, db, dgamma, dbeta def conv_relu_pool_forward(x, w, b, conv_param, pool_param): """ Convenience layer that performs a convolution, a ReLU, and a pool. Inputs: - x: Input to the convolutional layer - w, b, conv_param: Weights and parameters for the convolutional layer - pool_param: Parameters for the pooling layer Returns a tuple of: - out: Output from the pooling layer - cache: Object to give to the backward pass """ a, conv_cache = conv_forward_fast(x, w, b, conv_param) s, relu_cache = relu_forward(a) out, pool_cache = max_pool_forward_fast(s, pool_param) cache = (conv_cache, relu_cache, pool_cache) return out, cache def conv_relu_pool_backward(dout, cache): """ Backward pass for the conv-relu-pool convenience layer """ conv_cache, relu_cache, pool_cache = cache ds = max_pool_backward_fast(dout, pool_cache) da = relu_backward(ds, relu_cache) dx, dw, db = conv_backward_fast(da, conv_cache) return dx, dw, db ================================================ FILE: assignment2/cs231n/layers.py ================================================ from builtins import range import numpy as np def affine_forward(x, w, b): """ Computes the forward pass for an affine (fully-connected) layer. The input x has shape (N, d_1, ..., d_k) and contains a minibatch of N examples, where each example x[i] has shape (d_1, ..., d_k). We will reshape each input into a vector of dimension D = d_1 * ... * d_k, and then transform it to an output vector of dimension M. Inputs: - x: A numpy array containing input data, of shape (N, d_1, ..., d_k) - w: A numpy array of weights, of shape (D, M) - b: A numpy array of biases, of shape (M,) Returns a tuple of: - out: output, of shape (N, M) - cache: (x, w, b) """ out = None ########################################################################### # TODO: Implement the affine forward pass. Store the result in out. You # # will need to reshape the input into rows. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** temp_x = x.copy() temp_x = temp_x.reshape((x.shape[0], -1)) out = temp_x.dot(w) + b # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### cache = (x, w, b) return out, cache def affine_backward(dout, cache): """ Computes the backward pass for an affine layer. Inputs: - dout: Upstream derivative, of shape (N, M) - cache: Tuple of: - x: Input data, of shape (N, d_1, ... d_k) - w: Weights, of shape (D, M) - b: Biases, of shape (M,) Returns a tuple of: - dx: Gradient with respect to x, of shape (N, d1, ..., d_k) - dw: Gradient with respect to w, of shape (D, M) - db: Gradient with respect to b, of shape (M,) """ x, w, b = cache dx, dw, db = None, None, None ########################################################################### # TODO: Implement the affine backward pass. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** temp_x = x.reshape((x.shape[0], -1)) dx = dout.dot(w.T) dx = dx.reshape(x.shape) dw = temp_x.T.dot(dout) db = np.sum(dout, axis = 0) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx, dw, db def relu_forward(x): """ Computes the forward pass for a layer of rectified linear units (ReLUs). Input: - x: Inputs, of any shape Returns a tuple of: - out: Output, of the same shape as x - cache: x """ out = None ########################################################################### # TODO: Implement the ReLU forward pass. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** out = np.maximum(0, x) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### cache = x return out, cache def relu_backward(dout, cache): """ Computes the backward pass for a layer of rectified linear units (ReLUs). Input: - dout: Upstream derivatives, of any shape - cache: Input x, of same shape as dout Returns: - dx: Gradient with respect to x """ dx, x = None, cache ########################################################################### # TODO: Implement the ReLU backward pass. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** dx = dout dx[x <= 0] = 0 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx def batchnorm_forward(x, gamma, beta, bn_param): """ Forward pass for batch normalization. During training the sample mean and (uncorrected) sample variance are computed from minibatch statistics and used to normalize the incoming data. During training we also keep an exponentially decaying running mean of the mean and variance of each feature, and these averages are used to normalize data at test-time. At each timestep we update the running averages for mean and variance using an exponential decay based on the momentum parameter: running_mean = momentum * running_mean + (1 - momentum) * sample_mean running_var = momentum * running_var + (1 - momentum) * sample_var Note that the batch normalization paper suggests a different test-time behavior: they compute sample mean and variance for each feature using a large number of training images rather than using a running average. For this implementation we have chosen to use running averages instead since they do not require an additional estimation step; the torch7 implementation of batch normalization also uses running averages. Input: - x: Data of shape (N, D) - gamma: Scale parameter of shape (D,) - beta: Shift paremeter of shape (D,) - bn_param: Dictionary with the following keys: - mode: 'train' or 'test'; required - eps: Constant for numeric stability - momentum: Constant for running mean / variance. - running_mean: Array of shape (D,) giving running mean of features - running_var Array of shape (D,) giving running variance of features Returns a tuple of: - out: of shape (N, D) - cache: A tuple of values needed in the backward pass """ mode = bn_param['mode'] eps = bn_param.get('eps', 1e-5) momentum = bn_param.get('momentum', 0.9) N, D = x.shape running_mean = bn_param.get('running_mean', np.zeros(D, dtype=x.dtype)) running_var = bn_param.get('running_var', np.zeros(D, dtype=x.dtype)) out, cache = None, None if mode == 'train': ####################################################################### # TODO: Implement the training-time forward pass for batch norm. # # Use minibatch statistics to compute the mean and variance, use # # these statistics to normalize the incoming data, and scale and # # shift the normalized data using gamma and beta. # # # # You should store the output in the variable out. Any intermediates # # that you need for the backward pass should be stored in the cache # # variable. # # # # You should also use your computed sample mean and variance together # # with the momentum variable to update the running mean and running # # variance, storing your result in the running_mean and running_var # # variables. # # # # Note that though you should be keeping track of the running # # variance, you should normalize the data based on the standard # # deviation (square root of variance) instead! # # Referencing the original paper (https://arxiv.org/abs/1502.03167) # # might prove to be helpful. # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** mean = np.mean(x, axis = 0, keepdims = True) var = np.var(x, axis = 0, keepdims = True) xnorm = (x - mean)/np.sqrt(var + eps) out = gamma*xnorm + beta running_mean = momentum*running_mean + (1 - momentum)*mean running_var = momentum*running_var + (1 - momentum)*var cache = [x, gamma, mean, var, eps] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ####################################################################### # END OF YOUR CODE # ####################################################################### elif mode == 'test': ####################################################################### # TODO: Implement the test-time forward pass for batch normalization. # # Use the running mean and variance to normalize the incoming data, # # then scale and shift the normalized data using gamma and beta. # # Store the result in the out variable. # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** x = (x - running_mean)/np.sqrt(running_var + eps) out = gamma*x + beta # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ####################################################################### # END OF YOUR CODE # ####################################################################### else: raise ValueError('Invalid forward batchnorm mode "%s"' % mode) # Store the updated running means back into bn_param bn_param['running_mean'] = running_mean bn_param['running_var'] = running_var return out, cache def batchnorm_backward(dout, cache): """ Backward pass for batch normalization. For this implementation, you should write out a computation graph for batch normalization on paper and propagate gradients backward through intermediate nodes. Inputs: - dout: Upstream derivatives, of shape (N, D) - cache: Variable of intermediates from batchnorm_forward. Returns a tuple of: - dx: Gradient with respect to inputs x, of shape (N, D) - dgamma: Gradient with respect to scale parameter gamma, of shape (D,) - dbeta: Gradient with respect to shift parameter beta, of shape (D,) """ dx, dgamma, dbeta = None, None, None ########################################################################### # TODO: Implement the backward pass for batch normalization. Store the # # results in the dx, dgamma, and dbeta variables. # # Referencing the original paper (https://arxiv.org/abs/1502.03167) # # might prove to be helpful. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** x, gamma, mean, var, eps = cache xnorm = (x - mean)/np.sqrt(var + eps) std = np.sqrt(var + eps) N, D = x.shape dbeta = np.sum(dout, axis = 0, keepdims = True) dgamma = np.sum(xnorm*dout, axis = 0, keepdims = True) dy = dout * gamma.reshape(1, -1) dx1 = dy/std dx2 = -np.sum(dy/(std*N), axis = 0, keepdims = True) dx3 = -np.sum(dy*xnorm/std**2, axis = 0, keepdims = True)*((x - mean)/N - np.sum(x - mean, axis = 0, keepdims = True)/N**2) dx = dx1 + dx2 + dx3 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx, dgamma, dbeta def batchnorm_backward_alt(dout, cache): """ Alternative backward pass for batch normalization. For this implementation you should work out the derivatives for the batch normalizaton backward pass on paper and simplify as much as possible. You should be able to derive a simple expression for the backward pass. See the jupyter notebook for more hints. Note: This implementation should expect to receive the same cache variable as batchnorm_backward, but might not use all of the values in the cache. Inputs / outputs: Same as batchnorm_backward """ dx, dgamma, dbeta = None, None, None ########################################################################### # TODO: Implement the backward pass for batch normalization. Store the # # results in the dx, dgamma, and dbeta variables. # # # # After computing the gradient with respect to the centered inputs, you # # should be able to compute gradients with respect to the inputs in a # # single statement; our implementation fits on a single 80-character line.# ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** x, gamma, mean, var, eps = cache x_norm = (x - mean)/np.sqrt(var + eps) std = np.sqrt(var + eps) N, D = x.shape # out = x_norm*gamma+beta,这个正向代码时gamma和beta进行了广播 dbeta = np.sum(dout, axis=0, keepdims=True) # (1,D),这里sum因为广播 dgamma = np.sum(dout*x_norm, axis=0, keepdims=True) # (1,D),这里sum因为广播 dx_norm = dout*gamma #(N,D) ### 下面的求dvar,dmean,dx有些麻烦 # dvar可以直接通过求导公式计算 dvar = np.sum(dx_norm * -1.0/2*(x - mean)/(var + eps)**(3.0/2), axis=0, keepdims=True) # dmean有两个部分,var也是对于mean的函数 dmean1 = np.sum(dx_norm * -1.0/np.sqrt(var + eps), axis=0, keepdims=True) dmean2_var = dvar * -2.0/N*np.sum(x - mean, axis=0, keepdims=True) dmean = dmean1 + dmean2_var # dx有三个部分,meam和var都是对x的函数 dx1 = dx_norm * 1.0/np.sqrt(var + eps) dx2_mean = dmean * 1.0/N # (1,D) dx3_var = dvar * 2.0/N*(x-mean) dx = dx1 + dx2_mean + dx3_var # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx, dgamma, dbeta def layernorm_forward(x, gamma, beta, ln_param): """ Forward pass for layer normalization. During both training and test-time, the incoming data is normalized per data-point, before being scaled by gamma and beta parameters identical to that of batch normalization. Note that in contrast to batch normalization, the behavior during train and test-time for layer normalization are identical, and we do not need to keep track of running averages of any sort. Input: - x: Data of shape (N, D) - gamma: Scale parameter of shape (D,) - beta: Shift paremeter of shape (D,) - ln_param: Dictionary with the following keys: - eps: Constant for numeric stability Returns a tuple of: - out: of shape (N, D) - cache: A tuple of values needed in the backward pass """ out, cache = None, None eps = ln_param.get('eps', 1e-5) ########################################################################### # TODO: Implement the training-time forward pass for layer norm. # # Normalize the incoming data, and scale and shift the normalized data # # using gamma and beta. # # HINT: this can be done by slightly modifying your training-time # # implementation of batch normalization, and inserting a line or two of # # well-placed code. In particular, can you think of any matrix # # transformations you could perform, that would enable you to copy over # # the batch norm code and leave it almost unchanged? # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** mean = np.mean(x, axis = 1, keepdims = True) var = np.var(x, axis = 1, keepdims = True) std = np.sqrt(var + eps) xnorm = (x - mean)/std out = gamma*xnorm + beta cache = [x, mean, var, eps, gamma] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return out, cache def layernorm_backward(dout, cache): """ Backward pass for layer normalization. For this implementation, you can heavily rely on the work you've done already for batch normalization. Inputs: - dout: Upstream derivatives, of shape (N, D) - cache: Variable of intermediates from layernorm_forward. Returns a tuple of: - dx: Gradient with respect to inputs x, of shape (N, D) - dgamma: Gradient with respect to scale parameter gamma, of shape (D,) - dbeta: Gradient with respect to shift parameter beta, of shape (D,) """ dx, dgamma, dbeta = None, None, None ########################################################################### # TODO: Implement the backward pass for layer norm. # # # # HINT: this can be done by slightly modifying your training-time # # implementation of batch normalization. The hints to the forward pass # # still apply! # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** x, mean, var, eps, gamma = cache xnorm = (x - mean)/np.sqrt(var + eps) std = np.sqrt(var + eps) N, D = x.shape dbeta = np.sum(dout, axis = 0, keepdims = True) dgamma = np.sum(xnorm*dout, axis = 0, keepdims = True) dy = dout * gamma.reshape(1, -1) dx1 = dy/std dx2 = -np.sum(dy/(std*D), axis = 1, keepdims = True) dx3 = -np.sum(dy*xnorm/std**2, axis = 1, keepdims = True)*((x - mean)/D - np.sum(x - mean, axis = 1, keepdims = True)/D**2) dx = dx1 + dx2 + dx3 # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx, dgamma, dbeta def dropout_forward(x, dropout_param): """ Performs the forward pass for (inverted) dropout. Inputs: - x: Input data, of any shape - dropout_param: A dictionary with the following keys: - p: Dropout parameter. We keep each neuron output with probability p. - mode: 'test' or 'train'. If the mode is train, then perform dropout; if the mode is test, then just return the input. - seed: Seed for the random number generator. Passing seed makes this function deterministic, which is needed for gradient checking but not in real networks. Outputs: - out: Array of the same shape as x. - cache: tuple (dropout_param, mask). In training mode, mask is the dropout mask that was used to multiply the input; in test mode, mask is None. NOTE: Please implement **inverted** dropout, not the vanilla version of dropout. See http://cs231n.github.io/neural-networks-2/#reg for more details. NOTE 2: Keep in mind that p is the probability of **keep** a neuron output; this might be contrary to some sources, where it is referred to as the probability of dropping a neuron output. """ p, mode = dropout_param['p'], dropout_param['mode'] if 'seed' in dropout_param: np.random.seed(dropout_param['seed']) mask = None out = None if mode == 'train': ####################################################################### # TODO: Implement training phase forward pass for inverted dropout. # # Store the dropout mask in the mask variable. # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** mask = np.ones((1, x.shape[1])) prop = np.random.rand(1, x.shape[1]) mask[prop < p] = 0 out = x*mask/p # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ####################################################################### # END OF YOUR CODE # ####################################################################### elif mode == 'test': ####################################################################### # TODO: Implement the test phase forward pass for inverted dropout. # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** out = x # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ####################################################################### # END OF YOUR CODE # ####################################################################### cache = (dropout_param, mask) out = out.astype(x.dtype, copy=False) return out, cache def dropout_backward(dout, cache): """ Perform the backward pass for (inverted) dropout. Inputs: - dout: Upstream derivatives, of any shape - cache: (dropout_param, mask) from dropout_forward. """ dropout_param, mask = cache mode = dropout_param['mode'] dx = None if mode == 'train': ####################################################################### # TODO: Implement training phase backward pass for inverted dropout # ####################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** dx = dout*mask/dropout_param['p'] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ####################################################################### # END OF YOUR CODE # ####################################################################### elif mode == 'test': dx = dout return dx def conv_forward_naive(x, w, b, conv_param): """ A naive implementation of the forward pass for a convolutional layer. The input consists of N data points, each with C channels, height H and width W. We convolve each input with F different filters, where each filter spans all C channels and has height HH and width WW. Input: - x: Input data of shape (N, C, H, W) - w: Filter weights of shape (F, C, HH, WW) - b: Biases, of shape (F,) - conv_param: A dictionary with the following keys: - 'stride': The number of pixels between adjacent receptive fields in the horizontal and vertical directions. - 'pad': The number of pixels that will be used to zero-pad the input. During padding, 'pad' zeros should be placed symmetrically (i.e equally on both sides) along the height and width axes of the input. Be careful not to modfiy the original input x directly. Returns a tuple of: - out: Output data, of shape (N, F, H', W') where H' and W' are given by H' = 1 + (H + 2 * pad - HH) / stride W' = 1 + (W + 2 * pad - WW) / stride - cache: (x, w, b, conv_param) """ out = None ########################################################################### # TODO: Implement the convolutional forward pass. # # Hint: you can use the function np.pad for padding. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** stride = conv_param['stride'] pad = conv_param['pad'] N, C, H, W = x.shape F, C, HH, WW = w.shape H_ = int((H + 2*pad - HH)/stride + 1) W_ = int((W + 2*pad - WW)/stride + 1) out = np.zeros((N, F, H_, W_)) x_pad = np.pad(x, ((0, 0), (0, 0), (pad, pad), (pad, pad)), 'constant', constant_values = 0) for f in range(F): for i in range(H_): for j in range(W_): x_conv = x_pad[:, :, i*stride:(i*stride + HH), j*stride:(j*stride + WW)]*w[f, :, :, :] out[:, f, i, j] = np.sum(x_conv, axis = (1,2,3), keepdims = False)+b[f] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### cache = (x, w, b, conv_param) return out, cache def conv_backward_naive(dout, cache): """ A naive implementation of the backward pass for a convolutional layer. Inputs: - dout: Upstream derivatives. - cache: A tuple of (x, w, b, conv_param) as in conv_forward_naive Returns a tuple of: - dx: Gradient with respect to x - dw: Gradient with respect to w - db: Gradient with respect to b """ dx, dw, db = None, None, None ########################################################################### # TODO: Implement the convolutional backward pass. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** x, w, b, conv_param = cache stride = conv_param['stride'] pad = conv_param['pad'] x_pad = np.pad(x, ((0, 0), (0, 0), (pad, pad), (pad, pad)), 'constant', constant_values = 0) N, C, H, W = x.shape F, C, HH, WW = w.shape H_ = int((H + 2*pad - HH)/stride + 1) W_ = int((W + 2*pad - WW)/stride + 1) dx_pad = np.zeros((N, C, H+pad*2, W+pad*2)) dw = np.zeros((F, C, HH, WW)) for f in range(F): for i in range(H_): for j in range(W_): temp = x_pad[:, :, i*stride:(i*stride + HH), j*stride:(j*stride + WW)]*dout[:, f, i, j].reshape(-1,1,1,1) dw[f, :, :, :] += np.sum(temp, axis = 0, keepdims = False) dx_pad[:, :, i*stride:(i*stride + HH), j*stride:(j*stride + WW)] += w[f, :, :, :]*dout[:, f, i, j].reshape(-1,1,1,1) dx = dx_pad[:, :, pad:-pad, pad:-pad] db = np.sum(dout, axis = (0,2,3)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx, dw, db def max_pool_forward_naive(x, pool_param): """ A naive implementation of the forward pass for a max-pooling layer. Inputs: - x: Input data, of shape (N, C, H, W) - pool_param: dictionary with the following keys: - 'pool_height': The height of each pooling region - 'pool_width': The width of each pooling region - 'stride': The distance between adjacent pooling regions No padding is necessary here. Output size is given by Returns a tuple of: - out: Output data, of shape (N, C, H', W') where H' and W' are given by H' = 1 + (H - pool_height) / stride W' = 1 + (W - pool_width) / stride - cache: (x, pool_param) """ out = None ########################################################################### # TODO: Implement the max-pooling forward pass # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** pool_height = pool_param['pool_height'] pool_width = pool_param['pool_width'] stride = pool_param['stride'] N, C, H, W = x.shape H_ = int((H - pool_height)/stride + 1) W_ = int((W - pool_width)/stride + 1) out = np.zeros((N, C, H_, W_)) for i in range(H_): for j in range(W_): temp = x[:, :, i*stride:(i*stride+pool_height), j*stride:(j*stride+pool_width)] out[:, :, i, j] = np.max(temp, axis = (2,3)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### cache = (x, pool_param) return out, cache def max_pool_backward_naive(dout, cache): """ A naive implementation of the backward pass for a max-pooling layer. Inputs: - dout: Upstream derivatives - cache: A tuple of (x, pool_param) as in the forward pass. Returns: - dx: Gradient with respect to x """ dx = None ########################################################################### # TODO: Implement the max-pooling backward pass # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** x, pool_param = cache pool_height = pool_param['pool_height'] pool_width = pool_param['pool_width'] stride = pool_param['stride'] N, C, H, W = x.shape H_ = int((H - pool_height)/stride + 1) W_ = int((W - pool_width)/stride + 1) assert dout.shape == (N, C, H_, W_) dx = np.zeros((N, C, H, W)) for n in range(N): for c in range(C): for i in range(H_): for j in range(W_): temp = x[n, c, i*stride:(i*stride+pool_height), j*stride:(j*stride+pool_width)] row, col = np.where(temp == np.max(temp)) dx[n, c, i*stride + int(row), j*stride + int(col)] = dout[n, c, i, j] # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx def spatial_batchnorm_forward(x, gamma, beta, bn_param): """ Computes the forward pass for spatial batch normalization. Inputs: - x: Input data of shape (N, C, H, W) - gamma: Scale parameter, of shape (C,) - beta: Shift parameter, of shape (C,) - bn_param: Dictionary with the following keys: - mode: 'train' or 'test'; required - eps: Constant for numeric stability - momentum: Constant for running mean / variance. momentum=0 means that old information is discarded completely at every time step, while momentum=1 means that new information is never incorporated. The default of momentum=0.9 should work well in most situations. - running_mean: Array of shape (D,) giving running mean of features - running_var Array of shape (D,) giving running variance of features Returns a tuple of: - out: Output data, of shape (N, C, H, W) - cache: Values needed for the backward pass """ out, cache = None, None ########################################################################### # TODO: Implement the forward pass for spatial batch normalization. # # # # HINT: You can implement spatial batch normalization by calling the # # vanilla version of batch normalization you implemented above. # # Your implementation should be very short; ours is less than five lines. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** N, C, H, W = x.shape temp_x = np.transpose(x, (0,2,3,1)).reshape(-1, C) out, cache = batchnorm_forward(temp_x, gamma, beta, bn_param) out = np.transpose(out.reshape(N, H, W, C), (0,3,1,2)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return out, cache def spatial_batchnorm_backward(dout, cache): """ Computes the backward pass for spatial batch normalization. Inputs: - dout: Upstream derivatives, of shape (N, C, H, W) - cache: Values from the forward pass Returns a tuple of: - dx: Gradient with respect to inputs, of shape (N, C, H, W) - dgamma: Gradient with respect to scale parameter, of shape (C,) - dbeta: Gradient with respect to shift parameter, of shape (C,) """ dx, dgamma, dbeta = None, None, None ########################################################################### # TODO: Implement the backward pass for spatial batch normalization. # # # # HINT: You can implement spatial batch normalization by calling the # # vanilla version of batch normalization you implemented above. # # Your implementation should be very short; ours is less than five lines. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** N, C, H, W = dout.shape temp_dout = np.transpose(dout, (0,2,3,1)).reshape(-1, C) dx, dgamma, dbeta = batchnorm_backward_alt(temp_dout, cache) dx = np.transpose(dx.reshape(N, H, W, C), (0,3,1,2)) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx, dgamma, dbeta def spatial_groupnorm_forward(x, gamma, beta, G, gn_param): """ Computes the forward pass for spatial group normalization. In contrast to layer normalization, group normalization splits each entry in the data into G contiguous pieces, which it then normalizes independently. Per feature shifting and scaling are then applied to the data, in a manner identical to that of batch normalization and layer normalization. Inputs: - x: Input data of shape (N, C, H, W) - gamma: Scale parameter, of shape (C,) - beta: Shift parameter, of shape (C,) - G: Integer mumber of groups to split into, should be a divisor of C - gn_param: Dictionary with the following keys: - eps: Constant for numeric stability Returns a tuple of: - out: Output data, of shape (N, C, H, W) - cache: Values needed for the backward pass """ out, cache = None, None eps = gn_param.get('eps',1e-5) ########################################################################### # TODO: Implement the forward pass for spatial group normalization. # # This will be extremely similar to the layer norm implementation. # # In particular, think about how you could transform the matrix so that # # the bulk of the code is similar to both train-time batch normalization # # and layer normalization! # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** N, C, H, W = x.shape param = {'eps': eps} stride = int(C/G) x_norm = np.zeros(x.shape) cache = [] for i in range(G): x_temp = x[:, i*stride:(i+1)*stride, :, :] mean = np.mean(x_temp, axis = (1, 2, 3), keepdims = True) var = np.var(x_temp, axis = (1, 2, 3), keepdims = True) std = np.sqrt(var + eps) xnorm = (x_temp - mean)/std x_norm[:, i*stride:(i+1)*stride, :, :] = xnorm cache_temp = [x_temp, mean, var, eps] cache.append(cache_temp) out = gamma*x_norm + beta cache.append(gamma) cache.append(x_norm) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return out, cache def spatial_groupnorm_backward(dout, cache): """ Computes the backward pass for spatial group normalization. Inputs: - dout: Upstream derivatives, of shape (N, C, H, W) - cache: Values from the forward pass Returns a tuple of: - dx: Gradient with respect to inputs, of shape (N, C, H, W) - dgamma: Gradient with respect to scale parameter, of shape (C,) - dbeta: Gradient with respect to shift parameter, of shape (C,) """ dx, dgamma, dbeta = None, None, None ########################################################################### # TODO: Implement the backward pass for spatial group normalization. # # This will be extremely similar to the layer norm implementation. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** G = len(cache) - 2 x_norm = cache[-1] gamma = cache[-2] N, C, H, W = dout.shape dx = np.zeros(dout.shape) dgamma = np.sum(x_norm*dout, axis =(0, 2, 3), keepdims = True) dbeta = np.sum(dout, axis = (0, 2, 3), keepdims = True) dxnorm = dout*gamma for i in range(G): x, mean, var, eps = cache[i] stride = int(C/G) D = stride*H*W xnorm = (x - mean)/np.sqrt(var + eps) std = np.sqrt(var + eps) dy = dxnorm[:, i*stride:(i+1)*stride, :, :].reshape((N, -1, H, W)) dx1 = dy/std dx2 = -np.sum(dy/(std*D), axis = (1, 2, 3), keepdims = True) dx3 = -np.sum(dy*xnorm/std**2, axis = (1, 2, 3), keepdims = True)*((x - mean)/D - np.sum(x - mean, axis = (1, 2, 3), keepdims = True)/D**2) dx_ = dx1 + dx2 + dx3 dx[:, i*stride:(i+1)*stride, :, :] = dx_ # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return dx, dgamma, dbeta def svm_loss(x, y): """ Computes the loss and gradient using for multiclass SVM classification. Inputs: - x: Input data, of shape (N, C) where x[i, j] is the score for the jth class for the ith input. - y: Vector of labels, of shape (N,) where y[i] is the label for x[i] and 0 <= y[i] < C Returns a tuple of: - loss: Scalar giving the loss - dx: Gradient of the loss with respect to x """ N = x.shape[0] correct_class_scores = x[np.arange(N), y] margins = np.maximum(0, x - correct_class_scores[:, np.newaxis] + 1.0) margins[np.arange(N), y] = 0 loss = np.sum(margins) / N num_pos = np.sum(margins > 0, axis=1) dx = np.zeros_like(x) dx[margins > 0] = 1 dx[np.arange(N), y] -= num_pos dx /= N return loss, dx def softmax_loss(x, y): """ Computes the loss and gradient for softmax classification. Inputs: - x: Input data, of shape (N, C) where x[i, j] is the score for the jth class for the ith input. - y: Vector of labels, of shape (N,) where y[i] is the label for x[i] and 0 <= y[i] < C Returns a tuple of: - loss: Scalar giving the loss - dx: Gradient of the loss with respect to x """ shifted_logits = x - np.max(x, axis=1, keepdims=True) Z = np.sum(np.exp(shifted_logits), axis=1, keepdims=True) log_probs = shifted_logits - np.log(Z) probs = np.exp(log_probs) N = x.shape[0] loss = -np.sum(log_probs[np.arange(N), y]) / N dx = probs.copy() dx[np.arange(N), y] -= 1 dx /= N return loss, dx ================================================ FILE: assignment2/cs231n/optim.py ================================================ import numpy as np """ This file implements various first-order update rules that are commonly used for training neural networks. Each update rule accepts current weights and the gradient of the loss with respect to those weights and produces the next set of weights. Each update rule has the same interface: def update(w, dw, config=None): Inputs: - w: A numpy array giving the current weights. - dw: A numpy array of the same shape as w giving the gradient of the loss with respect to w. - config: A dictionary containing hyperparameter values such as learning rate, momentum, etc. If the update rule requires caching values over many iterations, then config will also hold these cached values. Returns: - next_w: The next point after the update. - config: The config dictionary to be passed to the next iteration of the update rule. NOTE: For most update rules, the default learning rate will probably not perform well; however the default values of the other hyperparameters should work well for a variety of different problems. For efficiency, update rules may perform in-place updates, mutating w and setting next_w equal to w. """ def sgd(w, dw, config=None): """ Performs vanilla stochastic gradient descent. config format: - learning_rate: Scalar learning rate. """ if config is None: config = {} config.setdefault('learning_rate', 1e-2) w -= config['learning_rate'] * dw return w, config def sgd_momentum(w, dw, config=None): """ Performs stochastic gradient descent with momentum. config format: - learning_rate: Scalar learning rate. - momentum: Scalar between 0 and 1 giving the momentum value. Setting momentum = 0 reduces to sgd. - velocity: A numpy array of the same shape as w and dw used to store a moving average of the gradients. """ if config is None: config = {} config.setdefault('learning_rate', 1e-2) config.setdefault('momentum', 0.9) v = config.get('velocity', np.zeros_like(w)) next_w = None ########################################################################### # TODO: Implement the momentum update formula. Store the updated value in # # the next_w variable. You should also use and update the velocity v. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** v = config['momentum']*v - config['learning_rate']*dw next_w = w + v # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### config['velocity'] = v return next_w, config def rmsprop(w, dw, config=None): """ Uses the RMSProp update rule, which uses a moving average of squared gradient values to set adaptive per-parameter learning rates. config format: - learning_rate: Scalar learning rate. - decay_rate: Scalar between 0 and 1 giving the decay rate for the squared gradient cache. - epsilon: Small scalar used for smoothing to avoid dividing by zero. - cache: Moving average of second moments of gradients. """ if config is None: config = {} config.setdefault('learning_rate', 1e-2) config.setdefault('decay_rate', 0.99) config.setdefault('epsilon', 1e-8) config.setdefault('cache', np.zeros_like(w)) next_w = None ########################################################################### # TODO: Implement the RMSprop update formula, storing the next value of w # # in the next_w variable. Don't forget to update cache value stored in # # config['cache']. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** cache = config['decay_rate']*config['cache'] + (1-config['decay_rate'])*dw*dw config['cache'] = cache next_w = w - config['learning_rate']*dw/(np.sqrt(cache)+config['epsilon']) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return next_w, config def adam(w, dw, config=None): """ Uses the Adam update rule, which incorporates moving averages of both the gradient and its square and a bias correction term. config format: - learning_rate: Scalar learning rate. - beta1: Decay rate for moving average of first moment of gradient. - beta2: Decay rate for moving average of second moment of gradient. - epsilon: Small scalar used for smoothing to avoid dividing by zero. - m: Moving average of gradient. - v: Moving average of squared gradient. - t: Iteration number. """ if config is None: config = {} config.setdefault('learning_rate', 1e-3) config.setdefault('beta1', 0.9) config.setdefault('beta2', 0.999) config.setdefault('epsilon', 1e-8) config.setdefault('m', np.zeros_like(w)) config.setdefault('v', np.zeros_like(w)) config.setdefault('t', 0) next_w = None ########################################################################### # TODO: Implement the Adam update formula, storing the next value of w in # # the next_w variable. Don't forget to update the m, v, and t variables # # stored in config. # # # # NOTE: In order to match the reference output, please modify t _before_ # # using it in any calculations. # ########################################################################### # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** m = config['m']*config['beta1'] + dw*(1-config['beta1']) v = config['v']*config['beta2'] + dw*dw*(1-config['beta2']) config['m'] = m config['v'] = v t = config['t'] + 1 mt = m/(1 - config['beta1']**t) vt = v/(1 - config['beta2']**t) config['t'] = t next_w = w - config['learning_rate']*mt/(np.sqrt(vt)+config['epsilon']) # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** ########################################################################### # END OF YOUR CODE # ########################################################################### return next_w, config ================================================ FILE: assignment2/cs231n/setup.py ================================================ from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize import numpy extensions = [ Extension('im2col_cython', ['im2col_cython.pyx'], include_dirs = [numpy.get_include()] ), ] setup( ext_modules = cythonize(extensions), ) ================================================ FILE: assignment2/cs231n/solver.py ================================================ from __future__ import print_function, division from future import standard_library standard_library.install_aliases() from builtins import range from builtins import object import os import pickle as pickle import numpy as np from cs231n import optim class Solver(object): """ A Solver encapsulates all the logic necessary for training classification models. The Solver performs stochastic gradient descent using different update rules defined in optim.py. The solver accepts both training and validataion data and labels so it can periodically check classification accuracy on both training and validation data to watch out for overfitting. To train a model, you will first construct a Solver instance, passing the model, dataset, and various options (learning rate, batch size, etc) to the constructor. You will then call the train() method to run the optimization procedure and train the model. After the train() method returns, model.params will contain the parameters that performed best on the validation set over the course of training. In addition, the instance variable solver.loss_history will contain a list of all losses encountered during training and the instance variables solver.train_acc_history and solver.val_acc_history will be lists of the accuracies of the model on the training and validation set at each epoch. Example usage might look something like this: data = { 'X_train': # training data 'y_train': # training labels 'X_val': # validation data 'y_val': # validation labels } model = MyAwesomeModel(hidden_size=100, reg=10) solver = Solver(model, data, update_rule='sgd', optim_config={ 'learning_rate': 1e-3, }, lr_decay=0.95, num_epochs=10, batch_size=100, print_every=100) solver.train() A Solver works on a model object that must conform to the following API: - model.params must be a dictionary mapping string parameter names to numpy arrays containing parameter values. - model.loss(X, y) must be a function that computes training-time loss and gradients, and test-time classification scores, with the following inputs and outputs: Inputs: - X: Array giving a minibatch of input data of shape (N, d_1, ..., d_k) - y: Array of labels, of shape (N,) giving labels for X where y[i] is the label for X[i]. Returns: If y is None, run a test-time forward pass and return: - scores: Array of shape (N, C) giving classification scores for X where scores[i, c] gives the score of class c for X[i]. If y is not None, run a training time forward and backward pass and return a tuple of: - loss: Scalar giving the loss - grads: Dictionary with the same keys as self.params mapping parameter names to gradients of the loss with respect to those parameters. """ def __init__(self, model, data, **kwargs): """ Construct a new Solver instance. Required arguments: - model: A model object conforming to the API described above - data: A dictionary of training and validation data containing: 'X_train': Array, shape (N_train, d_1, ..., d_k) of training images 'X_val': Array, shape (N_val, d_1, ..., d_k) of validation images 'y_train': Array, shape (N_train,) of labels for training images 'y_val': Array, shape (N_val,) of labels for validation images Optional arguments: - update_rule: A string giving the name of an update rule in optim.py. Default is 'sgd'. - optim_config: A dictionary containing hyperparameters that will be passed to the chosen update rule. Each update rule requires different hyperparameters (see optim.py) but all update rules require a 'learning_rate' parameter so that should always be present. - lr_decay: A scalar for learning rate decay; after each epoch the learning rate is multiplied by this value. - batch_size: Size of minibatches used to compute loss and gradient during training. - num_epochs: The number of epochs to run for during training. - print_every: Integer; training losses will be printed every print_every iterations. - verbose: Boolean; if set to false then no output will be printed during training. - num_train_samples: Number of training samples used to check training accuracy; default is 1000; set to None to use entire training set. - num_val_samples: Number of validation samples to use to check val accuracy; default is None, which uses the entire validation set. - checkpoint_name: If not None, then save model checkpoints here every epoch. """ self.model = model self.X_train = data['X_train'] self.y_train = data['y_train'] self.X_val = data['X_val'] self.y_val = data['y_val'] # Unpack keyword arguments self.update_rule = kwargs.pop('update_rule', 'sgd') self.optim_config = kwargs.pop('optim_config', {}) self.lr_decay = kwargs.pop('lr_decay', 1.0) self.batch_size = kwargs.pop('batch_size', 100) self.num_epochs = kwargs.pop('num_epochs', 10) self.num_train_samples = kwargs.pop('num_train_samples', 1000) self.num_val_samples = kwargs.pop('num_val_samples', None) self.checkpoint_name = kwargs.pop('checkpoint_name', None) self.print_every = kwargs.pop('print_every', 10) self.verbose = kwargs.pop('verbose', True) # Throw an error if there are extra keyword arguments if len(kwargs) > 0: extra = ', '.join('"%s"' % k for k in list(kwargs.keys())) raise ValueError('Unrecognized arguments %s' % extra) # Make sure the update rule exists, then replace the string # name with the actual function if not hasattr(optim, self.update_rule): raise ValueError('Invalid update_rule "%s"' % self.update_rule) self.update_rule = getattr(optim, self.update_rule) self._reset() def _reset(self): """ Set up some book-keeping variables for optimization. Don't call this manually. """ # Set up some variables for book-keeping self.epoch = 0 self.best_val_acc = 0 self.best_params = {} self.loss_history = [] self.train_acc_history = [] self.val_acc_history = [] # Make a deep copy of the optim_config for each parameter self.optim_configs = {} for p in self.model.params: d = {k: v for k, v in self.optim_config.items()} self.optim_configs[p] = d def _step(self): """ Make a single gradient update. This is called by train() and should not be called manually. """ # Make a minibatch of training data num_train = self.X_train.shape[0] batch_mask = np.random.choice(num_train, self.batch_size) X_batch = self.X_train[batch_mask] y_batch = self.y_train[batch_mask] # Compute loss and gradient loss, grads = self.model.loss(X_batch, y_batch) self.loss_history.append(loss) # Perform a parameter update for p, w in self.model.params.items(): dw = grads[p] config = self.optim_configs[p] next_w, next_config = self.update_rule(w, dw, config) self.model.params[p] = next_w self.optim_configs[p] = next_config def _save_checkpoint(self): if self.checkpoint_name is None: return checkpoint = { 'model': self.model, 'update_rule': self.update_rule, 'lr_decay': self.lr_decay, 'optim_config': self.optim_config, 'batch_size': self.batch_size, 'num_train_samples': self.num_train_samples, 'num_val_samples': self.num_val_samples, 'epoch': self.epoch, 'loss_history': self.loss_history, 'train_acc_history': self.train_acc_history, 'val_acc_history': self.val_acc_history, } filename = '%s_epoch_%d.pkl' % (self.checkpoint_name, self.epoch) if self.verbose: print('Saving checkpoint to "%s"' % filename) with open(filename, 'wb') as f: pickle.dump(checkpoint, f) def check_accuracy(self, X, y, num_samples=None, batch_size=100): """ Check accuracy of the model on the provided data. Inputs: - X: Array of data, of shape (N, d_1, ..., d_k) - y: Array of labels, of shape (N,) - num_samples: If not None, subsample the data and only test the model on num_samples datapoints. - batch_size: Split X and y into batches of this size to avoid using too much memory. Returns: - acc: Scalar giving the fraction of instances that were correctly classified by the model. """ # Maybe subsample the data N = X.shape[0] if num_samples is not None and N > num_samples: mask = np.random.choice(N, num_samples) N = num_samples X = X[mask] y = y[mask] # Compute predictions in batches num_batches = N // batch_size if N % batch_size != 0: num_batches += 1 y_pred = [] for i in range(num_batches): start = i * batch_size end = (i + 1) * batch_size scores = self.model.loss(X[start:end]) y_pred.append(np.argmax(scores, axis=1)) y_pred = np.hstack(y_pred) acc = np.mean(y_pred == y) return acc def train(self): """ Run optimization to train the model. """ num_train = self.X_train.shape[0] iterations_per_epoch = max(num_train // self.batch_size, 1) num_iterations = self.num_epochs * iterations_per_epoch for t in range(num_iterations): self._step() # Maybe print training loss if self.verbose and t % self.print_every == 0: print('(Iteration %d / %d) loss: %f' % ( t + 1, num_iterations, self.loss_history[-1])) # At the end of every epoch, increment the epoch counter and decay # the learning rate. epoch_end = (t + 1) % iterations_per_epoch == 0 if epoch_end: self.epoch += 1 for k in self.optim_configs: self.optim_configs[k]['learning_rate'] *= self.lr_decay # Check train and val accuracy on the first iteration, the last # iteration, and at the end of each epoch. first_it = (t == 0) last_it = (t == num_iterations - 1) if first_it or last_it or epoch_end: train_acc = self.check_accuracy(self.X_train, self.y_train, num_samples=self.num_train_samples) val_acc = self.check_accuracy(self.X_val, self.y_val, num_samples=self.num_val_samples) self.train_acc_history.append(train_acc) self.val_acc_history.append(val_acc) self._save_checkpoint() if self.verbose: print('(Epoch %d / %d) train acc: %f; val_acc: %f' % ( self.epoch, self.num_epochs, train_acc, val_acc)) # Keep track of the best model if val_acc > self.best_val_acc: self.best_val_acc = val_acc self.best_params = {} for k, v in self.model.params.items(): self.best_params[k] = v.copy() # At the end of training swap the best params into the model self.model.params = self.best_params ================================================ FILE: assignment2/cs231n/vis_utils.py ================================================ from builtins import range from past.builtins import xrange from math import sqrt, ceil import numpy as np def visualize_grid(Xs, ubound=255.0, padding=1): """ Reshape a 4D tensor of image data to a grid for easy visualization. Inputs: - Xs: Data of shape (N, H, W, C) - ubound: Output grid will have values scaled to the range [0, ubound] - padding: The number of blank pixels between elements of the grid """ (N, H, W, C) = Xs.shape grid_size = int(ceil(sqrt(N))) grid_height = H * grid_size + padding * (grid_size - 1) grid_width = W * grid_size + padding * (grid_size - 1) grid = np.zeros((grid_height, grid_width, C)) next_idx = 0 y0, y1 = 0, H for y in range(grid_size): x0, x1 = 0, W for x in range(grid_size): if next_idx < N: img = Xs[next_idx] low, high = np.min(img), np.max(img) grid[y0:y1, x0:x1] = ubound * (img - low) / (high - low) # grid[y0:y1, x0:x1] = Xs[next_idx] next_idx += 1 x0 += W + padding x1 += W + padding y0 += H + padding y1 += H + padding # grid_max = np.max(grid) # grid_min = np.min(grid) # grid = ubound * (grid - grid_min) / (grid_max - grid_min) return grid def vis_grid(Xs): """ visualize a grid of images """ (N, H, W, C) = Xs.shape A = int(ceil(sqrt(N))) G = np.ones((A*H+A, A*W+A, C), Xs.dtype) G *= np.min(Xs) n = 0 for y in range(A): for x in range(A): if n < N: G[y*H+y:(y+1)*H+y, x*W+x:(x+1)*W+x, :] = Xs[n,:,:,:] n += 1 # normalize to [0,1] maxg = G.max() ming = G.min() G = (G - ming)/(maxg-ming) return G def vis_nn(rows): """ visualize array of arrays of images """ N = len(rows) D = len(rows[0]) H,W,C = rows[0][0].shape Xs = rows[0][0] G = np.ones((N*H+N, D*W+D, C), Xs.dtype) for y in range(N): for x in range(D): G[y*H+y:(y+1)*H+y, x*W+x:(x+1)*W+x, :] = rows[y][x] # normalize to [0,1] maxg = G.max() ming = G.min() G = (G - ming)/(maxg-ming) return G ================================================ FILE: assignment2/frameworkpython ================================================ #!/bin/bash # what real Python executable to use #PYVER=2.7 #PATHTOPYTHON=/usr/local/bin/ #PYTHON=${PATHTOPYTHON}python${PYVER} PYTHON=$(which $(readlink .env/bin/python)) # only works with python3 # find the root of the virtualenv, it should be the parent of the dir this script is in ENV=`$PYTHON -c "import os; print(os.path.abspath(os.path.join(os.path.dirname(\"$0\"), '..')))"` # now run Python with the virtualenv set as Python's HOME export PYTHONHOME=$ENV exec $PYTHON "$@" ================================================ FILE: assignment2/requirements.txt ================================================ absl-py==0.7.1 astor==0.7.1 attrs==19.1.0 backcall==0.1.0 bleach==3.1.0 cycler==0.10.0 Cython==0.29.7 decorator==4.4.0 defusedxml==0.6.0 entrypoints==0.3 future==0.17.1 gast==0.2.2 google-pasta==0.1.5 grpcio==1.20.0 h5py==2.9.0 imageio==2.5.0 ipykernel==5.1.0 ipython==7.4.0 ipython-genutils==0.2.0 ipywidgets==7.4.2 jedi==0.13.3 Jinja2==2.10.1 jsonschema==3.0.1 jupyter==1.0.0 jupyter-client==5.2.4 jupyter-console==6.0.0 jupyter-core==4.4.0 Keras==2.2.4 Keras-Applications==1.0.7 Keras-Preprocessing==1.0.9 kiwisolver==1.0.1 Markdown==3.1 MarkupSafe==1.1.1 matplotlib==3.0.3 mistune==0.8.4 nbconvert==5.4.1 nbformat==4.4.0 notebook==5.7.8 numexpr==2.6.9 numpy==1.16.2 pandocfilters==1.4.2 parso==0.4.0 pexpect==4.7.0 pickleshare==0.7.5 Pillow==6.0.0 prometheus-client==0.6.0 prompt-toolkit==2.0.9 protobuf==3.7.1 ptyprocess==0.6.0 Pygments==2.3.1 pyparsing==2.4.0 pyrsistent==0.14.11 python-dateutil==2.8.0 PyYAML==5.1 pyzmq==18.0.1 qtconsole==4.4.3 scipy==1.2.1 Send2Trash==1.5.0 six==1.12.0 # Add this line if you want GPU support for tensorflow! # tensorflow-gpu==2.0.0a0 tensorflow==2.0.0a0 termcolor==1.1.0 terminado==0.8.2 testpath==0.4.2 torch==1.0.1.post2 torchvision==0.2.2.post3 tornado==6.0.2 traitlets==4.3.2 wcwidth==0.1.7 webencodings==0.5.1 Werkzeug==0.15.2 widgetsnbextension==3.4.2 ================================================ FILE: assignment2/start_ipython_osx.sh ================================================ # Assume the virtualenv is called .env cp frameworkpython .env/bin .env/bin/frameworkpython -m IPython notebook ================================================ FILE: assignment3/Generative_Adversarial_Networks_PyTorch.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Generative Adversarial Networks (GANs)\n", "\n", "So far in CS231N, all the applications of neural networks that we have explored have been **discriminative models** that take an input and are trained to produce a labeled output. This has ranged from straightforward classification of image categories to sentence generation (which was still phrased as a classification problem, our labels were in vocabulary space and we’d learned a recurrence to capture multi-word labels). In this notebook, we will expand our repetoire, and build **generative models** using neural networks. Specifically, we will learn how to build models which generate novel images that resemble a set of training images.\n", "\n", "### What is a GAN?\n", "\n", "In 2014, [Goodfellow et al.](https://arxiv.org/abs/1406.2661) presented a method for training generative models called Generative Adversarial Networks (GANs for short). In a GAN, we build two different neural networks. Our first network is a traditional classification network, called the **discriminator**. We will train the discriminator to take images, and classify them as being real (belonging to the training set) or fake (not present in the training set). Our other network, called the **generator**, will take random noise as input and transform it using a neural network to produce images. The goal of the generator is to fool the discriminator into thinking the images it produced are real.\n", "\n", "We can think of this back and forth process of the generator ($G$) trying to fool the discriminator ($D$), and the discriminator trying to correctly classify real vs. fake as a minimax game:\n", "$$\\underset{G}{\\text{minimize}}\\; \\underset{D}{\\text{maximize}}\\; \\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\log D(x)\\right] + \\mathbb{E}_{z \\sim p(z)}\\left[\\log \\left(1-D(G(z))\\right)\\right]$$\n", "where $z \\sim p(z)$ are the random noise samples, $G(z)$ are the generated images using the neural network generator $G$, and $D$ is the output of the discriminator, specifying the probability of an input being real. In [Goodfellow et al.](https://arxiv.org/abs/1406.2661), they analyze this minimax game and show how it relates to minimizing the Jensen-Shannon divergence between the training data distribution and the generated samples from $G$.\n", "\n", "To optimize this minimax game, we will aternate between taking gradient *descent* steps on the objective for $G$, and gradient *ascent* steps on the objective for $D$:\n", "1. update the **generator** ($G$) to minimize the probability of the __discriminator making the correct choice__. \n", "2. update the **discriminator** ($D$) to maximize the probability of the __discriminator making the correct choice__.\n", "\n", "While these updates are useful for analysis, they do not perform well in practice. Instead, we will use a different objective when we update the generator: maximize the probability of the **discriminator making the incorrect choice**. This small change helps to allevaiate problems with the generator gradient vanishing when the discriminator is confident. This is the standard update used in most GAN papers, and was used in the original paper from [Goodfellow et al.](https://arxiv.org/abs/1406.2661). \n", "\n", "In this assignment, we will alternate the following updates:\n", "1. Update the generator ($G$) to maximize the probability of the discriminator making the incorrect choice on generated data:\n", "$$\\underset{G}{\\text{maximize}}\\; \\mathbb{E}_{z \\sim p(z)}\\left[\\log D(G(z))\\right]$$\n", "2. Update the discriminator ($D$), to maximize the probability of the discriminator making the correct choice on real and generated data:\n", "$$\\underset{D}{\\text{maximize}}\\; \\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\log D(x)\\right] + \\mathbb{E}_{z \\sim p(z)}\\left[\\log \\left(1-D(G(z))\\right)\\right]$$\n", "\n", "### What else is there?\n", "Since 2014, GANs have exploded into a huge research area, with massive [workshops](https://sites.google.com/site/nips2016adversarial/), and [hundreds of new papers](https://github.com/hindupuravinash/the-gan-zoo). Compared to other approaches for generative models, they often produce the highest quality samples but are some of the most difficult and finicky models to train (see [this github repo](https://github.com/soumith/ganhacks) that contains a set of 17 hacks that are useful for getting models working). Improving the stabiilty and robustness of GAN training is an open research question, with new papers coming out every day! For a more recent tutorial on GANs, see [here](https://arxiv.org/abs/1701.00160). There is also some even more recent exciting work that changes the objective function to Wasserstein distance and yields much more stable results across model architectures: [WGAN](https://arxiv.org/abs/1701.07875), [WGAN-GP](https://arxiv.org/abs/1704.00028).\n", "\n", "\n", "GANs are not the only way to train a generative model! For other approaches to generative modeling check out the [deep generative model chapter](http://www.deeplearningbook.org/contents/generative_models.html) of the Deep Learning [book](http://www.deeplearningbook.org). Another popular way of training neural networks as generative models is Variational Autoencoders (co-discovered [here](https://arxiv.org/abs/1312.6114) and [here](https://arxiv.org/abs/1401.4082)). Variatonal autoencoders combine neural networks with variationl inference to train deep generative models. These models tend to be far more stable and easier to train but currently don't produce samples that are as pretty as GANs.\n", "\n", "Here's an example of what your outputs from the 3 different models you're going to train should look like... note that GANs are sometimes finicky, so your outputs might not look exactly like this... this is just meant to be a *rough* guideline of the kind of quality you can expect:\n", "\n", "![caption](gan_outputs_pytorch.png)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "from torch.nn import init\n", "import torchvision\n", "import torchvision.transforms as T\n", "import torch.optim as optim\n", "from torch.utils.data import DataLoader\n", "from torch.utils.data import sampler\n", "import torchvision.datasets as dset\n", "\n", "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "import matplotlib.gridspec as gridspec\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "def show_images(images):\n", " images = np.reshape(images, [images.shape[0], -1]) # images reshape to (batch_size, D)\n", " sqrtn = int(np.ceil(np.sqrt(images.shape[0])))\n", " sqrtimg = int(np.ceil(np.sqrt(images.shape[1])))\n", "\n", " fig = plt.figure(figsize=(sqrtn, sqrtn))\n", " gs = gridspec.GridSpec(sqrtn, sqrtn)\n", " gs.update(wspace=0.05, hspace=0.05)\n", "\n", " for i, img in enumerate(images):\n", " ax = plt.subplot(gs[i])\n", " plt.axis('off')\n", " ax.set_xticklabels([])\n", " ax.set_yticklabels([])\n", " ax.set_aspect('equal')\n", " plt.imshow(img.reshape([sqrtimg,sqrtimg]))\n", " return \n", "\n", "def preprocess_img(x):\n", " return 2 * x - 1.0\n", "\n", "def deprocess_img(x):\n", " return (x + 1.0) / 2.0\n", "\n", "def rel_error(x,y):\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))\n", "\n", "def count_params(model):\n", " \"\"\"Count the number of parameters in the current TensorFlow graph \"\"\"\n", " param_count = np.sum([np.prod(p.size()) for p in model.parameters()])\n", " return param_count\n", "\n", "answers = dict(np.load('gan-checks-tf.npz'))" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## Dataset\n", " GANs are notoriously finicky with hyperparameters, and also require many training epochs. In order to make this assignment approachable without a GPU, we will be working on the MNIST dataset, which is 60,000 training and 10,000 test images. Each picture contains a centered image of white digit on black background (0 through 9). This was one of the first datasets used to train convolutional neural networks and it is fairly easy -- a standard CNN model can easily exceed 99% accuracy. \n", "\n", "To simplify our code here, we will use the PyTorch MNIST wrapper, which downloads and loads the MNIST dataset. See the [documentation](https://github.com/pytorch/vision/blob/master/torchvision/datasets/mnist.py) for more information about the interface. The default parameters will take 5,000 of the training examples and place them into a validation dataset. The data will be saved into a folder called `MNIST_data`. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": false, "tags": [ "pdf-ignore" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqoAAAJkCAYAAADZZwOuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOydeaBU4//HX1chpdWWtRCKkApJWSNbWUqkTZYSEQpfFaUsibIkogVJtqTIUpEsRYTsUWRtUdIihdTvj/m9zzP33Jm7zplzzu3z+mfqztyZ57nnzFnez/vz/uRs3rwZwzAMwzAMw4gaW4U9AMMwDMMwDMNIhV2oGoZhGIZhGJHELlQNwzAMwzCMSGIXqoZhGIZhGEYksQtVwzAMwzAMI5LYhaphGIZhGIYRScrm92ROTk6pyq7avHlzTvL/bX7xwuYXb2x+8cbmF29sfvFmS5tfMqaoGoZhGIZhGJHELlQNwzAMwzCMSGIXqoZhGIZhGEYksQtVwzAMwzAMI5LYhaphGIZhGIYRSexC1TAMwzAMw4gk+cZTGZmlQYMGAHTv3h2Ajh07MnbsWACGDRsGwMcffxzO4AzDiAX33XcfAFdddRUAX3zxBQBnnHEGAD/++GM4AzOMDPPGG28AkJOTSC464YQTQhvLgQceCLjvWZcuXQD48MMPAfjkk09yvf7ee+/ln3/+yeIISy+mqBqGYRiGYRiRJGfz5vSZsUEFypYpUwaAypUrp3xeimP58uU54IADALjiiisAuPvuuwFo27YtABs2bABg0KBBANxyyy1pPzeswNx69eoBMGPGDAAqVaqU5zWrV68GYIcddij258QhEPjEE08E4MknnwTg2GOPBeCbb74p8HejOL++ffsCbr/baqvEvd9xxx0HwFtvvVXo94ri/DJJ2POrWLEiANtvvz0Ap59+OjvttBMAQ4cOBeDvv/8u9vsHPb+aNWsC8NFHHwFQpUoVfS6QmA/A1KlTM/mxHkHPb//99wdg6623BuCYY44B4MEHHwRg06ZNBb7H5MmTATj//PMBiqRoZWv/1PwaN24MwO233w7A0UcfHcTHeYT9/SsK99xzDwCXXXYZgLfy2LVr17S/E+T8unbt6l176PhRECeccAJvvvlmpoYQq+1XHCzw3zAMwzAMw4gdgXlU99prLwC22WYbIHH32KRJE8ApAa1atSrwfX755RcA7r//fgDOPvtsANauXQvAp59+ChRNucoWRxxxBADPP/884BRkKSBr16717vilpDZq1AhwXtWgPC5SK/S5L7zwQiCf4+fwww8HnK8nzlx44YXccMMNQF61J7+VCiM7SIHUNjrqqKMAqFu3bp7X7rrrroDzfUaR5cuXA/D2228D0LJlyzCHkxEOOuggIPFdOvfccwG3KrHbbrsB7rtVmO+U/iYjRowA4OqrrwZgzZo1GRx1ydB5QGrb0qVLAahevXqu/2+JaGVUSuq///4LOK9qWDz33HMMGDAAKLyiOnHiRM477zwApk2bFtjYtgRMUTUMwzAMwzAiScYVVb8fM50PtTBs2rTJ8wD++eefgPM2LlmyBIA//vgDKJzHMWjKly8PQP369QEYN24c4NQaPwsWLGDw4MEAPP300wDMmjULcN7HO+64I5CxykO53377AcErqlJJ9t57bwBq1KgBuGrOOFKjRg3KlSsX9jCKzJFHHglA+/btAecTlrolevXqxeLFiwG81RDt03PmzMnKWItC7dq1AaeitWvXDoDtttsOcPvazz//DCRWNOrUqQNAmzZtAOeHnD9/fpZGXXjWrVsHlK6qfh3fTjvttIy+b8eOHQEYPXo04I6rUURKqimqbkVRPt53330XgGeffTa0MQGsXLmSfv36ATBkyBDAne9/+uknwK0iiypVqnDKKacAW46iqvO6jrmqJerWrZv3mpdffhmAzp07F/p9TVE1DMMwDMMwIknGFVXdXfz+++9A4RRVqTOrVq0C4PjjjwcS/swnnngi00MMjIcffhhwdxEFUb9+fc/vIo+tlM5DDjkk8wNMQorDe++9F+jnCKnKl156KeCUuSgqVwXRrFkzAK688krvZ5qHMvaWLVuW/YEVgPxSyuHccccdAac0zpw5E8CrhL/rrru839Vr9JyqqsNGx5c777zTm5+q+/0sWLAAgObNmwMJ1UbbTX8LPUYRefsPPfTQkEeSOaZPnw7kVlR/++03wKmhWo3x+8AbN27srQbEmTivKqVC9Q99+vQB3Plw5cqVaX9Hr5F//LvvvgMSqzpRQb5n+Wf1PczP//zAAw8EP7AQ0bnwnHPOAdx29NfjJCPVvCiYomoYhmEYhmFEkowrqrpruu666wCnMH3yySde5b6YN28eACeddBLgPFjyyvXo0SPTwwuMBg0aeDmG/jtkqaUvvfQS4LJgFy9e7HWzkNdWnTeCvsuWSpEtRo0alev/UrfihHyajz76KJB7tUDqY9T8g2XLJr7iDRs2ZOTIkYDzVql6fODAgYDzg2277bZAwhd28skn53q/uXPnBj/oIqAUkEsuuSTta6TO6Dgjj2qtWrUCHl1m0Xbze+GEEjWkEkdtX0zFQw89BMCkSZO8n6nSuyCvZqVKlbyuXEoIEHq/qO2vqZDqFEe/eyoeeeQRwNU/qKOTji+p6N27N+BSaLTyplSfKHHrrbcCTjFWXU4qlHpUmtC5/OCDD/aOOX6UyqSaIqX8PPXUU172fVEwRdUwDMMwDMOIJIHlqOqOVtX/a9eu9TwdF198MeCURSmp4ssvvwRcL90oo7up6dOnex2ndIf86quvAs63IT+VKvpHjRrlZSPqzlE+LKmzShBQrmomOOSQQ9hll10y9n6Fwe9VljctTnTq1AnIrd7I16nOKVFDlf3Jirb+9vJ0+j1W+nmymqo848cffzy4wRYDZW8m88MPPwDuLl45qlJShSr+44ISGB577DEA+vfvn+t5/V9e/zj44zZu3Ajk3TaFoXnz5lStWjXlc9pfS9JpLNs0bNgQgPfffz/kkZSMv/76CyicUqzzp6rFdf6Lsro8YcIEwCnEqug/+OCD87xW6mvr1q2zNLrMI5VbCR0XXXQRkFg9V5c85d9qhWP9+vWAq1kqKYFdqIrkk6DahArJ+8888wxQuBZ5UUHt/mRxqFy5MitWrABcdJZO6orWUiyDHvND8Q49e/YEXNROJjjttNO89w8aXRArlkr8+uuvWfn8TKACG31BtZ+uWrXKOxBFDS3na0lt8+bNXvSSbpTSFQFoSSsZBeHrxioq6BjSpUsX74SxcOFCwBXlpCPbN2uZQtvWf6G6paBCvksvvTTtcezmm2/O5pCKhC7OdT7UTfy+++4b2pgygfZLXbB9/fXXQPrl+woVKng3kbK16CJdF4NRROdiCW+pGoiI/OwOceGmm24CnMA4bNgwIHGe0LVN0NjSv2EYhmEYhhFJAldUk5EC0KBBA8AthSviIA6huCo0kW1BsSpr1671Ip9k4M+EapmucKIkHHDAAd6/ZbMICv2dpF59++23gDNbRxm14FQLXD/Dhg3z2iBGBSlJUlLVgnfq1KmeeqFlGaFlNi31a5/LycnxFOPJkycHPPLioeXw4qiLaqkaV9LFNpU2pGD973//A1wRnELhk1GBrgqyooisGe+88w7gCo7jzJ577umtbkgx7t69O5B+FWbo0KGedUff46OPPjrooRaL2rVre01xtP+pUDU/XnzxxUDHlUmkaus80aFDB8A1UNG5burUqQDFKooqLqaoGoZhGIZhGJEkq4qqiqZ056UCIcXm6IpdiuTw4cNTBsaGyWGHHQbkbfl35plnejFUcUIFJ5lAxWRqG9e+ffs88UbyMUlViDKah7/5whtvvAG44PwooDD4yy+/HHCFDLr7Peuss/L8jpQBRYhopUNMmDDBa/EbR+SrrVChQsrnk4sfZs+eDWSvAUYmkJIatWNkUdCqRYcOHbyVNT+KhUs1T/mspba+8sorQN5VAyMY5M984YUXPC+/PIzpzocK8b/wwgu9n912220BjrLk1KlTx6uzKIySKq655hogd3OYqKLaBSmqalurle5sKqh+TFE1DMMwDMMwIklWFVWhAG7dUSlAXZ4IPVaoUMGL/VElfdgMHToUcIH8umvMlJqabd9ZtWrV8n1elY05OTme4rHHHnsALsxYHjKNXWrGnDlzvHgY3YUqziLKSH1U5IZQBadiqvwpFmGibeFvASpVceedd6Zz584AtGzZEnBqiNr4SrHS47hx4/JEx0WV8uXLe8Hi/fr1A/KueqT6bskbp7/Nf//9F/hYDbfvycNXXC++fJ4KmY8zigGKMjqOK/Yuuc2tvlfyft94442AO2fqXCNfak5Ojnd+V/vxqPLCCy9w/fXXA4l2zVC4CC21Do8D2l46/j/11FNAuEqqMEXVMAzDMAzDiCShKKpCVXRqp6k7rxNPPBGA22+/3QsCloclrPxNVWYqoFh3HZmu6vP7zlTFmknWr1/vvf+IESMAVyXuR/7MnJwcr5pTgc5fffUVAGPGjAGct1jq8rJly7zgbSUgqL1jFCmoyv/7778HEvOKGqruV4XtTjvtBMCiRYuA1P4+qYny+enuX3nAavkbRVTxLc/4888/741fir7mJ9+pPMeqbgWnEJ1zzjmA8x3r72kEi1am8msZnd8qk47Lp556KuCarMQRrXREGWXYqoGIjiubNm3y8ovVuECPZ555JgC777474I4zy5cv97Kp44BawOt6RXUBQscSNdpQzUZc+OCDDwC33TQPHU/DbNJjiqph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HH300QD88MMPYQyrUJx++ukATJgwAcBT4fr06cNff/0V2rhKKxUrVmT77bcH8L4fQfydTzvtNI455hgALrnkEiBh5wDYuHFjxj8vW1x44YUAXHnllWzatCnXc0OHDgVg7NixAN6KQJznW5rRtcxtt90GwODBgwH43//+l9HPMUXVMAzDMAzDiCQ58kumfDJNi67BgwfTq1evjA9Gd1dfffUVkFDupN5lQtHIVgsyeVHffffdXD+XItm+fXvAKZOZIuj5lS9fHoBvvvkGgN133x2ALl26ADBq1KhMflwetrQWcpmY34477ggktk2LFi0AWLVqFQCzZ8/O9Vr5w6Quzp8/31PLM0HY208q6U477eT97I8//gDg+OOPB+DRRx8F3D5+xBFHALB27doC3z/b86tVqxYAn376KQDvvPMO4FY6/GpVSQl7+wVNYec3cOBAT0m67rrrALjnnnsyPp4mTZp4Cr+oXbs2AAsXLizy+4W9/aSkamVHajE4j6p/n9U+/uOPPxb4/mHPTxGT11xzDQCXX345ZcsmFq2ffvppAC644IJiv3/Y8/NTsWJF7zipepx///0XgCuuuAKA0aNHF/r9rIWqYRiGYRiGETuK5VE955xz0j4nz+Vnn32W9jW6Cpc3rkqVKgAcdthhANStWxdI+B70PlH2iAl5U8ePHw84BVXo7yYvbtyQD2vBggWAU1STFarSTM+ePQHYZpttAKhTp47nxRaK/znooIOyO7g0qAK8Zs2ann/orrvuAmDlypW5Xiu15oMPPgAS+/PNN98MwIABA7Iy3pKg48ZVV10F5G2ioe/nXnvt5f1s0KBBgPNZ6zsrT722dZQoV64c4FYwPv/8cwDatGkDZF5JDYtq1aoBLs6vd+/egFPGAfr27Qs472a26devHwDff/89kNlje/Xq1TP2XtlE53N54LVKodUd7b/gjpdSVPUdjROdO3cG4N577wXc+bFr167sueeegNtPdByNc0ycVOJu3bp5SqpQush7772X0c80RdUwDMMwDMOIJMVSVJs3b+7d+Xz77be5npPqVpS8NyUFSBlIVjxatmwJwMsvv1ycoWYVeW80/ldeeQWAyy67DMg/+SBOqBJTnsY6deqEOJrMc+yxxwJOodP/FZ6erJT7Pd777bcf4HzWmfR4FoWTTjoJcKsUzz77rOerS4fu8qUM9O3b11ML4qConnDCCQBps4n//vtvAMaNG+e93l+dqu352GOPAUQylWPgwIGASxPRPrdmzZrQxpRJ5PGX71M+YW2b5O+c/hY6H2l/zRaq/pdqqESNkiTX6D2vvfbaPM+de+65QHgKcn6cddZZAFx66aWA+1uk85+CW93Ra0aOHBn4OEuKVlm0wqZVJyUWaE6rVq2ifv36gFNUC+N1jzr6fqbaB3Wto/NfpjBF1TAMwzAMw4gkxVJUv/vuO7777ruMDeKMM84AciupkFBA4nCHBYkKanly5KdV9V9pUVKFPIxC3rgbbrgBiEf3lF133RVwyQtqOwlQuXJlwFW/S0H96KOPALy75FRIGdDvhoV8RKoOVtVpYVAeZ9++fT0/WaVKlYDoqnb9+/f3KrDF448/DiQ6NIHLNdb/69Wrx9SpUwHnn9Nz+htEiW233RZwqSGqCC8t+cXaBjrma6VG22TSpEmA84F27NjRUxil8kjt+ueffwIbZ6p6CX0/brnlFsBtI6VKFAVVuktJjgPt27f3vm9+dExMhb+OI7/XRgWp9rfeeisAV199NeBapCcjVfm3334D4n0tULNmTQDuv//+PM+pw5g/pSJTRH+vMAzDMAzDMLZIiqWolhTd9erKvGPHjilfd9RRRzFv3rysjas4nHnmmUDCLybv1HPPPQe4rl2lFd0Na3vKT/zwww+HNqaCaNasGeBUG1Vl5od8pitWrACc8rPbbrt53rQ99tgj1+9k2qNTVN58803AeVSL0jlHXk5w+XjK/1PXo6hRoUIFtttuO8BlLvbp0wfIq/BLserdu7eXWLFu3TogocxCNL+7119/PeA8jJpfaUFKqZTUadOmAS4X1s+CBQu877O+f/pdZcsGwWOPPeYlD8h7KJo3bw5Aq1atgOJlS0t9+/7773Ot9IA7t0QFKcf33nuv50HVd0cV4KpBUYqD2LBhg7dCo1WsKCdWaPzyRWvV5aGHHkr5+ho1angdxUoDL730EpC77kLbT77c9evXB/LZWb1QVai2io4UACwUFqt4mShHOCiCo2nTpnme03JPQUtyPXr0yHOhFEQjhaDwFxJFMcrHj072qS5QdYEmC4NaiSpOTajApkePHnkuULUsqH08LEpyoaWonS+//NKL2VLBTlSZMGECp5xyCuAOpIqeuvzyywF3MlTRw+mnn+5FdKkFYLqTThTQMuKsWbMA+Pjjj8McTsbxn+SKEvWkE6ZuJoPkv//+80QWxdPp5kco8PyFF14AilaUt/POOwPkuUiNEiqc0nJ/8gXmnDlzACcK6Dzvt/H17t3b+/v4rwWiRtmyZb3vnS7Au3XrBqRv7zpu3DhvGw4ZMiQLowwWnQuSz/sPPvggANOnTw/0s23p3zAMwzAMw4gkWVNUjzjiCG8pp0yZMilfoyv1n376CUjcuUYVja1BgwZAwgSuu8q333475e+ouEpceeWVeULJFXkhpS7O5usoITVKRRd+fvrpJ08F1Z1zQfjVVHAqUDaUnaDQykY6pSCKzJs3z3OyhD8AACAASURBVFPApagqrkpRXYo7Si7aVPFLqkKIKNGkSRNv3z344IPzfa1i45YvX86XX34Z9NAyhqxEetTKlAr69t13X8Cpbw0aNGDp0qUAtG3bFsje8XL16tWAO1b4FVVtI63cpFJUtQLVtWvXXD9XgVgU0d9eEXZiw4YNnpKqFVE/smNIhU1evdAyuqKtolZI1rp1ay8CTccVf8MUoX2xUaNG/Pnnn4Ar5IwjWoHS91LXaW+88YZngwgaU1QNwzAMwzCMSJI1RbVNmzZplVShO0yF+8+dO9cz8MrL8sUXXwQ4ysKjEHh5VDdt2uQpwX41TbFVeq2KjsAVccjPqrayusM8//zzAVcgYhQPKdXly5fP9fPZs2cDCWWtICW1atWqAJ4X8phjjsnzPmryEGcUg5Tc6jDqQdV///13nugsFbw8//zzQF5FYPTo0V7kUdRp3749X3/9NQCLFi3K9ZxULvngtJ/+/fffnuddTTqijN8Dp8B7fXe1eiXOP//80GPE1CqyU6dOKZ8/6qijgITi37hxYwDvUUVxagObH9r2xYm7yiQ33XQTkDd+7/bbb0/bhODdd98F4NVXXwWcxzMZKY/JhZxRolOnTl6tgo71ftTyVmrzVltt5a3UpJpz1NExQ35kfS/V1r5du3ZZKzo1RdUwDMMwDMOIJFlTVCdOnOhFhxx++OGAi/lJR8OGDWnYsCHgYkB0tzJ48GDARXlkC0Vt7L333rl+vnjxYp544gnAhazL06IgckVZSXGdNm2ap4KoInnGjBm5/h9l/ApVlHnkkUcAt8/JY6bYJXnd8kPt4ZJ9OfIAqulBYd4n6ijYWeo+wGuvvZbytfp7HnrooUBCQVKEjj8tIWgKu+og1fvuu+/m559/DnJIGeOiiy7y9lWpTlqB0rFRXkc1MTjttNO8+DQ1aEm3HaOAfJw6xurY7z/OKGot7Ag4cPFTWmHTNhIPPPBArsdk8mst6ke+a6lbo0ePLuaIi4dWBbVtNPaCVknBnQ8Lg7Z11IL/mzdv7rVKlYdfqNmDVm50TBwxYgR33nlnFkeZGeQP1r4mpVjoXKpGHNkgWnuDYRiGYRiGYfw/WVNUZ8+ezemnnw64qlvdeShU/JxzzgES6gHkbq+mOyz5luRXOvHEE4HsBQU3adIEcBXEYuTIkQwYMABw81GlnwKr5fN79tlngURmqvIpFaSu16glWZS9qXFQUoXudvVYFFq0aAHg3VGLjRs3etstzkqqPKlKMZCHLhnN099GViHYqm5eu3atVwGdzWzEMmXKeB5wf1tGIe+7tmcckG+zbNmyeVIYtA2kkvr9ms8884x3vLrxxhtzvTaKaK5KN9D++Mwzz+R63cSJE4FoKKpCK2Oq+C4MOmcV5Tiqv022FNW6desC7rgp/3Omz7fy62qVICrB/7q+APL42dXcQQ1udF0jBbl3796RbTmdH7r+UptxIZ90UfKNM4UpqoZhGIZhGEYkCaWFqqrj9ShUFThz5kwgkTOaLk9NniBVtcqzGjSHHHJIyp9LTQV3x3/kkUfmeo08qm+99RaQuDtWRaSQBzdOHaqEqgFLG7qT9isfV111lefXiRpqJ6ouN/Xr1/fUGOUAClX3S9FKhZ7ze6fHjBkDOLVyxYoVXneubPL00097KzLpFKo4rQCIZH+Yv1Of/NH5VY0rq/Lzzz8PYHTBoDxcqXl+br/99mwOJzCkvGm/1HdI/nn/Ck4YqANXcvZwELRu3RqIXn6qqvU3bNjgrYTKp6v2y/KMayVH1fLajnHh6quvBuDiiy8G8h4vlUe9ePHi7A4MU1QNwzAMwzCMiBKKoloQTz75JJDwJr3++utA7szKZPwdQYKmSpUqgLt7SvZrqDJSVdN6jXIApaQqDWD8+PF5XuPv+BEnVFlcWpByk646V9szCkhB7d+/P+B8mLVr1077O/JPyRctD2TZsu6woKpmeVSj0l9eGamdO3cGoFWrVp4CoDGqE45eI3U5rvi7LhUm21b5zHFE3Z2KUh0fVVauXOmtIMrP+tRTT6V8rc4jUVBU03H99ddn5H10fPKviGpVJls5nelQbvtll13mKY06rmj7KdFh7ty5gPOsxok999zTm5++b+q+OXLkSCAcJVVE8kJVbNy40SveSHeh+u2332ZzSB46KaZaTvSb5GUX0IFKS62LFi3yCkDitkxQmpGh/7DDDgPybs8ePXoAsGDBghBGlxrZE7Q8o+UoLScuWrTIu6nSczoZ6GJGS8u6kfr++++94kUFckcFFTkkW260BK4Th+JVdKEapeKbwuJvK1pUZJGKesOGVKxfvx5w3z9Zwv7555+whpSW77//HoCxY8cCsM8++wCuAGX48OEZaVajVtAqagqrAUCqlrBFpXbt2t4xaYcddgBc3KSsAFEJyh87dqy3bfVdlKjkLwYP++K6KEjoe/HFF3PFEYIrGL/hhhuyPi4/tvRvGIZhGIZhRJLAFFVFG1x66aVAQq2RGbmwlClTxgsS96NlShnvs4XuAP0h/o0aNcoTiiw6duwIuDsxBf73798/z3JenFHMUVxRe9X27dsDTp0UWuqRNSVKS5FSWtReU3f38+bNS/s7WuJXKPXuu+8OOFWjTZs2kVNSjzvuOMAVeYiWLVt6NiEVIPmXTsMo8iop+a3cFMTWW2/tNalQM5I4oOVgLUUqWFyFYVHcjrLRKNonKPQd1apP0KQL4FcjCamMhUERVPodnTvBKdJnnHEGkP1mIUVBqxTdu3cH4LbbbgPc0n+ckIrqV1MhobJGBVNUDcMwDMMwjEiScUVVaoaCpWWIl6emMMjzce211+aJ0hHy/vjjnYJG7dPUxk8q3KxZswpUPfyB/4rjKi2oscGwYcNCHknRqVixomcalz9KXHPNNYDzPkZJSRXa91atWgWQrx9OHmm1OlUjDnlXzz//fCA6hVPJSOVWTJYK2qZMmcLWW28NOFVGr5EqlM2Wf5lCvtolS5Z4Sr+UxXTo7/DQQw95hZ2dOnUKbpAZQttLLWClHsoj529oUFrRd3jJkiV5QteFCj3VNtffDCJT3HrrrYBruuCPp3vzzTeBxPFHq41SQ1Vwpe+fVGBFUP3111/ePBTpGGUlVYwfPx5wxUXZisYMAjVsSUZe8Ch5+k1RNQzDMAzDMCJJxhVVVcJJSRV77723d7ekak6haB3dganSONnrqbsyqZJXXXVVpodeKJRCoFZ5Gqu8c8k8/vjjgAvb/uSTT4BoxRoVB1ViKnA8v6D4uLD77rvnUVIVt+X3Q0YRpV/IJ61GBKqm/fTTTz0fmPzV8iXNmTMHgG7dugH5+1rDxp/AoMett97aq/K/7777AFcRrYitgpTIKLJkyRIgoaAp1kjIK60Kc/n5e/fuDSSqj+Vdli8+ykiZkpIqT7h/3qUdeXBbt27tKY1aZRRSyHUeDEpRVSvvVq1aAa6VqpRVpfFs2rTJS7Dx448X0/kvuZI+DjRs2BBwrd/1t4+aj78oDBw4MM/PdJwMK1EiFaaoGoZhGIZhGJEkJz9fZU5OTpFLTVXlnyr0VoqiPzNUd2fKrUyF7lrOPvtswN3pFYXNmzfnCiMszvyiTLbn9+GHHwLQoEEDIOEThEQFdhAEMT9VGPfs2dPL25Q6eeqppwLw448/lvRjCkUm5qc7ZLXg9VfrgqvmHD16NOD85EGTifnpuHLJJZcAzre4yy675FF0pLC+9NJLxRht0Qn6+3fFFVcAcNdddwF5Uza02qQVgFtvvTWjmaNBzq9Zs2aex1HKmzy5yU1VgiSK5wepeDq2Ss0TyhMuzCpdJuYntbtLly6Ayy7Oz7evFJF33nkHcL7aTGeHB7n9ypUrx+zZswFXb6MWv+vWrcvUx+RLJuenVVD5UatVq8Ytt9wCuHNItltO++eXjCmqhmEYhmEYRiTJuEd1+vTpADz99NOAqyCG/BXTVGzcuNHzvMobIz+dET7yMkpRVU5enLjpppsAOO+887yfKbUgW0pqJtF89FjaUNqHkK84JyeHlStXAokuQICXq1pa0Lz0WBpQKoGqysHlTmdLSY0yyuZU8oj85eo4l+3sTuV+9+vXD3D5p7169fJWp9ThTsq/vP6zZs3K6lgzSefOnT0PuB6zpaQGQaNGjYDcdUBKfcm2kloYTFE1DMMwDMMwIknGPapC/il5Sk844QTP++f3MOoOTMyYMcP7eSYrkKPoQcok2Z6f1BBV5yrlYMSIEYF8XhAenUGDBgEJP6oq5VU1nu1MP9s/C0b+MHnhpRzPnTvX896qR3W2se1XeJT0okr/bt26eatmyasb2cS2X7wJcn5fffWVpzgefvjhQHBJC+kIYn5aNSxfvryXUR1W6kt+HtXALlSjiH1R400m56e2oT179gQSX1g1LAgrdNq2X7yx+RUeRaGpicbs2bNp1qwZ4JYgs41tv3gT5PyWLl3qFRuFFXO3pW2/ZGzp3zAMwzAMw4gkpqiWImx+hUexLmrX2KpVq9CLN2z7xRubX8GofaaW+ceMGQPAyJEj+eWXX0o8xpJg2y/e2PzijSmqhmEYhmEYRuwwRbUUYfOLNza/eGPzizc2v3hj84s3pqgahmEYhmEYsSNfRdUwDMMwDMMwwsIUVcMwDMMwDCOS5NtCtbR7IGx+8cLmF29sfvHG5hdvbH7xZkubXzKmqBqGYRiGYRiRxC5UDcMwDMMwjEhiF6qGYRiGYRhGJLELVcMwDMMImYEDBzJw4EA2b97M5s2b+fHHH9l+++3Zfvvtwx6aYYSKXagahmEYhmEYkSTfqv9s89RTTwHQqFEjAM4//3zmzJkT5pAMwzAMI+OUKVMGgJtuugmAnj17AvDaa68BMGfOHPbZZx8APvvssxBGaBjRIFItVGfPng3AUUcdBcDChQs58MADAfj3339L/P7Zindo1aoVAOXKlQOgYcOGAFx99dUAvPnmmwCMHj2ar7/+GoCPP/64xJ+7pcVX2Pzihc0v3tj8Mku7du0AeOKJJwAYNGgQAL179w7k82z7xZstbX7J2NK/YRiGYRiGEUkioajuueeeAHz33XcAbL311t5z5cuXB2D9+vUl/pwg7ki22247AA444AAGDhwIwIknngjAtttuW+DvL1q0CIAZM2YAcMMNNwCwZs0aAP77779Cj2VLu+PK5Py22247mjdvDkC/fv0AqFevnj435e9cfPHF/PHHH7l+tnDhQgC++OKLIo+hOPM766yzALjyyisBOP744/W7es88vzNp0iQAXn31VQCmTZsGwA477ADAt99+C8Cff/5Z1Cnki+2f8Sbb89Nqmlaidt11VwDOOOMMACZPnuytwolHHnkEgFWrVhX587I1vyOOOAKAl19+GYAff/wRgKOPPhqAv//+O4iPtf0zILRi+uGHHwKwadOmPK/ROeXWW28t9udsadsvGVNUDcMwDMMwjEgSCUW1bt26AHz++ee5fj5p0iTP75nqLqWoZOKO5JBDDgGgadOmAJ4Kd/rpp5d4fMnccsstAEycOBEonEIXtTuuvfbai/feew9wf6fiKI2iJPM74IADAKdY+ylfvjznnntusccmvvzySwBat24NOHWyMBRlflJSx44dC0CFChWKOFLHggULALd6sWLFCgD++ecf7zXXXnstQB4FqyhEbf/MNDa/zDJ06FAAevToUejf0QpHnz59AHj44YcL/bvZmt+Y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pk2bAKhevTovvvgiAC+99BIA55xzTmjjMhLUrFkTgAEDBgDQrl07wG23o48+OpRxBYX2wRYtWgBw+eWXA/DQQw+FNqZMctBBBwFQtmzuw93atWv5/vvvc/2sfPnyAHTo0AEwRdUwjNxopU3HxwYNGgDw22+/ATB//nwAJkyYwNdffw3AH3/8ke1hlipMUTUMwzAMwzAiSSiK6r777gvA+PHjAahQoULK1z355JPeXUocqVKlCgAPPvggAE2bNk372g8//DArYzIKZujQoQCceeaZuX7+77//AvDKK69kfUxBsM022wBORZRi3KNHDyDx/VuzZk04gysBO+ywAwD33nsvAK1atQJg2223BWDz5kTnwZUrV3LEEUekfI8ffvgh4FEaBVGjRg0Axo4dC7jjp7ZfTk6Op1gdd9xxQHge/yeeeAJw+82kSZOK/B4//fQTYHUKUUfHSa223HbbbQCcfvrpgDvOtGvXzlNfGzVqBMB3332X1bEGTf/+/XP9Xx7//Dj++OMBmDlzZqE/xxRVwzAMwzAMI5Lk6O405ZM5OemfLAH3338/AFdccUXK52fMmAFAt27dWLhwYcY+d/PmzTnJ/w9qfkIpBmPGjAFg7733BtwdWSpat24NwOTJk4v8ecWZX7ly5QDYaaedcv1cPsycnMRb7rfffgV+vhTHcePGAYlUg//++6/A3yssQW+//fffH3CKqbaXUGV4UL7FbO+flSpVAuD1118HnNdK7Lbbbixbtixjnxf0/Jo0aQK4u3ypbEmfp3F4P6tXrx7gVneqV68OwAEHHAAUzVuW7e2n+ey6664AnHvuuYA7huy7776ekiO1riRka361a9cGnFKllQ3/9svJyfH+PX36dMDVPRSHksxPK2L169fPM0b9P9X4k///888/A7BixQog4ZOW3zETZGv7aYV04sSJAJx88slA3vPesmXLGD16dK6fjRo1CoAff/yxyJ8b5PyqVq3qHU923HFHwHnfr7zySgD+/vtvwHn9f/jhB958803A1djUqVOn2GPI9vElHTq+FkY9zQ/t/8I/v2RMUTUMwzAMwzAiSVY9qnfddRcA5513Xr6vO+mkk7IxnMCpWrUqkN6Dm4qHH34YcHefSgMIisceewyANm3aZOw9pYS8+OKLXHzxxQD8/vvvGXv/INhll13SKqmitPmItY/5Ve+BAwcC8apU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DjkEgGnTpgHw77//Jv3e/5ohsM2veLbbbjsAZs2aRZcuXTJ67y677MK3335b0iE42Pbzl6ZNmwIwfPhwAE466SSNA4C1a9dy4403AjBx4sQSf59tv/B5/fXXAZg6dSoA9957b9afFfb8KlasCMBzzz0HwMEHHxz3/LfffkvdunUB+Oeff0r8fbnafipUvOqqqwDo2rUrAE2aNHGu288++ywAs2fPzvp7wpqf5vPggw8CcMABBwCw8847F3nt8uXLAdhnn31K/L1m+G8YhmEYhmHkHZaj6iNSSnv27AkUrqjAVTj++OMPwM31ePbZZ7n99tvjnpMCMnjwYACnGGLOnDkA/PLLLyUep4ouADp37gzAoYceCsCFF15Y7PuVyyjrG/3/77//LvHYDH+oWrUq4G6bWDVVq+Bx48YBcOWVVwJQv379uM+45557nH11woQJwQ44YnzzzTcA1KhRI+7xfv36cf/99+diSA41a9YE4NVXXwXic/7A3Z5Tp07lq6++ysEIDVG+fHmgMKr23nvvZfTeevXq0bx5c4C8yhXX9UXnDK+SeueddwJw8803+6Kkhk29evUAaN26NQAXXXQR4BaL6XpfUFBA3759AZy/v/76K+AqrFGidu3aQGH0DeDAAw8s9j077LADAOeddx4A06dPB/y5T4nFFFXDMAzDMAwjkmSVo1qjRg1nNS/Fb/LkyVkP4uyzzwbclYiUyblz5/L9998D8OijjwLw/PPPZ/09Qed4bL311gD8+eefAI6aIZVy/fr1ALz55pvOe1SVu3nz5rjnWrVqBUCbNm0AVwVLRbrzKygowLvd9f/ff/897nFtC+WtJGL16tWAWx34+eefFzvWbAgrR0f79AknnABA//79AahTp07c68qUKeP8bo888gjg5iVnqp6Av/M755xzgPjcRK12lQ+t3MYzzjgj6ecoJ1pG8TfffHO2Qwp8+5UrVw6AY489FoAVK1YA8MEHH6T9GSeffDLgns90TOs81LNnz7jjN5ag56f98OKLLwbcPPZVq1YBcNdddwFuVMZvopjD6SdBzK9Pnz4ANGvWzDne0qVRo0YsW7YMcLf9lClTsh5LWNtPiv/XX38d97juGY488kjArcfwiyDn17x5cycCJeVUaqKYN28eAM888wxQGCWVA4fyyZcsWQLAQQcdlPEYgt5+r732GgBt27bN+jOk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JG+KaoMGDbw74ubNmwPQokWLQv8XuoNOzus6//zzgegqqmPHjuVf//pXod8999xzAFx88cUpX7N06VLvzl/+VlXchY3usPTzhx9+8HxEM2fOTPma9u3bA6k9SGWBBg0aAM7LCfDrr78CTnmLMsomvP766zM+b926dUBCRVWG3ptvvhns4PKA1FKpCJdccomXc3jQQQcBcPzxxxd6ze233w44X7IRDE2bNi2iVAl5A1NVEstPp2NOkyZNAKf4r169OudjzRXyqB511FEAzJ07N8zhBIYyNv3neXCV87/99ls+h1Rszj33XC9VQ/ucVhCvvvrqlK+59tpr8zO4UvDZZ58BziMM8NRTT2X12jp16hRRVIPCFFXDMAzDMAwjkgSmqF5++eWAu1I/4IADPEXV341CfPrpp4C7ypdnFeCxxx4LaqilIrliWp5bKalt27bN+NrHH3+cOXPmAE650d9m/vz5gMslyzdjx44FnC/srrvu4ocffkj53F133RVwiqrQHMoKUm2UHwvQq1cvAJYvXx7KmLJl3LhxRZTuP//8E3CKwMKFCwGnQn388cd5HGHuKF++PAAHHngg4LabKlLlcUwm3THpiCOOCGycWyLyr++3334AXjZz27Zt2XHHHVO+xr9tNmzYACRWpPR+qjLWNpYfO4qKqtI25NXUmMuaoirft84hfn7//XemTp3q/TuKKIVn+PDh3v4n32nv3r1DG1euyVZFBdhll10AuPPOO4s8ps5Us2fPzs3A/h9TVA3DMAzDMIxIEpiiOnjwYMDd6Sajq24pj1JL169fD7iuTMmKqt4vasjDucMOO3h3XJrX5rj44ot54403AKhevTrgVAN5rcJC+WfKhMuEFCpV/7/88suA8/CUFfyKz88//8yqVatCGk3xOPTQQz3FXyj/L47bSX5T3d3XqFGD7t27A06pUrpBaXjyySdL/R4GXHTRRYDzRyu/MRNSrv744w/AKY46T8yaNcurKpbPU8fTKH4vlRyh750sUQPdAAAgAElEQVRU33RKctzR9/Cuu+4q9Puff/4ZSHjmn3322byPqziokr9ixYreOVFJOFL2tzTUcbJly5be71TXoJVh1W7kisAuVLXsrSIFcC3/tKOmQxeqBQUFXtB9VJdWNb6ZM2d6y4QyGL/22muAszT4eeWVV7yoKhHVC/Jk6tatC7j2roqx0M6p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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "class ChunkSampler(sampler.Sampler):\n", " \"\"\"Samples elements sequentially from some offset. \n", " Arguments:\n", " num_samples: # of desired datapoints\n", " start: offset where we should start selecting from\n", " \"\"\"\n", " def __init__(self, num_samples, start=0):\n", " self.num_samples = num_samples\n", " self.start = start\n", "\n", " def __iter__(self):\n", " return iter(range(self.start, self.start + self.num_samples))\n", "\n", " def __len__(self):\n", " return self.num_samples\n", "\n", "NUM_TRAIN = 50000\n", "NUM_VAL = 5000\n", "\n", "NOISE_DIM = 96\n", "batch_size = 128\n", "\n", "mnist_train = dset.MNIST('./cs231n/datasets/MNIST_data', train=True, download=True,\n", " transform=T.ToTensor())\n", "loader_train = DataLoader(mnist_train, batch_size=batch_size,\n", " sampler=ChunkSampler(NUM_TRAIN, 0))\n", "\n", "mnist_val = dset.MNIST('./cs231n/datasets/MNIST_data', train=True, download=True,\n", " transform=T.ToTensor())\n", "loader_val = DataLoader(mnist_val, batch_size=batch_size,\n", " sampler=ChunkSampler(NUM_VAL, NUM_TRAIN))\n", "\n", "\n", "imgs = loader_train.__iter__().next()[0].view(batch_size, 784).numpy().squeeze()\n", "show_images(imgs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Random Noise\n", "Generate uniform noise from -1 to 1 with shape `[batch_size, dim]`.\n", "\n", "Hint: use `torch.rand`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def sample_noise(batch_size, dim):\n", " \"\"\"\n", " Generate a PyTorch Tensor of uniform random noise.\n", "\n", " Input:\n", " - batch_size: Integer giving the batch size of noise to generate.\n", " - dim: Integer giving the dimension of noise to generate.\n", " \n", " Output:\n", " - A PyTorch Tensor of shape (batch_size, dim) containing uniform\n", " random noise in the range (-1, 1).\n", " \"\"\"\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " return torch.rand(batch_size, dim)*2 - 1.\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make sure noise is the correct shape and type:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "All tests passed!\n" ] } ], "source": [ "def test_sample_noise():\n", " batch_size = 3\n", " dim = 4\n", " torch.manual_seed(231)\n", " z = sample_noise(batch_size, dim)\n", " np_z = z.cpu().numpy()\n", " assert np_z.shape == (batch_size, dim)\n", " assert torch.is_tensor(z)\n", " assert np.all(np_z >= -1.0) and np.all(np_z <= 1.0)\n", " assert np.any(np_z < 0.0) and np.any(np_z > 0.0)\n", " print('All tests passed!')\n", " \n", "test_sample_noise()" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## Flatten\n", "\n", "Recall our Flatten operation from previous notebooks... this time we also provide an Unflatten, which you might want to use when implementing the convolutional generator. We also provide a weight initializer (and call it for you) that uses Xavier initialization instead of PyTorch's uniform default." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "class Flatten(nn.Module):\n", " def forward(self, x):\n", " N, C, H, W = x.size() # read in N, C, H, W\n", " return x.view(N, -1) # \"flatten\" the C * H * W values into a single vector per image\n", " \n", "class Unflatten(nn.Module):\n", " \"\"\"\n", " An Unflatten module receives an input of shape (N, C*H*W) and reshapes it\n", " to produce an output of shape (N, C, H, W).\n", " \"\"\"\n", " def __init__(self, N=-1, C=128, H=7, W=7):\n", " super(Unflatten, self).__init__()\n", " self.N = N\n", " self.C = C\n", " self.H = H\n", " self.W = W\n", " def forward(self, x):\n", " return x.view(self.N, self.C, self.H, self.W)\n", "\n", "def initialize_weights(m):\n", " if isinstance(m, nn.Linear) or isinstance(m, nn.ConvTranspose2d):\n", " init.xavier_uniform_(m.weight.data)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## CPU / GPU\n", "By default all code will run on CPU. GPUs are not needed for this assignment, but will help you to train your models faster. If you do want to run the code on a GPU, then change the `dtype` variable in the following cell." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "#dtype = torch.FloatTensor\n", "dtype = torch.cuda.FloatTensor ## UNCOMMENT THIS LINE IF YOU'RE ON A GPU!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Discriminator\n", "Our first step is to build a discriminator. Fill in the architecture as part of the `nn.Sequential` constructor in the function below. All fully connected layers should include bias terms. The architecture is:\n", " * Fully connected layer with input size 784 and output size 256\n", " * LeakyReLU with alpha 0.01\n", " * Fully connected layer with input_size 256 and output size 256\n", " * LeakyReLU with alpha 0.01\n", " * Fully connected layer with input size 256 and output size 1\n", " \n", "Recall that the Leaky ReLU nonlinearity computes $f(x) = \\max(\\alpha x, x)$ for some fixed constant $\\alpha$; for the LeakyReLU nonlinearities in the architecture above we set $\\alpha=0.01$.\n", " \n", "The output of the discriminator should have shape `[batch_size, 1]`, and contain real numbers corresponding to the scores that each of the `batch_size` inputs is a real image." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def discriminator():\n", " \"\"\"\n", " Build and return a PyTorch model implementing the architecture above.\n", " \"\"\"\n", " model = nn.Sequential(\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " Flatten(),\n", " nn.Linear(784, 256),\n", " nn.LeakyReLU(0.01),\n", " nn.Linear(256, 256),\n", " nn.LeakyReLU(0.01),\n", " nn.Linear(256, 1),\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " )\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test to make sure the number of parameters in the discriminator is correct:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Correct number of parameters in discriminator.\n" ] } ], "source": [ "def test_discriminator(true_count=267009):\n", " model = discriminator()\n", " cur_count = count_params(model)\n", " if cur_count != true_count:\n", " print('Incorrect number of parameters in discriminator. Check your achitecture.')\n", " else:\n", " print('Correct number of parameters in discriminator.') \n", "\n", "test_discriminator()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Generator\n", "Now to build the generator network:\n", " * Fully connected layer from noise_dim to 1024\n", " * `ReLU`\n", " * Fully connected layer with size 1024 \n", " * `ReLU`\n", " * Fully connected layer with size 784\n", " * `TanH` (to clip the image to be in the range of [-1,1])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def generator(noise_dim=NOISE_DIM):\n", " \"\"\"\n", " Build and return a PyTorch model implementing the architecture above.\n", " \"\"\"\n", " model = nn.Sequential(\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " nn.Linear(noise_dim, 1024),\n", " nn.ReLU(),\n", " nn.Linear(1024, 1024),\n", " nn.ReLU(),\n", " nn.Linear(1024, 784),\n", " nn.Tanh(),\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " )\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test to make sure the number of parameters in the generator is correct:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Correct number of parameters in generator.\n" ] } ], "source": [ "def test_generator(true_count=1858320):\n", " model = generator(4)\n", " cur_count = count_params(model)\n", " if cur_count != true_count:\n", " print('Incorrect number of parameters in generator. Check your achitecture.')\n", " else:\n", " print('Correct number of parameters in generator.')\n", "\n", "test_generator()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# GAN Loss\n", "\n", "Compute the generator and discriminator loss. The generator loss is:\n", "$$\\ell_G = -\\mathbb{E}_{z \\sim p(z)}\\left[\\log D(G(z))\\right]$$\n", "and the discriminator loss is:\n", "$$ \\ell_D = -\\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\log D(x)\\right] - \\mathbb{E}_{z \\sim p(z)}\\left[\\log \\left(1-D(G(z))\\right)\\right]$$\n", "Note that these are negated from the equations presented earlier as we will be *minimizing* these losses.\n", "\n", "**HINTS**: You should use the `bce_loss` function defined below to compute the binary cross entropy loss which is needed to compute the log probability of the true label given the logits output from the discriminator. Given a score $s\\in\\mathbb{R}$ and a label $y\\in\\{0, 1\\}$, the binary cross entropy loss is\n", "\n", "$$ bce(s, y) = -y * \\log(s) - (1 - y) * \\log(1 - s) $$\n", "\n", "A naive implementation of this formula can be numerically unstable, so we have provided a numerically stable implementation for you below.\n", "\n", "You will also need to compute labels corresponding to real or fake and use the logit arguments to determine their size. Make sure you cast these labels to the correct data type using the global `dtype` variable, for example:\n", "\n", "\n", "`true_labels = torch.ones(size).type(dtype)`\n", "\n", "Instead of computing the expectation of $\\log D(G(z))$, $\\log D(x)$ and $\\log \\left(1-D(G(z))\\right)$, we will be averaging over elements of the minibatch, so make sure to combine the loss by averaging instead of summing." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "def bce_loss(input, target):\n", " \"\"\"\n", " Numerically stable version of the binary cross-entropy loss function.\n", "\n", " As per https://github.com/pytorch/pytorch/issues/751\n", " See the TensorFlow docs for a derivation of this formula:\n", " https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits\n", "\n", " Inputs:\n", " - input: PyTorch Tensor of shape (N, ) giving scores.\n", " - target: PyTorch Tensor of shape (N,) containing 0 and 1 giving targets.\n", "\n", " Returns:\n", " - A PyTorch Tensor containing the mean BCE loss over the minibatch of input data.\n", " \"\"\"\n", " neg_abs = - input.abs()\n", " loss = input.clamp(min=0) - input * target + (1 + neg_abs.exp()).log()\n", " return loss.mean()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def discriminator_loss(logits_real, logits_fake):\n", " \"\"\"\n", " Computes the discriminator loss described above.\n", " \n", " Inputs:\n", " - logits_real: PyTorch Tensor of shape (N,) giving scores for the real data.\n", " - logits_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.\n", " \n", " Returns:\n", " - loss: PyTorch Tensor containing (scalar) the loss for the discriminator.\n", " \"\"\"\n", " loss = bce_loss(logits_real, torch.ones(logits_real.size()).type(dtype))+bce_loss(logits_fake, torch.zeros(logits_fake.size()).type(dtype))\n", " return loss\n", "\n", "def generator_loss(logits_fake):\n", " \"\"\"\n", " Computes the generator loss described above.\n", "\n", " Inputs:\n", " - logits_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.\n", " \n", " Returns:\n", " - loss: PyTorch Tensor containing the (scalar) loss for the generator.\n", " \"\"\"\n", " loss = bce_loss(logits_fake, torch.ones(logits_fake.size()).type(dtype))\n", " return loss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test your generator and discriminator loss. You should see errors < 1e-7." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Maximum error in d_loss: 3.97058e-09\n" ] } ], "source": [ "def test_discriminator_loss(logits_real, logits_fake, d_loss_true):\n", " d_loss = discriminator_loss(torch.Tensor(logits_real).type(dtype),\n", " torch.Tensor(logits_fake).type(dtype)).cpu().numpy()\n", " print(\"Maximum error in d_loss: %g\"%rel_error(d_loss_true, d_loss))\n", "\n", "test_discriminator_loss(answers['logits_real'], answers['logits_fake'],\n", " answers['d_loss_true'])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Maximum error in g_loss: 4.4518e-09\n" ] } ], "source": [ "def test_generator_loss(logits_fake, g_loss_true):\n", " g_loss = generator_loss(torch.Tensor(logits_fake).type(dtype)).cpu().numpy()\n", " print(\"Maximum error in g_loss: %g\"%rel_error(g_loss_true, g_loss))\n", "\n", "test_generator_loss(answers['logits_fake'], answers['g_loss_true'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimizing our loss\n", "Make a function that returns an `optim.Adam` optimizer for the given model with a 1e-3 learning rate, beta1=0.5, beta2=0.999. You'll use this to construct optimizers for the generators and discriminators for the rest of the notebook." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def get_optimizer(model):\n", " \"\"\"\n", " Construct and return an Adam optimizer for the model with learning rate 1e-3,\n", " beta1=0.5, and beta2=0.999.\n", " \n", " Input:\n", " - model: A PyTorch model that we want to optimize.\n", " \n", " Returns:\n", " - An Adam optimizer for the model with the desired hyperparameters.\n", " \"\"\"\n", " optimizer = optim.Adam(model.parameters(), lr = 1e-3, betas = (0.5, 0.999))\n", " return optimizer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Training a GAN!\n", "\n", "We provide you the main training loop... you won't need to change this function, but we encourage you to read through and understand it. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "def run_a_gan(D, G, D_solver, G_solver, discriminator_loss, generator_loss, show_every=250, \n", " batch_size=128, noise_size=96, num_epochs=10):\n", " \"\"\"\n", " Train a GAN!\n", " \n", " Inputs:\n", " - D, G: PyTorch models for the discriminator and generator\n", " - D_solver, G_solver: torch.optim Optimizers to use for training the\n", " discriminator and generator.\n", " - discriminator_loss, generator_loss: Functions to use for computing the generator and\n", " discriminator loss, respectively.\n", " - show_every: Show samples after every show_every iterations.\n", " - batch_size: Batch size to use for training.\n", " - noise_size: Dimension of the noise to use as input to the generator.\n", " - num_epochs: Number of epochs over the training dataset to use for training.\n", " \"\"\"\n", " iter_count = 0\n", " for epoch in range(num_epochs):\n", " for x, _ in loader_train:\n", " if len(x) != batch_size:\n", " continue\n", " D_solver.zero_grad()\n", " real_data = x.type(dtype)\n", " logits_real = D(2* (real_data - 0.5)).type(dtype)\n", "\n", " g_fake_seed = sample_noise(batch_size, noise_size).type(dtype)\n", " fake_images = G(g_fake_seed).detach()\n", " logits_fake = D(fake_images.view(batch_size, 1, 28, 28))\n", "\n", " d_total_error = discriminator_loss(logits_real, logits_fake)\n", " d_total_error.backward() \n", " D_solver.step()\n", "\n", " G_solver.zero_grad()\n", " g_fake_seed = sample_noise(batch_size, noise_size).type(dtype)\n", " fake_images = G(g_fake_seed)\n", "\n", " gen_logits_fake = D(fake_images.view(batch_size, 1, 28, 28))\n", " g_error = generator_loss(gen_logits_fake)\n", " g_error.backward()\n", " G_solver.step()\n", "\n", " if (iter_count % show_every == 0):\n", " print('Iter: {}, D: {:.4}, G:{:.4}'.format(iter_count,d_total_error.item(),g_error.item()))\n", " imgs_numpy = fake_images.data.cpu().numpy()\n", " show_images(imgs_numpy[0:16])\n", " plt.show()\n", " print()\n", " iter_count += 1" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter: 0, D: 1.38, G:0.7021\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdefyWc9o//qNSRGVJZYwmW6FCmGyDicEQhhnGvgxuxr4zJMtg5sbYBmPfblnjtjRobCF79jWJrCEVUVlSru8f3c/jvK6zPtdv/vvdn/txHv986vO5rvN8b+fxOl6v43i/zza1Wi0qq6yy1mFt//9uQGWVVfbvW/XAVlZZK7Lqga2sslZk1QNbWWWtyKoHtrLKWpEt0OyPzz//fC0iYujQoRER8ctf/jIiIhZddNGIiPjwww9jwQUXjIiIL7/8MiIi+vfvHxERbdq0iYiI9957LyIi+vbtGxERH3/8cURELLHEEhER8f7778fPfvaziIh44YUXIiLiV7/6VUREXH/99RERsdRSSzXcd6GFFoqICAq3NrRr1y4++uijiIi85mKLLRYREe3bt4+IiAMOOKBNfR+vuOKKWkTE3/72t4iIOOWUUyIi4sknn8x7bLHFFhERcfHFF0dExO9+97uIiPj0008jImLmzJkREbHPPvtERMSoUaMiIuKtt96KiIhvvvkmNt1004iIePjhhyMiYrnllouIiK+//rqhnQ899FBEREycODEiIvr16xcREePGjYuIiN/+9rfxww8/RETEjBkzGsbLHOy3337Zx5deeqkWEXHNNddERMTqq68eERETJkyIiIjnnnsudtppp4iI+OCDDyIiYvDgwQ1tNc4dO3aMiIif/vSnERExffr0/PnNN99ERMSbb74ZEZFjdu+990ZEsS600bX8Xr/XXXfdeP/99yMiYs0114yIYq1YH8cee2zDHF5wwQW1iGJt9e7dOyIiFllkkRwnczRlypSIiPj5z38eERFvvPFGRET06NGjoV1t27Zt+P+cOXNyvp9//vmIiDjttNMiIuKxxx6LiIjPPvssIor1+uqrr0ZExAILzH3MtO+www7L7/7xj3+MiGLNmMvf/OY3DX1kFcJWVlkrsqYIe88990RExO677x4RBUp98sknETHXA/KsPDb045mmTZsWERF33HFHRESstNJKERExe/bsiIj49ttv484774yIAsFnzZoVEREbbLBBRER069YtIgqU4al69uwZEQUade3aNRZeeOG8bkTEkksuGREFkpWNJz388MMjokC6tdZaKyIipk6dGvfff39ERKyyyioRUXjOPffcMyIi/vSnP0VExFNPPRURBWp07949Iuai6YknnhgREXvttVdERIwfP77hfssss0xERGy44YYREfHII480tH/dddeNiIhJkyYlsnbt2rXhJwSqt5EjR0ZExA477BAREd99911EFMhyyimn5Ny5rraJJEQWvrPRRhtFRMRPfvKTHCPfWXzxxRvGoF27dhFRIJh7iWD0S79HjBiR4/z5559HxFx0iyjGt2xrrLFGREQMGjQoIiIuvPDCiIjYZJNNImLuvI0ZMyYiijX88ssvR0TENttsExERDzzwQEREjB49er59bN++fUyaNCkiItZbb72IKNahPu2xxx4RUczdaqut1tBOkdHLL7+cf3PNLbfcMiKKCKAlqxC2sspakTVF2KlTp0ZE4SWhJx7y+OOPJ5+Bgh06dIiIiNdeey0iCg/1m9/8JiIKz/rjjz9GxNx4H9fwHVyqV69eERHx+uuvR0TEyiuvHBEFeuNQ/j5gwIBERp7UZ/CKsmnPcccdFxERd911V0QUfPnpp59OHr7VVltFRESnTp0iIuLggw+OiIhVV101IgoUu+qqqxr62L59+xwf/AzXhjw4jLHebrvtIiLihhtuaLjW9OnTY/3114+IIoqAjLhovX3xxRcRERkJ6Rfef+ONN8b3338fEYWXHzBgQEREnHvuuRFRRD5bb711RBTR0eOPP57XFCHQLnBS/R42bFhEFMi19tprR0TE2LFjI6Lgecsuu2wsv/zyEVGgHzQ89thj5+lfRMSjjz4aEYXWIjLAvT/66KNcy9an6O3mm2+OiEJjOfnkkyOiiCLffffdiIh45plnMmIyR9psboyHNW8d47bW4uTJk1PDsMZFL8axJasQtrLKWpE1RVjekTomBqfCrbzyytGlS5eIKFCPd4Qkvis2x2EhzLfffpsq4BNPPBERBVfkfXmoFVdcMSLmKpsREUsvvXREROy9994RMZdTuC4k0Qcetmy844033hgRBU/q06dP/tSHddZZJyIKzoxfQvW33347IgrupM/PPfdcIoooAg+iquJpEMpY4Lz6M2rUqOS9kAfS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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 250, D: 1.316, G:1.089\n" ] }, { "data": { "image/png": "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2+L8YobnnntuRFS8F5LS+C9/+csjokKgvr6+9AfgZTS79ixdujT7OHLkyLb++enaJUuWJAriy7zv5RyecsopEVGhpTk8/vjj46677tpq/84+++yIiPjf//t/t/UPkkEUz163bl0iuP6Vc7h69eqtxmH1CWrqx/Dhw/N/xtU99dFc8Sxbi/p+1FFHxWGHHRYRlUX30EMPRUSFjnw7OK3viiJ4j9asWZNzaAxLP01fX99WEXbQF7arq6ttspkRBrfu5DEgzCRk/fWvf31EVIvY8971rndFRMT111+fLvd99tmnrcMXXXRRW8c5aphGHBsG7Kc//WlOlgFhUlrwJZmXWGAwLTiT3dPTk4Pp3kxi7vtjjz227W/t5Zz40pe+lH30Aj711FMREXHBBRdERGW+HXrooRFR0Q5KSX8efPDBXLg+Qw20ed26ddlHc6h/ZYJDV1dXvvD6ziQ2ZuaQo4oyPO+88yIi4sYbb4wTTzwxIqoQkMV72WWXtT1P+IT57noK/8EHH8y1VNIqVKOcQy+sdvs+Rd7d3Z1z4oWoO7kiIt75zndGRMStt94aEZXD6LOf/WxERNx22225HtGuH/7whxFRKaMvfelLERHxuc99LiLak10iqnX71FNPdThrJbYwlcvkENKYxI00MoRkUISdNm1am0MG0tKOixYtSq0BfZg8kOR973tfRER87Wtfi4hK+9Hqp512Wmo1pi+zRNhg3rx5EVEhCDSCdL/97W8jYguKMO/mzJkTEZVZVTOT2jTXTjvt1IqoTHl91IYFCxbk7zS4ezOVWQv/8A//EBGVOc0COeGEE9LsF86iwWljiKuPNC/0FMgfPnx4oq52lCmDdafMlClTWhGVKQhp3XfRokXZFnNjLDyHk+W2225rew50OuWUU3IOoRDEMIesJmjDgWVehGBGjBiRqGst6V+NirXNISuivA4yL1y4MD9jgr7qVa+q3yJe/epXt7X/X//1XyOisuKmTJkSv/zlLyMi4sgjj4yIytT9t3/7t4io1iH6w+znUGTdjBkzJhF+oISjso+kQdhGGhlCMijCcshAVMiGoA8fPrwj5Yxm3XvvvSMi4oEHHoiISuvttttuEVEFqM8///y48cYbI2JL+ldEpAPj6quvjoiI97///RHRmRIovIHLPf7446m5So4C7epJBRERY8aMaUVU2riW/tbRR04nyLP7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dPMK84LSPjzCOMPvf//71L48pbyBNDqOwGPHo1h6gtetW9dx6JM2Q8OyCPX222/fxvHKnM7e3t78H2534YUXRkSV0SSWassUbyo+P378+Owj/sdrLB8XWjp2Az8vCwGsXr06rZg6J4qo0KBehM0GjnJDgvEZPnx4R5I9Hm0sZau94hWviIjquBVt/PSnP528E+eGhuKxF110UbY/ovJoQ1F9qCf/swbqbY3o9PTLyKsfL1n/Xt26MpesM2PJ4w2B5T7LgPr5z3+ec8gqgob67KfnmWvt0a/169fn2ELpclNGeWgbaRC2kUaGkAyKsHI02ftigjjFHXfckZpfuYxycznPJc+uDB4IfM0116R39Zvf/GZERHzwgx+MiGoju3vihhCNVobeb3vb2zImW5YTpcnL+BaEhTwnn3xy271//OMfJz8TW8YLy3Iy5UnttOj73//+RJSvfOUrEVFxJN/VXpxVTrF72Bny1re+NcfJZzyynrF69erso83d5gGv1taHHnooP2PB4FUQDVrKlca3nTR/xRVXZNYZRL311lsjovL0u6e8cf6RWmG1iNiypRLPJ+WJ8GUcdp999mlFVLm8sux4YB944IG0PniH5UvXPckRVczUeOnjJZdcklaX9lmP+oSfizXj5/pmXbzhDW+I2267LSIqK5E/oHb4WYOwjTQy1GVQhJWjScPSuHhIT09PxuLEOXmHZStBJ5yAhrvuuusiYkveLc2NG0FwKHfppZdGRLWH1t+8mLT52LFjE20hiHvgufXyKRERkydPbuOwnu0+48aN6zjUyJ5PfYRQvIA8gDTwQQcdlNxENpd7adfZZ58dERU/f9Ob3tR2vbjgmDFjOg6JghLm5+c//3lHLnF5qJafI0aMyDly38MPPzwiqjirbCCxdG02p8cff3zurOKzMGZQxxxBP55U+6XFNru7u5MrHnTQQRFR+RM8t87RI6psLnMH0dxn9OjR6WW3TmWrmSvt/eUvfxkRlYV4++23Zx/F22UsmXeoeMkll0REFWNWyE3GE2QeM2ZMfkdUozwI+0c/+tEfv4EdXOusBclE2bhxY5qzTGOBZxPg5fL397///YioFtekSZMyLMPU9DyueAuFQ4BJzIxF/p988smOzdblebUD9ZF5W55r2t3dnWEli40JVJ7xydn0T//0T21jMm7cuAyFMeu8oMw4yedeDovC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tdNOO7UiKkTdWsFtnkW8009b8vRd8gMUcc7Mvvvum2f9GEtWCzTTx7/6q7+KiIi/+7u/i4jKQ4snvfSlL01OBBHLU/xeeOGF7KPEEPzO3OlfV1dXWj/8EfrHknB/SMsfYD723nvvTLG0RiQAsKSknzr76LOf/Wxb/53gPmnSpES70nozR/X+RUTssccerYhqTUFvnHH06NHpobUeleQxd/WiexGdp6YfccQRGekwz6w2KajOS/K5c4KPOOKIiKhOhFi6dGn6hQjLiiVV38BRlwZhG2lkCMmgcdiygDaNBVUF4yMqTxhPpWucPA65cAPn5vzLv/xLarXa+Z8RUaGydtCStCNUotVHjRqVWhha/KEzSzwL8kNkqNPX15e8T8zZvTzrne98Z0RU5+bg3NDxW9/6VnITwXXeQDFc7fja174WEdVJcddcc01EVGi2bNmyREkozU9Qnw9SnqVLoFZ/f38iWblND0dW3tQ88GzzHt91113J2/RD4j3vuJgolBKf//jHPx4R7WcOW2csG2vHOiwFIpcn8xnjUaNG5Zzpo+2G1gl+ak7lCbB0brnllrQwtLVMAuHbsfbLpBH96O7uTmtAH607a20gaRC2kUaGkAzKYY888si2jcHefqg1derU5GS4AE2Oh4pZ4QTO2MSDent701MnUwhSKNiNM+A9PI74EC15/fXXZ1zNFkD3qKF1mwpzyjyuUpafOeKIIzq25rmGlVDGJU8//fSIqLyWzz//fG6nk3FFS0MpWVxiyzyxsmskxP/yl7/M59nShnMat4ceeij7uO2227b5IcwdFNpzzz0ThctNDu9///sjouKyspNk/xjbp59+OqMDZTaSsbjuuusiovKoH3bYYRFRZT4Z41//+tc5NvpnrUDJefPmtc3hPvvs04qo4vUlWm233XaJaPpmDLXjrLPOiojKQnzve98bEdUcrly5Mrkpz701z/phPbGSzjvvvIioipNbHzfeeGP6P9yrPP6l3OBAGoRtpJEhJINyWBqO5oaS4ktPP/10amzaWaYLjkBbQpYyhjl8+PDU/jisa2k96CfTCVqKg0HY4cOHJ7LSxvogzloKpCm3qpF77723o+i1owhvuOGGtna6F94ujnz77bdnH7/xjW9ERMWZxSllhMlpZanYDO/efX196fE19rgU1KgLHgp1yqMjZ82a1eGNFRfn5Syzf2QF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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 500, D: 1.202, G:1.234\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 750, D: 1.116, G:1.522\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1000, D: 1.203, G:0.9437\n" ] }, { "data": { "image/png": "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7t0RWK6M/vaTn/zE9fyh78urr74qyZdEhRujl++5556S5L6HS60YXTw0OvXr1y8r+bW0pVpbWlpSi7rZEi1wGN6n3OeGG27oSrqee+65kqS//OUvkvxeEtwCV7rlllsk+X5N2Dbmzp2bCHO1iSVdGTjRniTFGIYNG+aCb5gL5W0xpCIlccavuOKKnHtz3dtvv+24chqiWyciohugIIelCDUWS2t5DXuLIqfD9aybBz2T9Kr99ttPUhsl5u+bb75ZkuegdPgi6ALroe3wFVJJnktRM74buAo6HDherIXZhrmFkgkcn/HAaZ5//nlJ0tprry3JpxRCzQkS6QhC6kz5FNstAG41YMAAJ8FYVwzrjJ2CHreMiU70Tz75pNvDW2+9VZKXirD8I1EdeeSRkryNAYkINDU1OWnAjicIVezQHhZjWWd/GDfX77LLLpLa+tpy/ux4+A7JMSNHjsy5jnVEQunTp48722mIHDYiohugoJUYfcqWGQ25J9fAhfgf/Q1Oh4UXOZ97br311nr22WclSYceeqgk35uGkp9QP6zDWOn4PHTGMw50V1vYuqPoiP8WiorVm3S1999/PzFWqO7DDz8syevQxx13nCTpkksuyfuMMPyymLHZ1hQ2UAPuEL4H56CLIOvOGOkphH79+uuv64YbbpDkgyn22GMPSW36u+QlhqOOOipn3ljBecaoUaOcFICV1eqwHUUx3+Pc7r///pKkAw44QJK0zjrrSJL22WcfFxzC2Qb0L8byTd/c3//+95L8HoTtajobXBE5bERECaEghx08eLCkZOHusICyTVAmsglqhJ4zfvx4SdKQIUMkeY43bdo056P88Y9/LMmn0X344YeSvA8PvQddIYyW4n2oKXqE7bi2NLHddttJauu4Lnmu0bdv30RpUPyx22yzjSTffgR7gS0xylzt++2BqDBgu5lnMpnUIuqsP/aHM888U5IPGYU7r7feeq5zH9998cUXJXnf+nPPPZfzXBI94FZbbbWVpDYfJdIA5417tmdZXRLwDCK1Lr/8ckleinj++ed17bXXSvKSIOeVFh733HNPzj1tTMBBBx0kSfrjH//Y6XFGDhsRUUIoyGHxDdoAf+uXDcF76Kz4nqC4cBi49+zZs7XttttK8jHKWEzhQkTPrLfeepJ831UAV1q8eLGj4Fhj87Ux7GqQfojFEx80XP6NN95w1kbipO+9915J0oMPPijJRzLla1IldZyzAvaM7+cr0WOtnjybefzsZz+T5H2qcHte3377bcfJWW90cCy+6Ig8a9q0aZK8BMA6hDodY7fx4cUCq2yhnqucbWIBmCvrwzmdMGGC87tiLUeqOOuss3Kew3ewW/zwhz+UtGScFUQOGxFRQigqgd2mqEH56urqEjHDcFasw+PGjZMkrbvuupK8fsdzP/74Y6crjR49WpKP6oHDoiMALMBYJhlPvlYdNjpnwYIFOf4t5rgk8ao2awPqjA7T0NDg5kT3bpL2iQ3GL8c4sKJajhsWmktD6MPr3bt3Vkrqf/kaRNtieIwfDjF16lRJXg8Ox8F38ceyp3BlpDJsCuj3WJyJlBo0aJCTtGypmKANZpen1yElYZkG4e8D+8w555wjSTrvvPMk+XMKB8Z+w+cnnnhizj2L8e1HP2xERDdAQQ7bs2fPrKREkbSQa6Ff8F4YzSG1ZV9InrKOGDFCks+XfO2115zvbscdd5TkfV/oSMSlYnEk/jQo+yKpjcpbPSzkvlKyFX1XUGekCVvShoyYMWPGOHsAMcQ24Rt9l/e7KoG9pqYmG94vX7Mt+x77AVdmP9BH8Row9j59+ri/sSCz7uwhfk3mH+ZUS15CC5tf27aanK2lsYfBvSQlpaXW1lYXJ33ggQdK8lbiLbbYQpLPXuoKpHHYgkYnfghsBi4ZxLewSgCbjcJNiB2pWGwU30EUrKurcyIui0OgBM/F9L/mmmtKkuvTySaH1SVs93A7l6UBW6+K8TD3G2+80YlaqATMkSB4jDLAioGdhe1/agMpQmMcYqt1pyDeAg4zaWS77767M2pxaE866aSc72Jk4kcHkbMBLuF8bYGApbmHwBJK1uvggw92BlRcUKeffrokL85/G4gicURECaGgSIw4BdWzfS+z2WyiWj8iDkYmqBH/I2bhkJ4yZYr22WcfSdLw4cMleaMTrg6CrjFoIRK/8cYbkjxHW7BgQaIOkK3t1NGq8YWAocLWU4YTsG4nn3yyc+sQ7H/EEUdISoqEXYFQnKIul60XzD6EtZwZC+V8UFEwgKHm2JDBjTbayLnmCABBFUKMxiCDuM0z+Tx0GdryMYXmJ307NZ0qKytdUj7lcNjTzrrcCiEanSIiugEK6rA2QAIXA6itrc3pfh5eiysAuR+9l/Q6qFK/fv2c7gcF514o9bfddpskb6jANcKz4RZ9+/Z198LIZZOy07Akle5scTDugYRwzTXXOJ3u7rvvluT1XebK2qZVKlxSXdY+JywsYIP+kRBYOyQIrkOSOOywwyS1SQ2EnvJdEgfYb/YfoxprFhgD3TOsm6yr1qAzYJ169uypiy66SJIvOsB5RTpYmqGTIHLYiIgSQkG2Y3usWovjokWLEmVN0YP++te/SvIpZuiw6Dhwye23396FFqIbobPaUiHcy5aqGTZsmKS2UDD7Ha4pwlFd8HMpyYXh+KwHuj3W9GeeeUaSdN9997kgDwLobTqi5SL5rKadAfexnQfDWsTsGXsDFyRAHy6Ink2gAHt41llnOSsw6YEEWWB34Bnh2QnvyfstLS05YZOMUfIS37cJJKFXX33VrcN1110nyUsN3+a4IoeNiCghFOSwtps6fjeCAMLP0GvgGBMmTJDk/a34YfGlFko2GgAAFmxJREFUEjgRJvOix0Dh0Z2wJMKBbcmNsEg3Fk78f2ld2zoDq1PBkdDfGCcWU7jLEUcc4caT1lPGWre7Sl9rL/mhqanJ+V0JiGAvkRRscgaBAnDtBx54wElJcFauZR6hVVryvnVrJS4vL3fnIU/Xho5Of4lBoP/QoUPd7wGLN+iKAn7FInLYiIgSQkE/bFlZWc6HtvxlbW1t2O9Ekg/gx0fJ+1iN4XSU4mhsbHSUk2tIYCclD+p96aWXuudKnuOGPmCslHA/UpyIwPr000877MODS6NvkZRPehWclEB3LMEnn3yypLaIGNbBFq0DSAs2vLEzyNcf1nIt9rBPnz5ON0M6QmIg4ZpyL/z/6KOPSvJtRR5//HHHKdkryqXYnkE8g+vt51VVVYlQSc5M4EPuMj9sexJNUFrVjQdJhDPV2dI1hRD9sBER3QBFpdfBWeE0cLGw8zZcDwpLRAvRUTyH4sq8/4Mf/MBR+DvuuENSm14r+bKnFLki7hQdC64VJmBbyyLlTYisWrRoUaepM1zge9/7niQfccVcaa9BRAzpVW+++abzKf/5z3/OuVdoHZU8F7E+744gpM7l5eU5HJZ9Cjk8UhL7QOI6NgT0TdIcd9ppJ0k+LnrgwIEuNpj4WjgXCRBw1LC8kJRs1hVyK9YGqYM5dGW0Who4Y/heDzroIKeHsz5Lo8EaiBw2IqIboKhYYmvJDKNm+NumQll/IhQLDkKRqxEjRiT8rFBZGiWhh2JptdSYMYRjhIPYFolLov/YdozoqrZ1CFbU0LoJV0bvRkphvdrjqB2JxCpUSNzOJRwD+jXPoqgcUhNWYyKc4Lz19fXOv0wrEtYfzmqjpaz1OpTEQgkufA047rfGYfFurLLKKm6fr7zySknS0Ucf3dWPdYgcNiKiG6CgH9b6l2wxtkwmk7gmraAXHATKe8IJJ0hqS44mn5TvwGmBzRWF0qJTMIaKigqnG9mInq7wlVlJgywWIn4oJMYYQr8xUgIWT9alWGtwZ/UlG4FmM3Oam5vd2ljrLO/jF//Vr34lye8TBd9XW201/e1vf5OULLZm/fO8DzfnmbYgffg3kktX+NLbA+Oi/WVYXA4vBdb/7wKRw0ZElBAK6rDoP2FlCclTxYqKCkeRiFKyupZtoMX/UM0VV1zRcVT0W9r18Rz0COsHBqEfFgoOZYQ7gCWxEgffyXkllhmddq+99pLkK2Pceuut2nLLLRNjlZLNk7sC+azE3B9LPxJPZWVl4tm22RjRaXvvvbckP0/8kWeffbYrD8r9N910U0neV420YdfOcvWysrJEJg+cNZDwulyH5Vn//d//nTNXWolss8027qxj+X766acl+WiorkSaDlvwBzt06NCs5A9eWr0bKT3Y3v5QSU2iH2h1dbVLXCecjcPEYUb0telL1uldU1PjrrEHAaPG119/3WWbnVafmUAKEhGWhmO9EMLN7tGjR07ly3zGLWsoZF64ajA6oc7ssMMOktqKD0htoaoceIxM9kdmCZQN5AhVKevOsaV3uoLoWuBK5KzbPlLjxo1zhtINNthgSR/XLqLRKSKiG6Agh0WcQlRFzES8CasUQpVtgLY1dgAc+CuttJJLJrDpW7aGre1tao1AmUwmwS2soey7KC/ybSNfaCKwxriWlpZEwngYJigpYciz619TU+Ousa4/KxWF6lS+e4VgXLZHzdIInCAYwnZICMNwrfFzSYoetIfIYSMiugGK4rDAhrWFJWKADS4H/E8YH/dauHBhIlGe+6N3Qq0xIME9KRWKyyQfrJHl2whr6wy6kloXKsJmU9UqKioSAQrtBcTbPc5kMolu45Yr27KmwfhynlVZWenOg3X9fBdS0tLkooUQOWxERDdAURzWWjlDCguFhCrD0ZD3bRlUOF2YsGwd9VZ/SBuj7QkTwuqyQdnTZZLDdiUK6bAg3ENrqbWF62zwhbX05usxa/Vhey8bWBPusXUj8hkctyvT67oSS0tKChE5bERECaEgh42IiFi2EDlsREQJoWDwf3u6QTG9Spc1dNTCGOpT7UkjtpRMMeA7+Cut7md1w0wmk9A5rU8ztITb+XWFntWRQnGkFRIVZX25ncHSsBJ3Zl3S1iEt9qAjiDpsREQ3QEEdtj3KNWbMmETJx2UdadQ5jcKOHDnSNeui/Elwr06Po1gu1RnKX4yV2N4/3zPa44Yd4ZZLwlntGpRKtBold21X99iBPSLi/wmWiMMWAilINr3tu0ZnqHOY7P2fe0hK5xr5uKLN7CGjhwwlu17WbwnKysra9U8XKnNqdeQlkRLC1pFICjbCCdDgm3abSBiUwy0UrWZ1wrQ9pKQQ5Wa/K9i2oxZlZWXtShqRw0ZEdAMsNQ67rMJSLoqlF8N52tM7bVMkuOOSWETzjcdGAlmrcT4OawuVg2w2mzpnuDyZLHB/Gx+8/PLL6+yzz5bkk/fR34h4gzuSD03yd0e8DIHlvCgpKS1jKN89l7V4hMhhIyK6Ab51DgvVPueccyS1VSugbCSUnAoHFrSQoPhZZ/BdWBgrKysdh4Gi0wyY/Es4n9X98nHn9nTnkAMxvzA7qljYci5IEOwXpXzWWmstV12D/f3ggw8kSZtvvnnOWGlvQWF3m/nT0TKu4RwtusLnG+rpcGr0booHcm5tTDywfvli4hc6VSKmM4c57WDssssukqR7771XkheR1lxzTVdBf8SIEZL8IaZaPr1m28Oqq66qt99+u+A1aZtdzOZ2VHwKRUdqBFGzmHXilZpP1O+1SdsYqV5++WW3Th0xOoFi3Em2rAtGFIgMBHWNNdaQJN1///0uAIQSMXRBeP/99yVJL730kiR/2Ok4aAlVNptNrTEVdAtYYqKLuEwKp605Re3lq6++2o1vxowZknw95rBwwn/GJcl3+6OeFetWyADbnusKRJE4IqKE0GUc1oqzUBXEAVuUK3wunayvvfZaSZ7rnHbaaZKSKXJ815YbyZdmZ1GsOAVV79Gjh+N6xQKqTa3eo48+Wo8//rgk6aabbpLkO/XxHIw0cCDmRlke+tiMGzfOrSnX5OnenuCwNgQyLBGDQYo9stJGWoocktF7773nJAf6/v7617+W5EVfnouIiRTFM5j/rFmzUsMyQbF7mE+aKNYVx1zvueceSdIxxxzjqkTSmZ5qknwHaYE9Rcrg/z333FOSNGrUqLzzKjRHN/52vxkREbHMYIk4bBhiZQMD0F1GjhyZ93Ow/fbb64EHHpDk9Rqo8oknnijJO9uhejaoGn2kubm5XS5bLHXujLkfyQCKStjm0KFDExX30ZmQRKyxCX2JNaEsbCaTcVXp0wI48nFYW1CtmHnZUqQAfRqO8dvf/tbps0gCq666qiSvk1vXii1HA4YNG+YMVqwNBq3guzl7eMghh2Ql6brrrmt3ThbMsVAxBK6z/Wpff/11SdLaa68tyQdK3HDDDZKkU045hfFK6lhSSOSwERHdAAXT6zoCa+2D6lCqFBcAuOaaayRJU6dOdToGlHTcuHGSpOeeey7nO2npSlYv6wgsJ7UWyREjRriueWnfxWq43377SWrreSv5fqphKR0CC373u99J8nrOzjvvLMnrvRtttJEk6YADDpDk3SMff/xxwhVSjGW7UG+hNL2O+9s0PjgJezxq1CgdeeSRkrxu3l4xvlCHDgF3bW/MITrDWe144Kxp9pDQeo3ObwNjsF1ccMEFkvwcrcekmNDENEQOGxFRQlhiK/Ghhx4qyfurAPrH7rvvLsl3HseyRj+dvn376o033pDkLZmMab311pPke+ugZ6Rx2s6kLS1J4AQUlHKr+N1Gjx6dc11zc7PTWV944QVJ3u8Kd4ZD8XrsscfmXE/AwcEHH6zDDz/c3TffePIFTnRFEAHrf/PNN+eMqbKy0nWyY8+QNkhuALbQm+WwhfYw0DM7vYfWlpLGUYsJUQXWLoDFHAv/fffdl/N52OImTWeOOmxERDfAEuuwcFZLkaBgcBt8qoQk0o5j8uTJiYLgRPJgKYUrpHGHYoK802ALWefzz7XHtbHgIlWAUAejgRRzxPcM8PfRe3SzzTbL+Xy33XaT1LZ+lipbip/vM9voqiP9cllfdHMs/+zT3LlzExZT1oI9tD70fJw1/Fzydg/8ve2F81kpIp9UYeedtpb2WWFaI9egyzM+Ch288sorOd/le2PGjJHU5j2wLVOKjp4r6qqIiIhlAp3isPk4mk3yBrTxwwq64YYbSvIW1KamJqfnostCbdoLVLdB2JISUTvtwerDULywOZKNtOJ/rILoKrarOq0LR48enUjwXnnllSVJQ4YMkeT9rei0WMiPOuooSW2+Tkl6++23E0W4C3Ee+1lnOtGzzljx4ShEJz322GOuryrd6AcOHJjzHXRZzk4QFywpP6d57733ihpfmh7aEX09zWoNstms86+SjM9zP/vsM0me46bdIyynFK3EERH/D9Dl2TqUOkFH3X777SV53xScFayxxhqOY9x+++2S2o8ISdPDlsRKXMiKajkr+hn6+T/+8Q9JXuKA0h544IGS8qcD8jyyl6ZOnSrJ+1vREykTCocKo47SSpB0tAhb2prxLDjscccdJ8lzFqz677//vp555hlJntsgXRD9hUSx0047SfJeAizO4TPTWsPki+SSpBtuuCEr+dIwXZmUzr222GIL5yPm9dZbb5Xk/cDMFX0eyQ9JjEymXr16tRufHq3EERHdAF3OYa0+sfzyy0uSy3QAYfYIsalQoDQ/q+V0HdVXpeL9sOhaixcvTlB8pId11llHktczKX/yz3/+U5J0/vnnS2rL7oAbIhXccsstkqStt95akvfLEin0pz/9SZJcHu0f/vAHSW3cxraMBEgeixYtcnOkBE6a37MQ+M7kyZMleS4PJznmmGMkSR9++KHjRERmrbvuupL8/mPD4FykSQf5xpenuHrBPexKDjt27FhJ0u9//3tn2d91110lyTUip/gbUmRnvBWFMq5CLLUfbHB4cgaSD8U69W2X7GHDhkny4Y/5uqhZdFQkDoO++eyOO+6QJJ166qmSkhUyCBLB4HL11Vfr2WefleTXhx8BIi+B4q+99pokn4Z29913u3Ewznxhc2lztHtIsIPt0xoCYsW1Bx10kCQfAPCb3/wmZ0xPPPGE7rzzTknSmWeeKckbG5nvL3/5S0le3YE4Q8Co/dSVFSc6g7T+tuH5ZYyXX365JJ9KuCSV/i2iSBwR0Q3QZcH/AEoElYZiFVKy2+OKNoiakiUYQaDenUERydLuM6QGKv4h5lHCBkMKHQIuvvhi9z2kg3333VeSN1whVhHSR0ohcwp6okrKDZLojMgXusDSYMP2KLvz4IMPSvKlTkh7/OSTT1wJGIyOuOgIAIFTbbrpppK8eE3YKedl0aJFBV09XQ0rilrOGiZPsB7HH3+8JOmyyy5bauNKQ+SwERElhKVWNbErOnhZQPUw1KAromu1tra2S5WtblBZWZlTtxdjCNS0srLS6Yy8EibItRjUSNpHEmDuzc3NGj58uCQfxogBY4UVVpDkKT3XoafDiXGX1NTUOLsAnKhQZfzy8vJseG0h2PTEp556SpIvaYKxCd2cMT788MNOIuAaxkgyw6RJkyT5YAv+Z0/RYevq6txaoOdapOmwnTlz9jtINJwH5tra2uqutcbF9oIuOoOow0ZEdAN0mQ5rLalLg7OSmoeTHitxyD06qu9AFeGWPAtuWllZmXBJPPbYY5J8mU+CHrhHPm620korSfJc69xzz5UkPfroo5I8lSY5Ao6Fjhvq8bZkS6G1LkYftMnmXPvTn/5Ukg9qJ5WScErCJ/fdd1/3HKSL2267TZLXveFOhBvyDLg0bq1XX3010e2tWBRz5uw62O9wHkjCYG3CWsIERnwXiBw2IqKE0GUcNk1Hak+nDEPR0q6FyqFfUEKGpOklQR6nfM7nCxcu1IsvvpgzDqyoWFzR06DWV111lSTPPR555BHHUbGOouPBeeC8zBEuRnmacE06YzXlO2mFzcLP0B0nTpwoyZerYczod9gOevfu7bgPHJVUPKQSrMZIIVjNWW/2sn///i7dEl9xZ1ICJR8SyD5Ifh3QpZkrAR48w+qnc+bMcT7ypYFi+wVHDhsRUULocisxVk86m+Fns8CXunjxYpfcDkW3Xd2hsHAjomUYOyGClNgshPaiZGyi9aBBgxxXZE74WxknYXjWP0fa4A033OAoJxyH0Ezex7eJBRpfr0UxwfotLS1FB/+XlZU5ToSlFv8xCeREOBFqyRqRVtjY2Ojmxb3wu5M2CAcj1I/kBvy3YdsLuK5N4+QeM2bM6HCkE8n2RMWlFV9DMmA/KIo3duzYogrVFwv2iogw1glEK3FERDdAhzjskkSeQMEok4FOM2LECG211VaSfBA1z4HCkziM7kpKGk2HOoKOdj4rLy93HAVObnUZdD/8sXBWONAZZ5zhroErE6X10EMPSfKch3UpBlbvCWKrUzlsvphp3oOjYeklrQ59D0suEkSo04ZxxZK02mqrSZIuvfRSST6ZAd0ZCYNnhbYEa0dAn8diXqyUlK9FB+NEqsO2AIjqYp9IoZs4caI7w+3p0ngEpk2blvN+WiJMPkQOGxHRDbDU+8OmFfdGxyErRUqWgUSfw2KHDpvmB6uurm431a69Duz5xo9VFE5DcjblUEh9o6UmhdaIyKqvr3f3x0qKdXL99deX5IuVtWcl7GiSPntYqGC65bqsv32f+WPhRdKYN2+eW3d0RHRA/LHo5KwNz7CpkosXL263nO2SZOswJ3Rtaysg24gsKSzMu+66q5OG0u6Z5ilBmmDNw7JDaYgcNiKiG6DLs3WApeiUiiEmlpjaDTbYwFEbPoOq2bYfcCUS3m2R6o4ksoM0boUVe8GCBc5KyfjgDhdeeKEkn5GC/xB9NOQU+GzR4eGs7RXuKma8xcTQ2u+F11rOYBsV812kACQM9PI+ffq4nGDuhZ6X5t8OErUl5SZ9L0mx8/bA3nHGaI8JR6WVJPt1yCGHSPJSRT6kjZf9R0/vSDOsNEQOGxFRQljqOizAEkxEz/333y+pLQ+UGGE+w9pJbmVa1oZFMU2GrG5QUVFRMJtl0KBBTu+CW1hrKtUksGpTSJpymI2NjS7fFU6C1XTHHXeUlOSOxVThQAqw5VY6WoQt+F6hS1MRxtna+7aXb2wRFuxO+257OmxHCstzxsjTPfrooyX5XGekuHfffdcVkuvMc0J05pyCb+0HC6gwh6tm0qRJTuQlyGJpJiyn/WBtipTtvSolO57bkEl+wPxgr7jiCklt1SAxPBDY3tE5FnKpIeYFwQBujj169MiGY+vovfMhXx3gtHt09N6FjGrF1nTqCAh2IViEZ9gSR8WAwBpUh84gbY4gisQRESWEb53DftfoigJeVtyzXMT+P2TIENdVvtiO38V0TE8Lii8kEnc2kL6jsN0JulJqWppF2JYVRLdOREQ3QOSw7YRf5kv/a8+QYvWgpqamdo0MNonc7gulV0Jd1AalBN8t2ujUGaQ9txDS0sfypcClPS/f/P7z+TJxTruyaFzksBER3QCRwy7BHK0+mNaJoJhwwq5EZzksHAJujqMf7l9s8PvSxrLKYdPcbB1BtBJHRHQjFOSwERERyxYih42IKCHEH2xERAkh/mAjIkoI8QcbEVFCiD/YiIgSQvzBRkSUEP4Prf5i6+gz5jIAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1250, D: 1.167, G:1.078\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1500, D: 1.173, G:0.8004\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1750, D: 1.258, G:1.037\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2000, D: 1.292, G:1.066\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2250, D: 1.387, G:0.9539\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2500, D: 1.387, G:0.8981\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dd4BeVZ3+P1MyoSyym1AEpC2hK9WIFIFQpUkRYZeygLK4FEVApAhIUZqCYKF3hKW5KD2AgCCgSAcBDQRY0ACJ/GgSSELm98fs5577nrn3bfPOTN7hPP8k8763nHPPfc/z7d+O3t5eEhIS2gOdwz2AhISE+pF+sAkJbYT0g01IaCOkH2xCQhsh/WATEtoI3dW+7OjoGBITckdHBwBzzTUXANOnTx+0e/X29nZE9645R8fXLhb1/Bzrmd/o0aMB+PDDD6se18xzaMWz6+zs45XZs2d7rYbXsN0Qz1Ekhk1IaCN0VNv5Pg4710ifYzy/mK3aCbL17NmzP1ZrmEdi2ISENkJVHTahPrSTjtsMs84p8xvu+zeKN998E4AxY8a07JqJYRMS2ghJhx0Bc6xmRW3F/IZS7+3u7mbWrFkVny200EIAvPHGG8Ccs4ZrrbUWAH/4wx8cB9AaSSDpsAkJIwBtxbAD2cFkiY8++miO2J0HE0UMO6fooa3AcDHs888/D8AKK6wAhHiB7u4+U9BnP/tZAB555BEAFlxwQQCmTp1acZ277rqLjTbaqPAeuViEQoYd8h/sqFGjKgb24YcfsvHGGwNw3333AUH08kc2Y8YMAP75n/8ZgI8++giAVVZZBYB77rkH6HsZDQLwnHh+c4o4NZhotUg8mGhmIxmMNfR9/OCDD6rdt6FrVQtEqTXvJBInJIwADJlbZ4kllgDgwAMPBOAf//gHAMssswzbb789ENhXXHfddQB87Wtfq7jGTTfdBMCSSy4JwPLLLw/Ac889l+1qiyyyCACvv/46MLyBAqNGjWLChAkAnH/++QBsvvnmAPz5z38Gwk7b09MDBOnh4YcfHrJxlhmXHIMiX72hjHksvvjiAOy6664AbLXVVgB84QtfAKCrqwsI0tNQoxqzQnV2/dvf/gbAO++8A9T3XJpVTRLDJiS0EYZMhz388MMB2H333YHAil1dXTz++ONA2Lk/9alPeX8Abr/9dgDGjRsHwBlnnFFxrR/+8IdAny5bK3FgMHVYd9b3338fgHnnnRfoY43VV18dgEcffRSAueee2/EAgd08RwmkGVTTYbUDvPXWW/3Oi5lTRo1Zvkj/ihkyTuhwfu+++y4ASy21FACvvvoq0JgENJR2CO0rd955Z81j/9//+39AkATfe++9wuM6OjpqMmzSYRMSRgBarsO6g7tb//d//zcQdt48s0Lfbu5uv8kmmwCw6qqrAvC9730PgF122QWABRZYACBzrF966aUAfO5znwOGTk91DscffzwA6623HhDM+1q71VsvuuiiTM9RZ/vjH/8IBCYSA2HWeuCznmeeeYAgDQAstthiFWPTffH2228D8N3vfheAW265BYApU6YAfesxc+bMivvIIIceeigAX/7yl4Ewv6eeegqA+eefv+aYh1O/3WmnnUq/UzrYb7/9ALjxxhvruuaAUg2bPjMhIWHIMWAdNt79ZFb1TtknF7gABDbcd999ufjiiys+89g99tgDgEsuuQSAlVdeGYBXXnkFCPqQzAbB/1qGVug/6tiyhLqKn//lL38BgiV49dVX59vf/jYA6667LhCc6UoNPsdWSAmN+mFjnfTll18GAuMq0ci4zm/8+PFAn8Rx2WWXAUFnja+57777AnDqqacC8E//9E9AWLtcWGVD86t3jvXCcftvNVaPpaNWIumwCQkjAANi2I6OjoxR9WN9+tOfBmDZZZcFgi9V1pQd1Usff/zxUmuaQd9///vfgeCjnG+++YDAbF57vvnmy/SqskiSVuzO6mH6jWP/ccyWXV1d2U696aabAnDbbbdVjF2rcS1/YD2oxrBFPtR7770XCLrrQQcd5LkV11V6GTt2LFBuBYWwRssttxwA999/f8X9fR4ychzwD+W662AyrLYG/fjVkBg2ISGhKgZkJZ577rn7WQdXW201IOyYMtyFF14IhMBod89qu7TsI2RYr+k1inyvgxnkroU1voeJyvHneYZQtxceGz/HwUIcCfbGG29kgeh//etfgSAZ+Ld+Rc+ptmauv/qtkpTMGuPkk08G4Kc//SkQ9GcYHqvwoosuClR/f4wHqBdGeSldDgSJYRMS2ggDYti8D0/ceuutQPDdubsYD6yP0hjaIsQRNlonjSQxhviFF14AAptX2/lbgQ022ACA008/HYCtt94aCPr6pEmTgGD5FZ2dnRxyyCEA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2750, D: 1.325, G:0.799\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3000, D: 1.322, G:0.7518\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2daYAU1bmG31mYYQBRYlRcEK+iAZdcDRpiRCJRuXGPUUTjAsZd3A1qjEYkikFxiSgKYoyKiRFXEo2gUYOo4L7FJHg1GjdAkYAkwAAz98f4nFP9dVV39TLD9Nzz/oHprq46p+rUeb/9q2publZAQEBloHptDyAgICA9wgsbEFBBCC9sQEAFIbywAQEVhPDCBgRUEGpzfVlVVVU2E/Imm2wiSfr444/Ldcqi0NzcXBX9u5g5VlVVca4yjSr/NQq5ZnSOzK+6umVvbmpqkiR16tRJkrRq1Sr3O45ZZ511JEn//ve/JUlr1qyJHUN0LPY7zhUZU8a/nTt3liStWLEi4/fR/3OO1atXZ3ze1NRU0DOsra1156gU2HUKAsMGBFQQqnLt2OVk2PaCtAzbpUsXSdJ//vOf1OduC+ZNg+gca2pqmiXPrACGW7VqlWPQmpoaSdlsnMSwtbW17nM+41grGUTGlnEte+2mpqbE+4dU0NjYWLKUtDaxzTbbaN68eTmPCQwbENABUJEMaxmgENidq7q6uvnLz2OPj7JHoWCcw4YN029/+9uizpEGy5cvlyQ1NDRIitdhYTr+ha2am5vV2NiYMd66ujpJnv2sDrn55ptLkj766CNJ0rrrrusY+8MPP8w4NkkHz/V3165dJUkrV66UJO24446SpJdeeklS4TpsJSDGPhAYNiCg0lGRDFsKymElxrKJnmuZ/s4775Qk7bLLLpKkefPm6YYbbpAk/e1vf5Mk/fOf/yz0sqkRx7CRvzP+3WSTTbRgwQJJ3mI8YMAASdLixYslSe+8844kqWfPnpKkXr16SfL3oU+fPo7lN9tsM0nSlClTMsYEe8PsHG+tys3NzVk6sr2/a9asqWiG7dWrlz744IOcxwSGDQjoACiKYa2Fr5JQDMPms/5anXrw4MGSpDFjxkiSNt54Y22//faSPCu1JqJzREcHSAX4WOvq6tz80GV5vuutt54kb1EGkydPliT16NFDknT11Ve7Yz/77DNJ0p577ilJevbZZyVJjzzySMZ1o4wqeXZvaGhwn/33f/+3JOn555/POLYcUlJaRP3J1peMBGB9vNgSkCKKQRLDVpRIbDeKrbbaSpIX2dKgNR62fXAEHoBly5a1iasHY9HKlSuzXlj7ooKqqqqsl4eNZ/3115ck/fznP5ckjRo1SpJ04IEHSpKGDx8uqWVjwgA1f/58Sf6e7L777pKkf/zjH5K8UYrxIHZHr22DLnje3bt3lyQtWbKk7M9wr732kiT96U9/kiQdd9xxkqRvf/vbkqSJEye6jWPkyJGSpHHjxknyz33dddeVJH3ve99jnJL8hlNs8EsUQSQOCKggtGuGZcdCjETswkjC7oxo1qNHD/3rX/+SlLyLFcOw+dxIjA+x94UXXsgYV1sjOseGhoZmyYu7dg5ILVK2irPRRhtJkl588UVJLSwjSaeeeqokacSIEZI8K0lSfX19xjmssQlXzc477yxJevXVVyV59llvvfWyXEMRySFrfl8eV/A6ZVxbbrmlu64kt37efvvtjONffPFFzZw5U5Kc2+n000/POObzzz+X5JkVbL311ow79fgCwwYEdADkDP5vK7D74pB///33Jfmd/H/+538k+V1wjz32kOQZjF196tSp2m+//co+PstK7Pi77bZbxt/syug0SUaJXIgLyi8FNrje6qs1NTXuOxiWY/j79ddflySNHTtWkvS///u/kuJtB5zXBmNgb+BfkkHefPNNSS16vpQZCspvOVc5wTNlLoBniXSxaNEiSdIGG2zg5n/44YdL8vPHzcV9tHMtJwLDBgRUENpch+3fv78k6eWXX5bUwkJYDJH9v/a1r0mScy5j2XzsscckSWeffbYk6etf/7okFRT2Vw795+6775YkHXrooZK8Hsi9ZFywRyE44IADJEm///3vC/4tiAv+zxUSCNvALjvttJMk6Xe/+50kb0vg++9+97uS/PyirMh5kXos0954440Z12Ad3HfffZKkp59+2umqaeb35RyKXqf2fjz++OOSvHuKNbhgwQKdf/75kvy8+/XrJ0m66qqrJEn777+/JGm77baT5G0ZxUh9QYcNCOgAaDMdlh2M3ZidbdCgQZo2bZqklrQjSfr73/8uSfrOd74jyeuqWOnmzJkjKdvfWQ6kCQrp27dvxrHgkEMOkVQcs3I/8oWsRWF1ZJvKJnldzTJJ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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3250, D: 1.269, G:0.8522\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3500, D: 1.349, G:0.7761\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3750, D: 1.352, G:0.7272\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# Make the discriminator\n", "D = discriminator().type(dtype)\n", "\n", "# Make the generator\n", "G = generator().type(dtype)\n", "\n", "# Use the function you wrote earlier to get optimizers for the Discriminator and the Generator\n", "D_solver = get_optimizer(D)\n", "G_solver = get_optimizer(G)\n", "# Run it!\n", "run_a_gan(D, G, D_solver, G_solver, discriminator_loss, generator_loss)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "Well that wasn't so hard, was it? In the iterations in the low 100s you should see black backgrounds, fuzzy shapes as you approach iteration 1000, and decent shapes, about half of which will be sharp and clearly recognizable as we pass 3000." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Least Squares GAN\n", "We'll now look at [Least Squares GAN](https://arxiv.org/abs/1611.04076), a newer, more stable alernative to the original GAN loss function. For this part, all we have to do is change the loss function and retrain the model. We'll implement equation (9) in the paper, with the generator loss:\n", "$$\\ell_G = \\frac{1}{2}\\mathbb{E}_{z \\sim p(z)}\\left[\\left(D(G(z))-1\\right)^2\\right]$$\n", "and the discriminator loss:\n", "$$ \\ell_D = \\frac{1}{2}\\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\left(D(x)-1\\right)^2\\right] + \\frac{1}{2}\\mathbb{E}_{z \\sim p(z)}\\left[ \\left(D(G(z))\\right)^2\\right]$$\n", "\n", "\n", "**HINTS**: Instead of computing the expectation, we will be averaging over elements of the minibatch, so make sure to combine the loss by averaging instead of summing. When plugging in for $D(x)$ and $D(G(z))$ use the direct output from the discriminator (`scores_real` and `scores_fake`)." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "def ls_discriminator_loss(scores_real, scores_fake):\n", " \"\"\"\n", " Compute the Least-Squares GAN loss for the discriminator.\n", " \n", " Inputs:\n", " - scores_real: PyTorch Tensor of shape (N,) giving scores for the real data.\n", " - scores_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.\n", " \n", " Outputs:\n", " - loss: A PyTorch Tensor containing the loss.\n", " \"\"\"\n", " loss = None\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " loss = (scores_real - 1).pow(2).mean() + (scores_fake).pow(2).mean()\n", " loss /= 2\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " return loss\n", "\n", "def ls_generator_loss(scores_fake):\n", " \"\"\"\n", " Computes the Least-Squares GAN loss for the generator.\n", " \n", " Inputs:\n", " - scores_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.\n", " \n", " Outputs:\n", " - loss: A PyTorch Tensor containing the loss.\n", " \"\"\"\n", " loss = (scores_fake - 1).pow(2).mean()/2\n", " return loss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before running a GAN with our new loss function, let's check it:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Maximum error in d_loss: 1.53171e-08\n", "Maximum error in g_loss: 2.7837e-09\n" ] } ], "source": [ "def test_lsgan_loss(score_real, score_fake, d_loss_true, g_loss_true):\n", " score_real = torch.Tensor(score_real).type(dtype)\n", " score_fake = torch.Tensor(score_fake).type(dtype)\n", " d_loss = ls_discriminator_loss(score_real, score_fake).cpu().numpy()\n", " g_loss = ls_generator_loss(score_fake).cpu().numpy()\n", " print(\"Maximum error in d_loss: %g\"%rel_error(d_loss_true, d_loss))\n", " print(\"Maximum error in g_loss: %g\"%rel_error(g_loss_true, g_loss))\n", "\n", "test_lsgan_loss(answers['logits_real'], answers['logits_fake'],\n", " answers['d_loss_lsgan_true'], answers['g_loss_lsgan_true'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the following cell to train your model!" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter: 0, D: 0.4856, G:0.4893\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdZ7xV5bU2/EGxiwKCHTAUCYpEUVQ0FrDGfuzJI7ZYscYoUQNRI2rEbowFWzTG3iBYYsFgrCh2UexBj1JERYNYkPV+4PmPufaEvZ58e88+vzm+bNh7rTnvNsc1rmuM+56tarVaVFZZZS3DWv//3YDKKqvsP7fqga2sshZk1QNbWWUtyKoHtrLKWpBVD2xllbUga9voj9tuu20tImK77baLiIi5c+dGRETPnj0jIuLzzz+P9dZbLyIilltuuYiIOOWUUyIiYocddoiIiFVXXTUiIv77v/87IiLWX3/9iIiYMGFCRES0atUqPvnkk4iI6NevX0RE/v/DDz9scu0vvvgiIiJ++tOfRkTEyiuvHBERb731VkRErL766vHuu+9GRMRnn30WERE/+clPIiLiqaeeioiI888/v1V9H0888cRaRMQHH3wQERF77bVXRES88cYbERGx2mqrxZdffhkREcsvv3xEREyePDkiIl566aWIiDjqqKMiIuKaa66JiIif/exnTcbp/vvvz+9oz5w5c5qMz4MPPthkDLp27RoREfPmzYuIiI8//jjHwng88MADERGx/fbbR0TEY489FhER//jHP7KP+++/fy1iwThHRGy99dYREXHLLbdERMQmm2wSu+yyS0REvPjiixER8cQTT0REZL9XWmmliIho23bBcll66aUjIqJ3794RsWAuV1999YiI6NixY0REPPzwwxERsdFGG0VExAsvvBAREf3792/y+9tvvz0iIhZbbLHs9zLLLJPXjYg49thjIyLinnvuiYiIiy66qMkcHnHEEbWIiH//+9/1v44DDzwwIiJuu+226NGjR0QsmM+IiLvvvjvqx8WcTZ8+PSKKteXnn//85/jRj34UEZHtmzFjRkQU6/K7776LiIillloqIiLWWmutiIh4++23m4zNm2++GRtvvHFERDz33HMREbHffvtFRLGG/v73vzfpI6sQtrLKWpA1RFjevnPnzhFReB8eZI011kjU+cc//hERkZ6M99lqq60iIuIvf/lLRBSo8+STT0ZExLBhw2Lq1KkREflzww03jIgIOeJ77703IiJ23333iCjQ0+e7desWEQtQ6JtvvomIiGeffTYiIj0/D1423lG73LN168KX6dP1118fERHbbLNNRETsuOOOERFx3333RUTheZdddtmIiDjppJMiImLXXXdNb+tvxvaZZ55p0j7oteSSS0bEAnSOKFBu0003TbTi8T/66KOIWDAfZYMgAwYMaNIXY9ynT5/s61//+teIiFh88cUjIuKII46IiIhx48ZFRMS3334bEcWYjhw5MiIiRo8enRHCq6++GhFFVHbHHXc0+a5+v/fee02uBcnWWWedeOihh5p8R+RgfMsmEjB2xvjxxx9vcs+IIlJZZZVVIiIyQjQGxnbgwIERUaD8kUcemeMisvEZkcdZZ50VERGbb755RBTz47kxp9tuu21Gq1DX89BcH1mFsJVV1oKsIcLyKLwgvjF//vyIiLj22mvjkEMOafIdCIWjvPLKKxER0bdv34goEIWHmzBhQsbzEPPRRx+NiEg+6lozZ86MiFgIrf72t7/lPX784x9HRMF/+/TpExEFdy7brFmzIqLwdDfddFNEFJ7unXfeSc68wgorREThhSEAj6rdN954Y5N7r7jiitlfXPb999+PiII7Gx+RyaeffhoREccdd1xERFx33XURsYCLr7POOhFReG68+F//+tdC/cOr3P/CCy+MiML7f/jhh7HBBhs0+aw51E+RjUhH2/fYY4+IWBBdmRPc/KqrroqIiA4dOkREEZXpr7neddddIyLi73//e0QsQGTrwRgwPK9s06ZNi4iIc845JyIifv3rX0fEgmgkYkF0ssQSSzS55tNPPx0REfvvv39EFON+2GGHRUTEa6+9FhEFio4ZMya6dOkSEQXi4+nmDg9++eWX874Rkfc2nksssUTstNNOEVGg7uDBgyOieNaaswphK6usBVlDhOVpn3/++YiIOOCAAyKi8I5rrLFG8gdowoPhPdCYkkmt5Z1feeWVeOeddyIikn/6rGvxTFBwk002iYhC6YNwHTp0SFX166+/jogCMXk/KiXDwfEfaApFWrdunajYvn37iCjQl/onEtEnXHLttdeOiAUItOKKK0bEwrxnzJgxEVFwaeowFIVUvtetW7dEcvfBPam99Ybfm6fvv/8+IgrO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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 250, D: 0.1, G:0.2631\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 500, D: 0.225, G:0.6342\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2debhd093Hv+cOuZnEGEVoguANEVEpFTHPY6iQoOapSBV5y4sqqmoWNbSGiKE0CPXW9BKUGEpQQ6kIFUJpKTEkSCK55/3j5rPWPr+z9z77DPfenPus7/OcJ7ln2HutvfZe39/8y+XzeQUEBNQHGjp7AAEBAdkRHtiAgDpCeGADAuoI4YENCKgjhAc2IKCO0JT2YS6XK9uEvOOOO0qSpkyZUvA+1uhrrrlGknT00Ue7zz788ENJ0iqrrJLpHLlcTpJ0+eWXS5J+8pOfZB5fPp/PmWOVPcemprbLtnDhwtjP/+u//kuS9MYbb7j3/vKXv0iShg8fnukczHGjjTaSJL3wwgvu/VKW/egcK5lfqbEedNBBkqSbb77ZvRc35yy49NJLJUknnXRS5t/UYg2XdNg5gsCwAQF1hFzabt3Y2JiXpObmZknS/Pnzi77T0ND2zHMce7zGxkZJ0qJFiwpPvJhBot9fccUVJUkff/xx/GDNb3r16iVJ+uqrrxK/0717d0nSvHnzeD92d44bT2eAcYCWlhZJfvzR7zBWe42rZdhqkLTeSajkuteSYbm3v/3220oPURKlJLI4BIYNCOgCSGXYddZZJy9Jb775piS/e4K0XRTm5TdpOxjfbW1tzfR+NbA71+67756XpPvuu09SeQxh2dBey+jOmjQXyzC1YProHJGSqrmG7bEO1WBJ02HbQzoLDBsQ0AWQaiWGWQE77PPPPy9J2mWXXRL1Tb7LrtOtWzdJ0oIFCyQVsjXfYSd/9NFHJUnbbLNN7LGXXXZZSdJnn33WNonFTBbHimuuuaakZEsyzAo4BhbSmTNn6t///rek4p00q74eHSN6zG9+8xtJ0u233y7JW2btMdN2bz7bZJNNJEn/+Mc/ir6TxIrTpk0r+G0aKmHWoUOHSpJefvnl2M8rYaWll1667HG0J77zne9Ikj766KOqj5X1egSGDQioI6TqsOgGlh2julvS7/lO7969JUm77babJGmFFVaQJM2dO1eSdOONN+r++++XJP3nP/+RJF133XWS/O789ddfS5LWWGMNSX5ns6wU9VEus8wykqQvvvhCkrcWf/311zW3EsOsgwYNkiT17dtXknTMMcdIavMXIzW89tprkqTtt9++4Dqg45933nkFxzz55JMLzlVivSRJra2tNbUSM5bBgwdL8r7WqNfgpz/9qSQvOSQByz6/TbOcJkksHanDck1bWlr0zTffSPL3dNQ7EcXnn38uSVprrbUk+fu6HCTpsKkPbENDQ16S/ud//keSv5ncj2Oc+Ezwv//7vyVJt9xyiyTpX//6V8HnUbcLi/eHP/xBknTCCSdIkr788ktJ0ttvvy1JmjNnjiQvCl9//fWSpMmTJ0uS1l13XfcQJyFpscsxrDCHM888U5L0+OOPS5KmTp0qyYu/HHPEiBHuswsvvFCSDyD55JNPJEl33HGHJGn55ZeXJN16662S/MPx2GOPMf7EGyVujsxviy22kCQ98cQTJedXDezmDjbYYANJXlRGFD/ttNMk+Zt8vfXW09///vfUc3SG0amxsdGtOxuJdXOyUT/yyCOSpO9///uSPHkkqY9xCEangIAugEwiccrnRc572GbrrbeWVCzOEH6IeDFx4kQX6sZuyy5M0MDf/vY3SX6X3nTTTSVJEyZMkCSdddZZktp26VIO8FK7cxrTssNyDpgUcTvJrbPhhhs68X706NGSvCjM9UEy2GyzzSRJV155pSQfmohoP3/+/CL2ApEgi6pEYmvUK4V1111Xr7/+uiQfiADTrrzyypL8Ndp7770lST//+c8lSX369JHkr100QCQJtWBYVJRtt9020/cbGhrcPdGjRw9JXoqwRkjWgTDdP/3pT+UOLzBsQEBXQFkMa8MQe/bs6fSpTz/9VJK03HLLSZK22247SdKf//xnSdKsWbMkSR988IEkaaWVVpLUZkBix9ppp50kSddee60kaamllpLkdYB3331XknTTTTdJ8qGMe+yxhyRp2LBhzsQeF7a4eOyZdmfO+c033zhdhWP17NmzYK7o2uhhGMnQV/fdd19tuOGGkrzBYt1115Xk9R708X333VeSNGPGDElep3366acltV036yqD8SM7fUUMe/zxx0vyhiPOPXv2bEleR995550lSRdccIEk6bjjjnPSB4a3F198UZJnTFibRA/WjN8988wz7vpwvZOknaxr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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 750, D: 0.1186, G:0.2954\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2debBUxfXHPw9kERRBRJ4sPwhojERwiQuoKO6i4ooRTBmNu0Y0JipJTEAlhStRMBHURK1yC65RjBoVBdGoUYiKRgwKCBEFNaAoss/vj+f39p1+M/NmuXdm7nA+VRT1Zrvd03P72+f06XPqUqkUhmEkg2aVboBhGPljN6xhJAi7YQ0jQdgNaxgJwm5Yw0gQm+R6sq6uruZcyKlUqi78d633sdb7BxtHH4UprGEkCLthDSNB2A1rGAnCbljDSBB2wxpGgqiKG3bLLbdkyy23rHQzDKPqqYob1jCM/KjLdVpnY9jfirOPzZs3B2D9+vVxXSIjtg8bHdtssw0AH3/8cdbX1NXVqV1pj5cy/tn2Yct+w7Zu3RqAVatWAQ2dKucPOo7BbtGiBeAGplWrVgB88803AAwePJgnn3wy43s1qPp/zZo1pTYn9hvW/4HW1dU1+rHGSRxjqO+/W7duAHz00UcArFu3DoDPPvuMrbbaCoDevXsDcMoppwAwdOhQAK699loA7rzzzlKbY4EThlETpFKprP+AVNT/WrRokWrRokVKjBw5Mniurq4u9e1smQJSrVu3TrVu3TrS68fZx+bNm6eaN28e9FF/19fXB6/p2rVrqmvXrkHfLrvsstRll10WWx/jGEO/vz179sz6Gn9Mq30MNXZ+u0ePHh08tn79+tT69etTM2bMSM2YMSO1YcOG1IYNG1KbbLJJapNNNmn0Xj1eSh/1zxTWMBJE7DasbDLZdRs2bGi6Ud/aSHqvbEQ9Xgpx2D8//elPAfjjH/8IOLvnd7/7HQBXX301kydPBmDIkCEANGvWMFeqb/369QNg5syZALRs2RIozqaN2oZ96KGHADj++OP1+WnPf/XVV2y22WZpj2msNt10UwA6d+4MwIIFC0ptTixj2LZtWwC+/vprAObOnQvALrvsAjT0UX345JNPdN20z7jwwgsBGD9+fKnNMRvWMGqBkhU27CnMxZdffgnA5ptvnuk6Gd+zxx57ADBr1iwAli1bBhDM5sUobjGzc9euXQHnOWyKK6+8EoDLL78cgDfeeCNQ0Gx07NgRcN/TlClTAHj00UcBmDhxYl7XhsIV9uabbwbgvPPOy/i8vucHHngAcEobZpNNGk5qZvP4ayWh/9977z0A/u///k9tbqqZAcWMoVY0+azwisXfATn66KMBp7g9e/bM+7NMYQ2jBojNhtXn7rDDDgC8++67TTfG29/zZyz/dUW2K3L7x29P+/btAdhiiy0AmD9/fvCcVhgrVqxIe++YMWMAeOeddwD4y1/+AsD1118PwMUXX5x3e0q1YdUmfe//+9//AKivr2/yvX6wgBR17dq1Ga8hG1d71vlQiQPs4fvkwQcfBNz+a1O/xyOPPBKAxx9/vJDrmcIaRtKJ3Uuc7fPDs5K8qrKD8nlPCe0penbOZgddcMEFAJx++ukA7LTTTo1e79v6+vuEE04A4Ne//jUAu+66a9pnb7vttgC8//77+TazaIX1v99p06YBsO+++6Y9LvXUeH17zbTPyHcMsylwLiqVIiZbH/V3Ns9+MSGKprCGUQOULZY4X29ypvcI7WUOGzaslHaUPDsXM2Nqn099WrlyJeA8ifICyyOt2Xr16tWFNq9kG/aFF14A4IADDgDcimL48OEA3HPPPYW0Je3vDh06ANCuXTsAFi5cWGjzKqKw7dq14+WXXwacX0YrKBGlJ9oU1jBqgLLbsLkUVofYP//884zPawYr5WRIHLPz888/D8BBBx0E5FbecePGAXDuuecCzhP73e9+F2iIqAk/XgxRRTr16dMHcJ7rzz77DIBOnTo1+V7ZpGE7F2DgwIEAvPjii8U2qyIK26FDh8CP4CdbiOJ36WMKaxg1QOwKq5l25513BtxsPXr0aACuuOKKRu+pVi+xUFSSvxJQ+/S/bJkWLVoEdq+Us3v37gDMmzcPcHuc2VYXhVCqwsrrrXOdU6dOBVwctGJpm2hDxsdly8uGL4ZKKOySJUsCu1t76drdiCNRQdkPsPufe/bZZwNw6623pj0fvgkVTOAHkuvw96WXXgrA22+/XWyzInU66Yc9ffp0wIVQCi2dli1bFrxHAeQnnXQSQODI0BJRh6S1/CyGqJbE/hhqC0Y/1Dlz5gDwve99L3jNoEGDAGcmiMMOOwyAww8/HHCB8kW2q+w37KRJkzjiiCMA18cPPvggtuvZktgwaoDYl8RyOmhprE1lXVfH7vKhWpbEPlJPhVJKgdTXtWvXBo9p9aCwNh3J0/eTT/hfU5QaOOH/Js4880zAKamCPeSUWrp0afAeHXhQupRs1yiFSocmZuuDbesYhpFG5AorxdSG//LlywE368iuC1/3v//9L+C2C3QUTUewZNdF7ZCB4vroh9MNHjwYcIoqJ42cEOvWrQsSd+mAtI4K6nto06YN4JxSvuOqEEq1YU8++WQA7rrrLsA5CseOHQu4wAm1fe3atRx88MEAXHPNNYBzJj7xxBMATJgwASjNdhVxKqy/ygj/36NHD8D9XvXcbrvtBsDrr78eVTNMYQ2jFihbaKKURW59edh69eqV1XbyN6S1FbJo0aKi2xHn7CyFlVqGD9xLlbXCeOSRRwDYe++90z4jii2CqFPECB2u1/bGjjvuCMDs2bPzHkN/BVYMcY6h2umnjAHnoyil7QW0wxTWMJJOzgrsUfLWW2+l/b377rsDDYejs6m87Dc97wdbVwtql8IK5RG+++67gQa7TfuuCn6XHaSQRO3lKtN8NdKlS5e0v7UfXldXlzUzvux8fUfVOoZ+CKUfGrp48eImFfbhhx8G4LjjjouhhQ1U57dnGEZGyqawAwYMSPtbaUdyMWPGDAD22WcfoDyJtApBdptsOnm5NRNrj3XNmjXBQfTZs2cD7ljdWWedBbgUOr4NW0191goiE1pV+OiwgyKcqg19v7fccgvgVkDyRyh1TY8ePXj22WcBF+nk27mKxIu1vbFfwTCMyIhMYffcc08AXn311YLe98UXX2T1MCrN6U033QRURmXCxbrUx9deey2tPVIetV8ecB1Gnz59Ovvttx/gbKVRo0YBzpZXoL3fx3L2uan0Ltk45JBDAg++f6zuxBNPBNxhj0qw5ZZbBiu6kSNHAnDvvfcCbsdBHn0lTddKRzEBq1atamTnSlm1A1AO+9wU1jASROz7sP6srVlKs9Ell1wSlLTw8ct8CD/NZCHku4dXiNoonYuQIiv657nnngs8i3379gUI7CG9V0f2/O8pm22Yi7j2YbNRV1cXrAT8hHpaffgJ5KMqRfLt9Uvuo6K6FC990UUXAXD77bcDDWlh/L5pdaQ99Sg9/LYPaxg1QOxeYl+hNEtdddVVADz99NON3tOUuhWjrIVSiB2XTSX69+8PNHiAv/jiCwDefPNNwNlISo2a7XuqZqSS4fPL/goqWz+iKFwdBbI/tcqTTasD9vLut2/fPji1JM+x+q9yI+XAFNYwEkTsNmy22NhM15WynnrqqUA0ped94rB/spWbkF03Z86coCSlThz5kV9RUi4bVmO4fv36oK/ag+7WrRtQXBrTPK4b+RjKe6zTRvrdaoXw9ttv84Mf/ABwRdHySUZXLGVPEaN0L3I2KLhAAeThFDHZMisWu82QiygH26+Z4k9Oyn1UX18fbLJr+bhkyZJiL9skUd2wuukURukHcYTHUI9pzPTaUo4JZiPKMZRjUE7A0DWAePI15YM5nQyjBijb8boc14hUQZuiEulFKtnHOPsn9ezatWugwuWgUrV1yokprGHUABVX2HKzsc3Otd4/2Dj6KExhDSNBVMUNW1dXF0n6S8OodarihjUMIz9y2rCGYVQXprCGkSByBv9vDN43v4/VlJKlWMxLnHzMS2wYNUDZkrAlhSQrazURRxy4YQprGIkiEQpbSjqROIhDPVTeo5TK5NWEKWs8mMIaRoKoihu2ZcuWjRKZhVmzZk3VqCs0qEfUCrJy5crEqmvnzp0r3YSNhqq4YQ3DyA87rRNjH5WlYKuttgoSVSuhtcpOqmSjCkuJUjId2D5s8sm2Dxu700k5hZUbRz9QZQ+88cYb+dnPfhZ3M2Jl5syZAOy6664AQSU33XSpVIqJEycCsMsuuwSPhf9X5j0dBC93SpJcbL311gAsXbo04/Nt27ZNq6OaRJpyJLZu3bpRRTufcgTd2JLYMBJE7AqrjPeaff7zn/8AruZKeDbyj9j17t0bgPfffz/uZhaFcvAqm96sWbMAt9xVkrZUKsX9998PwIIFC9I+Q33+9NNPATjmmGMA+Otf/wpEU7G8VKSsqmWrMRRJV1dITygX/luEv3//Nap4J7MnTkxhDSNBxO50ki2mbRs/E/yaNWsabeloBmvfvj3g6sMqnWgpxOGwyDY7v/jiiwAMHDiQ4cOHA65qml6rPL5SWKWF7dmzJ9BYkfNsT6ROp3/84x8A7LXXXvp8wK2aUqlU0J+tttoKcP3JRrXV1vFzSz/66KMAHHvssUDDSlDBLapO6NfS8eshlRJgY8H/hlEDlKywqhmzxRZbZPsMwGW6l5c402uyPa42So1kK+68885AYbN0MbPzY489BsBRRx2V93VKRd+TvrdCao8WqrD59k9e7zlz5gDQp08fAC6//HIuu+yynO9VUnIpmBKpy6Ou+rL5UMwYFuoL8D2+4Rqz2VDlu/feew9wtZKXL18ONNTRzRdTWMOoASK3YbWOVw2Z6dOnA85jmivZmq+o+luzsmZJzX7Zgg5yUYlN9/B3rFWC9vSaSj6nGT4uhW3WrFmjfcNTTjkFgO985zuAq5UqD7Zs2d122y3t8W+vl7HdUlTt6aqavVSokCR8lR5DlVtR7Vu1XWU/5DXWzoC86CrXkuf1TGENI+mUtA8bLkFx4IEHAg3VxgGuvfZagEbV1efPnw9Ar169gsey1RD1Cyz5s7BshbjRjNm1a1cgf0X/29/+BqR/T4Xup0rF4qJly5aB6ssjet999wHO0ytF0diqpqpYt25dI0/oZ599BsDcuXMBp6xhzzLA2rVrI+xN8aiPqgf7xhtvAOlFvdRmf99Z/pvDDz8ccCsSEWUknymsYSSIyGxYqZ9skr333htw6jls2DDAzd754LdNM7v2KIuJgCqn/aNZe/Xq1YEnWworVctGJYP/NWbyR/gUsr8o77FWWvpMjZ3s5EKIYgyLifuVDar3yLeisZo2bRrQsO8OjfdlC8FsWMOoAWKLdJLNIu+g7CE9nglFv+ggt18FWzPXK6+8Umyzyqqwip659957GTRoEOCit/xooSgpVmF95Zw3bx7gVHCHHXYA3D5sLhRPrSip7bffHnArBv0OmtrbzEQcYyj/hKqr50KnskaNGgXA6NGjAfdbV9HyUhISmMIaRg0QucJOmDABgEsvvRSAs88+G4CFCxcCztO4YsUKILMN4XuHRadOnQDngSyGKGZnP+5UyFOuyCHZPCtXrgzsb9/Dmu0ETCmUasPqN6EzvGPHjgVcf7XHngt/P1bvVXRUMTHSofaVPIbyvr/++ut5vT78W/TvGUWj7bTTThmfL4ZsChv5DesPlGjXrh3gblQFDoSdL/ox+6GGWq7Mnj0bgI4dOxbarIAoBjvfwHxtB4H7wTZ1CLpfv36A+xEUE0Be6g372muvAW7pF97aCJOrbQqMv+GGGwA444wzABfKKnNHKDRx0aJFTbYvijHUb03t0CSc64ic+hueiL9tT9r/pTgMhS2JDaMGKEhhc82o2WaVCy+8EICjjz4agN133x2A/v37A/D8888H7u++ffsCLk1Khvbk6ktelMPp5B8dmz17dnA0S4fyfaQshQTBZ6NYhVXgxJQpUwDn7NNWlNp2ySWXpP2//fbbB6sNvVaf9fDDD6ddQ78TrcAUdCDlzYc4xrCplcy6deuC70OrQqn073//ewCmTp0KuOQDpWAKaxg1QOQ2rGbnIUOGAO5okQ4BSGl13TVr1gTqo9lW9p5sBB0E/9WvfgW4BG6yhwshitnZV1AdSpB6qN3qx3333cdpp52W8bNOOOEEAB566CHAhbUNHjwYgIMOOggobKO/UIWVUihMUEqix7VqkooqrFRj+PjjjwfjLeR38JPKKUzv7rvvBtzvoxCiGEM/qEHbUGqnFF99/OqrrwK7XGOgcdZ79JlxOp1MYQ0jQZQtL7E2k+Ut1uHzWbNmBeqh2VZK6weKjxkzBoDf/va3RbcjSvvHPyqndirNS3gFkK/9/cknnwDOy1pqepFS+ucf+vaPPap/m222WfCYtt60TSVPuZ8iqJRUoHH6IfyAFqlnXV1doMLqt/rWVDqcItthCmsYSads1etkq4nw8SUdgJb6Cn8WjsJLHCX19fVA46AHHWzOFX4oe0dqrBA92Y3VUP3N3w9XOhchxVm7dm0wNvvvvz/gVkk33XQTAOeffz5QfWPoo1Wevv9bb70VgEmTJgX+BI23v5shL7ECaOLAFNYwEkTZFPbvf/971udk9/izrx8NJUWTnefbkOVCtp0OqAslMdPKQB7xTEyaNAlonDbkmmuuAeAXv/gF0JDgLPx/OdF4nH766YDbJ5c3XPuPI0aMCBRJqqv3KhQ1m5dchwLKlYwgG0qgpii6oUOHAnDEEUcAcM4557DvvvsC8NJLLwEuSYO+n1zjHRWmsIaRIEryEofTZmhvTkeysuHvJ7Zs2TKwlRTH6R9Bk5eyS5cuaa8rhkI9jKtWrQqUXO1R4LjSrcr+lPIqLlV93W677RrZubJhtVerv2Xbq2hWMRTiJQ4XedJKpymvp1Y4WvHU19cHjwn5LJQS6I477gBcrHQpNnqhYxhONKc9f33vvudb/ysNjF7/4YcfBgXLhMZMn62VRxRpb8xLbBg1QFEKG4XtGLZXNUNlS+np78cqCujJJ58s+Lr5zs46JnjBBRfkbDu42VjKOnnyZMDZNO3atQtWEToE/u6776Z9hmKJZSfpIHUxs3U+Cht1aURfqbQq0v6r/51VW6mO0GfpGgD06NEDaFBY3+uv43S/+c1vAGf3RoEprGHUAEV5iaPwysqbeOqppwaPaeZqqqxCMcpaKJmUVWim1UFuxcf++9//BlwKG6njqlWrAjtXyqrE6irwddZZZwEuzUjc6T+jLjp82223AQ1KBG4MdSrLpxhlLQf+ilMrog8//DDw4CvtzYABA4DGMQZxYgprGAmibLHEPuFT+oovlRdOe2HvvPNOHNeN3P5RvKm8hPvttx/g0l6CUxqpb5wRP1GXm8zGnXfeCTREMSm6q1BKzajx7WeU3Mds57kVA3/IIYcE6WTkwym2z/lQthQxwq974w9M2EmhL0lLYrnL5ZjwcyeVQpSDrRC0F154AXCDHa54BsVlBiyFqG5YVZafOXMm4EJH9SP2HU3ggkkUcBAHUY7hoYceCsDTTz8NNM7Uqfxhqnsbfk0pKWCawpxOhlEDVGxJrFlqxx13DA6kl4NKVD4rN+VaEovOnTsHzrJysLGNYRhTWMNIEBVT2Eqxsc3Otd4/2Dj6KExhDSNB2A1rGAnCbljDSBA5bVjDMKoLU1jDSBA5g/83Bu9brffR71+mKJ1CwwP9sMpSVmnVEppYbZiX2DBqgLIlYTOqg0zxr4UqZD6xtE3FUUd9gH5jwRTWMBKERTrVeB9L6Z9vq/rlK3K9x/9dFVNWMhsb2xiGMYU1jARhClvjfVT/ivHG5summ24apHwp9IyoeYkzYwprGDWAeYmNgpEqKqXP0qVLGxU1VsaGpvCVNZyc3mhMxW/Y5cuXB5n+/QrWcabgKCfV8CNswvTJ+Zpjjz0WgNdeey3tdcqQ+OyzzwaV3fK9UXMR5/I96diS2DASRMWdTqlUKphRNTtffPHFAFxxxRWA2xKI6Hplc1hoxdCsWbOseXgLXULmQ7iPzZo1S337WMmfq/zLt99+OwArV64EGurPKDGbX6WhT58+QGEZMJtS2Eo4ncK/Uz/5XPfu3QFXvSGi65nTyTCSTuwKu8ceewDwz3/+E3Czk6oHdO/enYULFwKuNk25cvZ+e62S+6hqdspbqz6qQvddd90V1HtVhXWF96kCu+qT6nsqJXQv6hQxqkqucEP5FlTz9cEHHwxySQ8fPhyAq666Ku0z/HpMGms/hW0+9n45FPYnP/kJAJdeeinQUAFAbVVfyvk7FaawhpEgKm7DjhgxgptuuknXA/K3t5TcWcme86GY2XnEiBEAQTuz4WeEV62dvn37BsoqdVIf9Z599tkHgG7dugGuQnvPnj0BGtVfzUWhCjt69GjA+QyyHZ/r2rUrAI899hgAJ510EgCHHXYY48ePz/jZ+iz1XyuGW2+9FXC1aEeOHBm8p6nVRSVs2NNPP50///nPgCUSNwwjTyqusOHry5OaraZoRNeLbHb+0Y9+BLjSFaNGjQJc3VDNxOF6t23btgVcTVn11a/Up/cW42UtRGE333xzVqxYATiPtcpXqK0DBw4EYOrUqYCrvN6hQwcArrzyyuC9GjPZvdpjVz+uvvpqwNm/SkAe3oOvVi9xNsrxOxWmsIaRIMqmsLnsEn9fy/87ysiXKGZntUcKJIUSU6ZMAeCoo44KHvOry6svqgMb3rMNs9lmmwGFVUorRGG7dOnCNttsA8DPf/5zwNWqlZ2p+qdqgxRW/V+2bFng/ZVNPnfuXABmzJgBwMEHHwy4iub6Du+//34Ajj/++KL6l08fo6Kp32nE1zKFNYykU7ZY4mwev9atW3PdddcBzusW5/5WFCjoXbG0+US8+Mqp90hh9fdhhx0GuP3YuEtVLlmyhMWLFwNw8sknA04dVX38xz/+MeDGUG1dtmxZ8DnybovtttsOcB5of2Uhj7SvrM2aNavKtDEXXXQRQ4YMAeJV1qYwhTWMBFHx0zqtWrUK9lM1C8tbLPstWxxupZCyKlpHMbXapzvjjDOyvldx0dp/lO0qpZVXtVxFoMN7ifr+pY5S3BtuuAFo2E8G+Oijjxp9jvbC1Z/BgwcDsP/++wMuCmzChAmA23f17cFqVFeA8ePHN9p3rYTSmsIaRoKo+D7sqlWrGsXXih133BGAt99+O7LrReFhVHz0G2+8ATibdsGCBUB+J2+kylJpKa48tqVE0RQa6eSrnLzeOuM6Z84cwCnve++9l/a6TLRp0wZw+82vvPIK4FT7gw8+SLtmmGqMdAq3sxyKms1LXPEbtk+fPsHg/utf/wLcQMVxgDnKbR39GDXR6OZT++VAeuqpp4L33nLLLQCceeaZaZ/Zq1cvwN2opRzVKvaG1Y1y4403AgROFjmUNLFqXBTw//nnnzf6zB/+8IeA2wK67bbbAGdOaGLSNXv37g00TA7+QQF/QqnEDbt69eogyEXfRybTICpsW8cwaoCKK2w+S43vf//7QGHheTmuV/TsnG2pphlXTpnZs2cDbpn7zTffBI6zsWPHAm5bwyeK5VYuhZVTyD+EAO6YoL5nKZxWPkOHDgVgzJgxgAvN3HbbbYPvRstnOZ2eeOKJtLZJpYTUNNPyOtv3vTEviU1hDSNBVExhpTjjxo0L1EYzqhwy2uqQ7RQFUczOUlQdUNexOx07e+aZZ3QtoEHNrr32WgCGDRsGwHHHHQc49dLRNR2jK2V7o1Ab1rcZZWfKrn733XcBmDVrFuAOqcuGHzNmTHBgXeqjLTkdjNA21dNPPw3AxIkTARe6mEnBqiH4X204//zzuf7669Oek8/CP+gQ0XVNYQ0j6ZRNYbXVIRtKG+0dO3ZsZBNIUaWwURLn7KxVQ6tWrQB47rnnABg0aFCgoPPnzweyHyGM4qBDsZn/5e2Wunfq1AlwY6XxkLIopHT48OFsvfXWgDty98ILLwDOrtfzgwYNAuCBBx5Iu7YfQJJv/8J9jIJsAf4AZ599NuAORcSJKaxh1ABlU9iPP/4YaLz/lkql6Ny5M+C8qn6YmiqeRZHuNM7Z+ZprrgFc2J0SrK1YsaJRoIT6OGDAAKAhuBycjVsKudKc5qO0eo1WCmLatGkA9O/fH0hPpOZXA1BwhcZOCit7WauRfBQ/Q0hgbGP40EMPAY0PJXz99ddB2/10N6F2qH0lt8MU1jBqgLJ7iWW7yVZJpVLBgW/NajrUfMwxxwAuWqaQRGTZKKeHMTzjyluqqC6ph5RHkT4K4SuFfLzE+aiBxmqvvfYCXFI5HWSXJ3jp0qXBikmpYN566y0AZs6cCbi0OUrnOm/ePMCtLHTAoND+fduX2MYwvBes70pj6KdojRJTWMOoASJT2HwTX99xxx2AS9Q8efJkTjzxxLTXyI5TgnHt/2mfsBRKmZ39BGrZ8NOvfvTRR4GXeNy4cQCccsopAOyyyy6As9+j7mNT/evdu3cQiK+jcLJVs9m98n4fcMABQIMSyyaVXatV0rbbbgsQ+Cm0inr++efT2pFL8f3D7xs2bIhdYf3UPOHkcOXAFNYwaoCKRTqFvYXyAsqTLJtV+OlVSiEO+yebOqi0BbgTLToJc9555wEEJTz+8Ic/pL03XzXPRD77sMUcXfQLd4VXVVpZ+UcNZatrf1YrCK1CFC0Wam9VlOrIcl3ARac9/PDDANx8881AtEkHTGENowaomMLK4/j5558HZSpC1wWcQsU5c8XZR3lEFy1a1ChNqfpYjJe0KaIuhpUNeUtbtWoVJI1TGlPttyviSYoeamPR1y3nGCpOuEOHDln3XePAFNYwaoCKKWw4kbaigBTJlLRyk9qv9JPFaUb+5JNPguwEe+65Z8bXREmuSKdiyBZxJDt1/PjxwV669pVfffXVjO/xKSZuvBKnddasWRO01U9wH9N1qytFTLhurDqerc5MlEQ52P5yVkt45esN5/F96aWXAOjXrx/gwhbjoNglse+Y6tKlC+CcgX6AfvhAh7Zt/vSnPwFw7LHHAu5m9yezfCaQbM68ct6w5ahUlwlbEhtGDVDxFDHlphJbAuEKceUgaqeTH7ig/6W422+/faP0PVFTrf8AAAeESURBVFEGwvtUalunnJjCGkYNYApb432Mo3+lqGdT782nts7GNoZhTGENI0FUvLaOkTxKDHrI+Xy11tapFkxhDSNB5LRhDcOoLkxhDSNB5LRhNwbvW633sdb7BxtHH4UprGEkCLthDSNB2A1rGAnCbljDSBB2wxpGgqiKG3b//fcPUmwahpGdqrhhDcPIDzutU+N9rPX+wcbRR1F2hW3WrFmkeYYNoxyEK/n16NEjyA4JDdUrJk+e3OjxOLA7xzASRMWzJoYzz/mHm/1M8xFdt2zLKWW3X716daJTxDTF+vXrg2Rl/rg+9thjABx11FGRXa8SS+IuXbqwePFiXR9wlQaVCTPbyrGYA/9VsyQ2DKN4Yj/ArozwSmuaIWVlo/doRlK+4mz5YKvlaODs2bMB6Nu3L1BYCs927doBsPvuuwMwderUOJoYKcrir/Fp3rw5TzzxRMbXRqms5UQ1jVQTaPHixY0q7g0YMCDtb78yo4jyd2oKaxgJomQbNpMtmgkl2VYVN+86Gd+jmqlKQq3E1mK77bYD4P3332+qmeH2Fmz/yP5sKvn3okWLAOjWrVuj55r6fvS87N4lS5YAxVXuK7cNm0/FuSiphA0broGbDQX/SIn1e1AV+mOOOSbv65kNaxg1QGxeYpWrkA1QTGkG7X35pTtKqWkS5eysdn7xxReAqw2Ui3w94VH1sRzq08RvKI7rlV1hw3385ptvAFdtXn3s3r074GreRlmhT5jCGkaCiH0fNtvnh2de3w7O5z0ltCey2XnChAkAjBgxIuPz1dDHclcn9/tXKwr77XV1vYx/P/LII4ArBFbitUxhDSPpxL4Pm8+M6z+Wo8xg1s8oJ5MnTwbgxBNPBOCCCy4AYN68eQD06tWr0Xvy7WPHjh2BxiUrq5n6+nqGDBkCVM8YxUFTv+X77rsv9jaYwhpGgii7DZtr5h06dCgADzzwQMbnFa9aiupEaf9oX/bLL79Mezwfdcn2vasw8tKlS4ttVkVtWJ9asmEVS7zNNtukPb7zzjsD8Oabb0Z2LbNhDaMGiF1hP/74YwD69esHuOilSZMmAXDOOec0ek+1e4l32203AGbNmgW4fTntw65atSqfdmR8PIle4nBfymG7VmofVv0888wzAbj99tsBp7hS4Iiul/GLjO2G9T930KBBAEyfPj3t+UxbHz4y5k877TQgvxsiR7siD5wQCoJYv349AGvXrgXc4QWAX/7ylwBcddVVae/V1lDr1q0BuP7664ttVkWO1ymE8qyzzgLgtttui+16lbhhly1bRvv27dMei3NysiWxYdQAsS+JNfNKdcaOHQvAyJEjAedIygd/RpMaFaK4cczOWu4/9dRTAHTq1Alwx9DmzJkTvFYOKh2r87ElcV7Xq2ho4g477ACkj2sM1zOFNYykE7nCyl6T/aagdilpPofPlcjqww8/BJxKR3GEK4rZ+eCDDwbgmWeeAdxRONmd1113na4VvOe8884DYMyYMQCMGzcOcCuOiy66CIAbb7yx0OY0olwKG+6fVlCPPvooAMcffzwAo0aNAuDKK6+M8rplU9hMv7kXX3wRgIEDBwIwZcoUgCB4JKLrmsIaRtIpWxI2XcdXYIA2bdoALuVI6PoZ/47y2FKUfdRqQt7iAw88EIBnn302a9vj7mMcY5ipjeeeey7gtuviJM4xVJ8y+UeUdG2vvfZKe20cmMIaRg1QdoXV7KzwwmbNmmWdqXR8TbOcPMsltiO22TnT6kGov/mmiimFcims/BLhw/dJ9xLncwzS32+PA1NYw6gBqqK2TrY26KjZBx98kPZ3ruB/BeRnS9xdqcBxzcZ+UrWJEycCMGzYMMAlqyuFuL3E9fX1gEsqNmnSpLIeq4tjDFu2bAm4hH9aJalfgwYN4qWXXtL1ABdWG4fdbgprGDVAZAqrxMtt27bN+bqXX34ZcEmYU6lUVntBkUILFixIu0YpVEJh99tvv0Yx1GL58uUAHHnkkQDBLF4KcSusVEiqFB7DclDKGPbs2ROAhQsXAm61pu9fvzUlhw/vYFSyj8IU1jASROw2rJ+Ee+7cuYBTmu7duwd7Xj79+/cH4NVXX017XMnIZdMWQqUTePnIVpJaiVIKgVXyALtipOXZlyo1lYS7wGtFPoZKVXvooYcCLpGAym/suuuuzJ8/H3B+CK0m1dc4i7YJU1jDSBAV8xKHlcX3+saZKrOcCqt2t2jRImsy9Lj7WI4420ylOsp5VjSKPioqTdFM8peE+6jCbipcZudhDcPISexpTrX/6J97lY0WVlfNWLLnkp4qM9N+sfqkgllJ7yM0+CmmTZsGuMwiSeOee+4B3B6zPy6ffvppsLOhFEGVILYb1l/qZdv2qaurC4z1pOW01Y9TP9ZcAf56LGl9zEUt9OGuu+4C3I0qco1TIdUSo8aWxIaRIKoiNLGcVGJbp02bNo2ODsZJJbZ1ykmltubKiTmdDKMGsBu2DJRTXY3axm5Yw0gQVXHDNm/evKB0p4axsVIVN6xhGPmR00tsGEZ1YQprGAnCbljDSBB2wxpGgrAb1jAShN2whpEg7IY1jATx/1ObvoBMLo7VAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1000, D: 0.1589, G:0.1993\n" ] }, { "data": { "image/png": "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1CxYRIHva6yxRljFe0TZh2qTlq4Uhrhw4UJvU7u21emzOomiFOdSEOZ0MowaoOIKGzemsMknjj4sxDlYrAOxmG2KprCGUQNEnvnfMJJIgZvMM17nU9wwTrEzhTWMBJHThjUMo7owhTWMBJHThjUPYzIp1kvshpPms82K8Y6WEoqZr7xlrQ/TMYU1jARhXuJlhKA1wHR1DVLaoJQo2a7jvhekrG6qHEW71dXVxX4EZZIwhTWMBGEKGyKKtVWsaTUhZXVT9KSrWTnrh0Hfzae8urZ7VGch114WMYU1jARhChsi1aisLlLWdHs1KPlAkLfYfb++vj5QhfNdw/1cLjUNI0Fd0rFfwDAShCnsMk4uGzbIO9yhQwfAT4bX1NTU7LNBSdiUXkXvaw9peqJ1t7xKKGs5B8BFiW2vq/E25mtfIcsoQQ+j/l28eLH3GZ0gd+CBBwJw9913A34eZuXq1bk0Qtdq1apV1rzH6SxrfZiOTYkNI0FU1ZRYeV11hmiY57FUG1999RUA7du3r2g90tU1yKmkf3U6m05rO+KIIwAYO3asd3KBTh5Uxv+nn34agJkzZwL+OcF6X04w/TtnzpxmJ5nHuayjHMvKNZyLJ598EoCDDz440jqlYwprGAkichs235LBCiuswA8//JD1u0cffTQA//jHPwB44403gKWntpdRn9Dtn0svvRSAq6++2i0LgC233JLJkydn/a4CBnTGjuuEcSnE5sxmw+r317+6frbruTarnEyaFei7en/27NksXrwYgD333BOAl156CfBVee+99wbg73//O+AnZzv99NMBuO2227zy0+uWXk629qW3sRyUi/n8888HYODAgRllr7zyylkdZOn1jPKUeWEKaxgJIjKFfe211wDo3r178ZVyRtbDDz8cgMcffxyAY489FoBHHnmk2XffeustAH79619nvXaYo/Pbb78NwKabblr0d3fddVcAXnzxRcA/A/f9998H4LjjjgNg8ODBzb4re3Hs2LFZr12Ilzh92SJoCUavNQtQhnuppk5p69ixI2uttRawdDYBft9IdXReklKkqi/vu+8+wLfl//3vf9PQ0ADA559/HlSv0PpQaij/STHk2waYywfTu3dvAIYOHZr1fVNYw6gBIlPYKDx7GrHkadSIXwxhjs5htlF20f777w/4yrraaquVUi+vjfX19alf/gYE27Lp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oFWrVkB+27QUZa0kqVTKO6xNClsJTGENI0GEZsMGRfm45PLwykusqBkxY8YMADbYYIO81yignkXZP926dfMUXQqqIyPlQXRVUWuLeeqR8VrKFMYxlFHZsG6d1d5WrVp57+WbGYTtBf/lWpHbsD/99FOzNVr39PgwMRvWMGqA0GxYjZhHHXVUzs+5o/Qee+zhHegsu1YqI9WRDRulVy6IdHtZyiratWsH+FFJaluu6B2Nxu7ac+fOnYHKtLFUtHZcTJRSJe2/Qrj88ssBuOqqqwC/j+vr671+lm8iCmXNhymsYSSI0NdhBw0aBECfPn0y/u7anfKctm3b1vubayO6KB65kHjPIMK0f9q0aQP4bcmljueeey4A5513HuAf/qz12M8//zzj89VkwxZid5566qkADBw4EPBjxOVZD/MQ5DhtWM2EFi1a5KmtmDZtGpB/F1kpBNmwoT2weiAXLFgA+DezOkYNVweKXr16MXr0aFUSaB7Ef8cddwB4U+dq6WxtxWrfvj3gL8241NfXe86YDz74AID1118/57W7d+8OlB8cEqXTSay99treMpX6390+d/LJJwNw3333qV7l1CPyLZKFDFIWOGEYRk4qliJG4Yj9+/f3/qbp4cyZM4PqU3a55YzOUtSg8MG5c+cCvpNMTorDDz+cxx9/POt3tFSlpSvR2NgIwMEHHwzAmDFjVN+8y1nlKqzq1LZtWwDefPNNXRcoblnNXeYLYymkEss6cW9kN4U1jBqgYgqbzUbQco7rVNJntHxQSGBCjnJLHp07duwIwO677w749pjsci1DuTQ1NQUqijs6V9P2Otnd5QSquO1QUIy215VClAqre0+zqVxtHjt2LODfD2FiCmsYNUDFFDYbCgh///33AT9xl6uoDQ0NgG/nFUMUo3O+sMxUKtVMafLZduUobVTLOsWQr95hte+Xa1TEhs1X93LS35jCGkYNUFBoYlxbvmQjypZVef369QPgL3/5C1CaskbJvvvuC/jeY4UZanN6umdXJwI899xzAOy6664ALFy4EAjHhi2XIM+1cO28bKgd+qyCXiZMmAAkJwQzfQakOrv2bVBbokgsZwprGAkidBtWKqMRtZDPr7vuugAcdNBBANx4440A3qbo4cOHA75NUOi1sxGH/ZPNptWRD0pSF/RZRTgpLWiJ5Zdlwypy66uvvsr4u2YHitbKtZXSfS9MRa02GzaM1Yss5ZkNaxhJJ/QUMcWq3+LFiz1baf/99wfgpptuAuDpp58G/JGsHGWNkylTpgDQtWtXoDh1yWUXxoWU1U3Y/uGHH2Z8Lu6DzOJEsfCaGUHzdWkR5zY7U1jDSBBVsQ6rDcHa6eGiEUz/luN9i8P+0TGTStKWzjnnnAP4UVLa4ePaP9UQ6ZTlullfpyuM/qaoryhmDJVKc5pWfta/b7PNNkB5/oe0MsyGNYykE5vCulEfffv2BbIfLOSmCdUapdKpnHnmmYDvTS6GSo/OQbzzzjuAvxna3Q9bjL0Y11EdYcQFl0Il+vD111/3jp35+uuvAT8ib8MNNwy9PFNYw6gBIktzmg95fHOtXcWxzzBuhc2XBjYM4lLYSlGJPqyrq2OLLbYA/P3B8iS7aXnDIPIUMcVyww03AHD++efnKj/rv+WESFbqgVWeKp1wJzRghRn2aQ9s8rEpsWHUALErrMqTo+KHH34InCbW4pRYFBJAXyqmsMnHFNYwaoDQQxPzEbSRO9t7tUw1hCAaycMU1jAShD2whpEg7IE1jASR00tsGEZ1YQprGAnCHljDSBD2wBpGgrAH1jAShD2whpEg7IE1jATx/+tr8BbnC4QwAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1250, D: 0.09808, G:0.4577\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1500, D: 0.1549, G:0.3103\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1750, D: 0.1628, G:0.3099\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2000, D: 0.1707, G:0.3086\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2250, D: 0.2082, G:0.2151\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2500, D: 0.2557, G:0.1566\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 2750, D: 0.2308, G:0.1775\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dd5ydVZnHv5NJCEOHVYoUAWEhFKUEkCpRmnRkaSKsuNKWJi5FUFGqSlmaIJAFEUFEOsiC0aAsLSBtDZ3QO4oSd9mQQHL3j+H7njtn7nvre2fmXs738+FDZubet7/nd55ynqenVCqRSCQ6g1HDfQCJRKJ+0gubSHQQ6YVNJDqI9MImEh1EemETiQ5idLU/9vT0dJ0LuVQq9ZT/3O3n2O3nB4PPsaenx88N4VEVg8c+Z86cnkp/TwqbSHQQVRU20c9bb70FwKKLLlrYNjfbbDMAfve73xW2zUQ/sbL29PQM+l1vby8As2fPbnj7quBcc80FwMyZMwf8fdSofh2cM2dOw9usNStICptIdBA91d7oj6L90w56e3ubGsnLacQu+6jbsPXQqApWUum8bXmvpNo9y1P6+ByzfdV1tIlEYkTQUTZsK3ZHLdrhWVxwwQUBeOWVV5h//vkB+NOf/gTApz/96QGfHTNmDBDOLR75O9HjOdQ08nzE13fs2LHAYHtUyq//V7/6VQB++ctfAvDee+8BMN988wHwv//7v8BgpV177bUBePDBB7PfNfosJ4VNJDqIqjbsqFGjStD+0T22AZZffnkAnnvuOQAWWmghAN555x0gqNFiiy0G9CtYvRRpw3rcXh+P31H63nvvBWDChAksssgiAPz1r38FYO+99wbg5ptvBuBvf/vbgG3Hn2+EZMMOpJr96X24/PLLAVhmmWWAcD+23nprAH7961/z8Y9/HICXX34ZgKlTpwLwT//0TwDMPffcADzzzDMA/P3vfwfgpz/9KRCUGaCvrw8Iz4rHV/b/ijbssDudenp6shOdMWMGEF5IX1Qv6uOPPw7AbbfdBsA888wDwGc/+1kAJk+eXHN/7XA6zZo1a8Bxyy9+8Qugf8r09a9/3f0D8PbbbwOwwAILAHDUUUcBcMsttwDw9NNPN3086YUdyKhRo3KdS2ussQYAG220EQCHH344AOussw4Qpqyrrroq2267LQDHHHMMAB988AEAp5xyCgB/+MMfALIX+1e/+hUQpuoKzOuvv16eIFHXOWbnUu1EE4nEyKIphW1X6tcKK6wAwPrrrw/AaaedBsC+++4LwKRJk4Awwp1zzjkAbLDBBkD/tKUWRSjstGnTgP5RF4KTwZH1pZdeAoITYpVVVuGFF14AYLfddgPCNMlrqePCqVIzOJJ/8MEHw6awHoOzn9/85jdAuBaxs60Zat3DekI2XnedgaNH9/tfF154YQDGjRsHhPOYNm0an/zkJ4EwcxJNtZVWWgkIU+Fq1HqHksImEl3AsNmw5S74//u//wNgiSWWAMKIFaOSafOed955APz2t78F4M033+T0008HYNNNN624jUYVdr755sv268htuCZ2CHkejso/+clPANhwww35/ve/DwRH2iOPPDLgu464K6+8MgBPPvlktcOqSrttWM/zoIMOAuCSSy7JUiz32WcfIDhmYlZffXUg2Oja/40Q38N11lmnBPDAAw/U/K7X2Xv4P//zP0CwZV999VUApk+fDgQH6GOPPZb9TVvUZ1hF1XHldcnbN4RnKS+skxQ2kegChk1hl112WaBfSQxax2jXmWStF3iLLbbw+ADYaqutAHjxxRczT7IqpxpIETbsueeeC8CBBx4IhJG2bJu5333iiScG/KwdrB1+1113NXo4gyhaYbWrnVEYilClGmH//fcH4Gc/+xkQbMd333237m3Uew8b8bXMO++8QDi32Ivb09PDnXfeCYSoRIzX5x/+4R9q7q/WMSaFTSS6gCFT2Hgk2WmnnQC47rrran5X2+DQQw8FQlDbUfGaa64B+mNotWy/IhRW+0uvoar5mc98xm3mfld7Z/HFFweCslT7Th71JI4XkRhiYoo+Bj2r2n8A77//PhCuxYorrgjke72fffZZINzLLbfcEqgvUaSVe+h1/tjHPjZg/15Ln6n4OCZNmpR5jpdaaqmK23a25DWokZQEpDhsItHVDFnyv6ONMVSzQyBkjGjPOFr7mRNOOGHANsTP7bLLLkDwIhdBJdtCNTRWp73z85//HAiexmqY2RTvJw9je0899dSgv7VjEUQ5qo0ziXvuuQcIylqeTqefQWUyJp13T/TmP/TQQwO+VwTV0jo95j//+c9AUFafJb9j5tN3vvMdANZcc81su3kYvajHdlZZ4/TWWs9DUthEooNom8LGo4xZTEcf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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3000, D: 0.2455, G:0.1689\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dd7RTVdqHnxuKihcQBQUpiig2pNgGFRWwIWLXsYxlsIAVYWwDjn1ZRh0rIop1QESwDKKi2FFGrEizoFhABAUUxDIq3Hx/3O93drKTk5wk5yQ3YT9rufDe5J6zd/bJfvfbq+LxOA6HozyIlXoADocjOO4L63CUEe4L63CUEe4L63CUEe4L63CUEfUzvVhVVVVxJuR4PF6V+HOlz7HS5wdrxxyFk7AORxnhvrAORxnhvrAORxlRJ7+wvXr1olevXt7P8XgcF5FVXlRVVVFVZdSw0aNHM3r06BKOKDzq1atHvXr1+O233/jtt9+8348fP57x48dHeu86+YV1OBzpyWgljhLtvomS05ai9s+bb745AKtWrQJg+fLlEY7Q4ce6664LwP/+97+U1zbccEMAvv32WwAuuugiAI466igABgwYAMCvv/4a+TgLoX792q/GmjVrAJg7dy7bbrtt2vdusskmAPzyyy+Rj8tJWIejjCiZhE2nk9pSN1EHAujYsSMAU6ZMAeCbb74BYPfddwfgyy+/jGSsazuNGzcGzMkmnWQVP/30EwB33nknADfddBMAsVitbJBkbdCgAQAnnHACAA888EDYw86J6upqwIxf4/v888+BWh386KOPBszzefbZZwPmudPJ469//Wtk46zKZMwplkO6R48eANxwww0A7Lbbbn7jKfhea5vTPZ/56eHdcsstAfjggw8yvr979+688cYbAHz33XeAOSb+/vvvAAwbNgyAe+65B4Cff/4512F5hLGGOvKuXr064/tqamp0j8T7A9CwYUPAHPfHjRuX6zB8cYETDkcFUCckrN8Ynn32WQAOOuigMO9VdAnbrFkzvv/+e8BIHkmiKMhVwuq4KmmSjS222AKAJUuWALWqSdOmTZPeo2u1bdsWgDZt2gAwb948AFasWBHoXunIZw3lUjrxxBMD3UPGJhnNdLT///sD5nOLAidhHY4KoGQSdv311wfg66+/ZoMNNkh6TTrte++9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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3250, D: 0.2205, G:0.1549\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3500, D: 0.2506, G:0.1726\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2deaCVc/7HX7d704YWyhLKVAzKErIrSyWyNFHWRMaQjGQZISI7yVaMMDSWRrKLbBlkbCnCkF0xWlB2ftX9/XG9n+8533uesz5n7fP6h+4951nOc8/3/f3sVbW1tRiGUR40KPYFGIaRPvaFNYwywr6whlFG2BfWMMoI+8IaRhlRk+yXVVVVFedCrq2trYr9d6XfY6XfH1TWPcZEbaoS/d4U1jDKCPvCGkYJUVVVRVVVQnEF7AtrGGVFwb+wDRo0oEEDWycMIxvsm2MYZURSL3E+WLlyZaFPaRgVgymsYZQRBVfYSmTdddcF4LfffgPgm2++AaBx48YA/PLLL8W5sAJRVVVF27ZtAViwYEHwM4iLKwLwhz/8AYCPP/64gFdYGCZMmADA0KFD83aOqmTldZUUkBa5BN3lLPv1118B+PnnnwFo3rw5AOPHjwfqP7DmzZuzbNmybC85YwqVOPHHP/4RgLfffpsHH3wQgE033RSA9u3bAzBu3DgARo0aFffeww47DIAHHngAgMGDBwNw8803M2fOHAC22mqrhOct1cQJfZd++uknAKZOnQrAoEGDsjmWJU4YRrlTcIXdcsstAXjttdcAOOSQQ3jjjTcAt53KJ9mszt26dQPg1VdfBZzSrrPOOgD873//S/r+Dh068NFHH2VxtdkRtcJqB6FdwsknnwzAddddl/YxnnvuOQBefPFFoL7iZkKpKqxMIP9vXGTSLMIU1jAqgIIpbL9+/QC4//776/1u/vz5AOywww4ATJ48GYDu3btHdfqAbFbnL7/8EoAVK1YA8OOPPwLOhgvjlVdeAWCTTTYJ7N311lsPgLvvvhuAI444Iv2LT5NMFdZ3EH399dcAtGzZEoDvvvsOgNVXXx2A6urquNfHJsI0atQIcHa+XqN/S4Vqaur8ncuXLwcIdiAdOnTI6P7Svcd8onv+4YcfAPf5hCUINW3aNLBzwzCFNYwKIO9hnZdffhlw6pmIDTfcsO5ifl91W7VqBTg1SmUj5hutoApJXHTRRYC7Ttl0F1xwQdz7mjRpAtR5Qo855pi43x1++OEAHHDAAQCsscYacb+XmmnVjsVXp1zxlbJ169aAS3KZPn06AL169QLc56EwVixSUiH13nXXXeN+7l97Ospaqihs17BhQwDWXHNNAK644goARo4cCbgdWip1TYYprGGUEZHZsL4dlIlHTKvrnnvuCcDEiRPjfq9jPf/88wD06NEj7WP7ZGP/6Ho23njjuPPLVvn0008B6NSpEwDNmjUDYJtttgFgxowZoceWWq211lqAsxvfffddwKleJimd2XqJFRP99ttvgToPPjibXV5xv/yruro6UA+fFi1axB1Tn1kuKaqlYsOm+hvX53TzzTcDcOKJJwKEflbesc2GNYxyJyOFfeSRRwDYf//9671WGS7vv/++3gvUX0lvvfVWwNk03bp1C/b0vrdNHH300QBMmjQp5Q2lItXqrM9D13/eeedx3nnnAc6uVFqdbOxZs2YBdd5ggLlz5wKw8847h16H7tG3XffZZ5+48ytGvXDhwrTu7/d7yEhhpYJLly5N+PvZs2cDsPXWWwPOBuvYsSNQZ4+PHTs27j177bUXAC+88ALg7PkoMr6yUdjOnTsDdVlZEZw/rdclK0RP4xymsIZR7kQehz3ppJMAuP766wG3okmNlAUiW2bBggWBd03X8n//939xx5RKK8l+8eLFmV5WQDarsxLbZZPK1pO3Vl7CmTNnAk5dkqHP47PPPgOcfSg179+/P+Aygh577DGgTgUffvhhAPbbb7+Ex84102nttdcG3G7pk08+AZw67rbbbjo24Lyj4HZOBx10UNy/d9xxx0wvI5RMn2FtbW1Oaie0Awwr5tBOS1EP7biy2VWYwhpGBZCTwr7//vuB7SpbRauvsoNk92mF0+8//PBDIN5elbJKuXRt8lL69l42ZLo6V1VVMWTIEMDFIz///HPArbRaeaWKfjbX119/HeTjTps2DYABAwYALk4t+7BNmzaAi+Xpc5syZQrgVD7de8xEYbXrueSSSwCnnPIWa1eg18WcL3hm2g3tsssugNt1REkxvMS9e/fmiSeeSPqaMBVfbbXVgMRx6zBMYQ2jAshJYfv16xfYcz4nnHACAFdeeSXgagL18969ewN13kMpleKcUl9dm45x1llnpbqflGRj/yg+rHiqbBKpoLzCUiJ5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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 3750, D: 0.2247, G:0.1383\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "D_LS = discriminator().type(dtype)\n", "G_LS = generator().type(dtype)\n", "\n", "D_LS_solver = get_optimizer(D_LS)\n", "G_LS_solver = get_optimizer(G_LS)\n", "\n", "run_a_gan(D_LS, G_LS, D_LS_solver, G_LS_solver, ls_discriminator_loss, ls_generator_loss)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Deeply Convolutional GANs\n", "In the first part of the notebook, we implemented an almost direct copy of the original GAN network from Ian Goodfellow. However, this network architecture allows no real spatial reasoning. It is unable to reason about things like \"sharp edges\" in general because it lacks any convolutional layers. Thus, in this section, we will implement some of the ideas from [DCGAN](https://arxiv.org/abs/1511.06434), where we use convolutional networks \n", "\n", "#### Discriminator\n", "We will use a discriminator inspired by the TensorFlow MNIST classification tutorial, which is able to get above 99% accuracy on the MNIST dataset fairly quickly. \n", "* Reshape into image tensor (Use Unflatten!)\n", "* Conv2D: 32 Filters, 5x5, Stride 1\n", "* Leaky ReLU(alpha=0.01)\n", "* Max Pool 2x2, Stride 2\n", "* Conv2D: 64 Filters, 5x5, Stride 1\n", "* Leaky ReLU(alpha=0.01)\n", "* Max Pool 2x2, Stride 2\n", "* Flatten\n", "* Fully Connected with output size 4 x 4 x 64\n", "* Leaky ReLU(alpha=0.01)\n", "* Fully Connected with output size 1" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([128, 1])\n" ] } ], "source": [ "def build_dc_classifier():\n", " \"\"\"\n", " Build and return a PyTorch model for the DCGAN discriminator implementing\n", " the architecture above.\n", " \"\"\"\n", " return nn.Sequential(\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " nn.Conv2d(1, 32, 5, stride = 1),\n", " nn.LeakyReLU(0.01),\n", " nn.MaxPool2d(2, 2),\n", " nn.Conv2d(32, 64, 5, stride = 1),\n", " nn.LeakyReLU(0.01),\n", " nn.MaxPool2d(2, 2),\n", " Flatten(),\n", " nn.Linear(4*4*64, 4*4*64),\n", " nn.LeakyReLU(0.01),\n", " nn.Linear(4*4*64, 1),\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " )\n", "\n", "data = next(enumerate(loader_train))[-1][0].type(dtype)\n", "b = build_dc_classifier().type(dtype)\n", "out = b(data)\n", "print(out.size())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the number of parameters in your classifier as a sanity check:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Correct number of parameters in generator.\n" ] } ], "source": [ "def test_dc_classifer(true_count=1102721):\n", " model = build_dc_classifier()\n", " cur_count = count_params(model)\n", " if cur_count != true_count:\n", " print('Incorrect number of parameters in generator. Check your achitecture.')\n", " else:\n", " print('Correct number of parameters in generator.')\n", "\n", "test_dc_classifer()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Generator\n", "For the generator, we will copy the architecture exactly from the [InfoGAN paper](https://arxiv.org/pdf/1606.03657.pdf). See Appendix C.1 MNIST. See the documentation for [tf.nn.conv2d_transpose](https://www.tensorflow.org/api_docs/python/tf/nn/conv2d_transpose). We are always \"training\" in GAN mode. \n", "* Fully connected with output size 1024\n", "* `ReLU`\n", "* BatchNorm\n", "* Fully connected with output size 7 x 7 x 128 \n", "* ReLU\n", "* BatchNorm\n", "* Reshape into Image Tensor of shape 7, 7, 128\n", "* Conv2D^T (Transpose): 64 filters of 4x4, stride 2, 'same' padding (use `padding=1`)\n", "* `ReLU`\n", "* BatchNorm\n", "* Conv2D^T (Transpose): 1 filter of 4x4, stride 2, 'same' padding (use `padding=1`)\n", "* `TanH`\n", "* Should have a 28x28x1 image, reshape back into 784 vector" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "torch.Size([128, 784])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def build_dc_generator(noise_dim=NOISE_DIM):\n", " \"\"\"\n", " Build and return a PyTorch model implementing the DCGAN generator using\n", " the architecture described above.\n", " \"\"\"\n", " return nn.Sequential(\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", "\n", " nn.Linear(noise_dim, 1024),\n", " nn.ReLU(),\n", " nn.BatchNorm1d(1024),\n", " nn.Linear(1024, 7*7*128),\n", " nn.ReLU(),\n", " nn.BatchNorm1d(7*7*128),\n", " Unflatten(),\n", " torch.nn.ConvTranspose2d(128, 64, 4, stride = 2, padding = 1),\n", " nn.ReLU(),\n", " nn.BatchNorm2d(64),\n", " torch.nn.ConvTranspose2d(64, 1, 4, stride = 2, padding = 1),\n", " nn.Tanh(),\n", " Flatten(),\n", "\n", " # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " )\n", "\n", "test_g_gan = build_dc_generator().type(dtype)\n", "test_g_gan.apply(initialize_weights)\n", "\n", "fake_seed = torch.randn(batch_size, NOISE_DIM).type(dtype)\n", "fake_images = test_g_gan.forward(fake_seed)\n", "fake_images.size()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the number of parameters in your generator as a sanity check:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Correct number of parameters in generator.\n" ] } ], "source": [ "def test_dc_generator(true_count=6580801):\n", " model = build_dc_generator(4)\n", " cur_count = count_params(model)\n", " if cur_count != true_count:\n", " print('Incorrect number of parameters in generator. Check your achitecture.')\n", " else:\n", " print('Correct number of parameters in generator.')\n", "\n", "test_dc_generator()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iter: 0, D: 1.362, G:0.1309\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdZ7hV1dU/7KFiQ6ygkiBiAWNDTSxoiCIWrFhAJBrFhj0IFmJ9FDTRYFcQNZbEaCyo2GNF1IiAkFiJiFHEiKJobASV4nk/cN1j7bPg7Ov59v7Pc63xhXL22XutOecevzLGnGuphoaGqKKKKppHLP3/9wVUUUUV//uovrBVVNGMovrCVlFFM4rqC1tFFc0oqi9sFVU0o2hR74ennnpqQ0TEt99+GxER//rXvyIiYuedd46IiHXXXTdeeOGFiIjYYYcdIiLirbfeioiICRMmRETEgQceGBERU6dOjYiI7bbbLiIi5s6dGxERK6+8cjzxxBMREfGjH/0oIiJ+/OMfR0TEK6+8EhERc+bMiYiIhQsXRkRE69atIyJipZVWioiIv//97xERsf3228cPP/wQEREdO3aMiIivv/46IiK+/PLLiIi4+uqrl6q9xxNOOKGh9r1//vOfR0TE6NGjIyJi1VVXjeWWW67Reyy99NKN/mzVqlVERHzxxRcREfHZZ59FRMS2224bERHvvvturLbaahER8frrr0dERMuWLSMiYsstt2x0r+uvv35ERLRv3z4iIj799NOIiFhhhRUiIuK///1vfq7rWnvttSMi4o033oiIiAcffDDv8bDDDmuIiFhllVUiIqJFi0VTPmvWrBzbQw89NCIi3n///YiI+PDDDxtd00EHHRQREaNGjYqIYq6/+eabiIhYZpll8n6slQULFkREsWY6dOgQERHt2rWLiIh77rknIiL22muviIj46quvcgzNnfk17q7r0UcfbTSH/fv3b6j9zJVXXjkiIpZaatHLttpqq1xva621VkREjBkzptFrPv/884iI2HDDDSMi4oEHHmh0r5tvvnne73//+99GY+g9l19++YiIeOedd3JcIiKWXXbZiCjW2E9/+tNcs97Tut14440jYvF1KiqEraKKZhR1EXbFFVeMiCKTyAKy/pNPPpmv2XTTTSOiQB3/fvfddyOiQJ2ZM2dGRMSUKVPyc/bee++IKBBi0qRJERHRr1+/iIi4/vrrIyJixx13jIiIY445JiIifvvb30ZExK677hoRi7IVZPrHP/4REREbbbRRRETMmzdvifc4fvz4iIi48cYbI6LIrPvss09ERHz88cdxxBFHRETE008/HRERs2fPjoiI//znPxFRZOtTTjml0X1Alw033DC6dOkSERHdunWLiIhHH300IiLuv//+iCgQcNCgQRER8cknn0RExLhx4yIi4oMPPoiIiN69e8d+++0XEREPPfRQRETMmDEjIiLWWGONxe5vnXXWiYiI5557LiIK9vLee+9FxKKM7n6wgEceeaTRe0CO3XbbLSKKuYRO33//fSIk9OnevXtERLz55psREbHeeutFRIGWW2yxRUREvPjiixER8d1330VERJs2bXKsnnnmmXz/iIg99thjsfuLKNiae8MUXFOPHj3iT3/6U0REvPTSSxER8bvf/S4iCgbWq1eviCjW1IUXXhgRxXpt06ZN/OUvf4mIgi0Y76222ioiIl5++eWIKJjPBhtsEBEREydOjIiCNT3zzDPRtWvXiChYjMASmooKYauoohlFXYSVKWT7NddcMyIKndWpU6fMoPg5nSFjyWgyLH3y0UcfRcQixLjqqqsiIlJLQUOIJrM/9dRTERExfPjwiIgYOXJkRBR6c9NNN4233347IiJ+9rOfRUSR3ejJcsjKMiokg+YTJkzIzOmeZFbIdsghh0REgRqy9CabbBIRizTM2LFjI6JgHK+++mpEFIgKLV2vzA556cipU6fmuLz22muNxu3JJ59c7P6wIXqqZ8+eEVEwi6effjoRChrTuYcddlhERFx33XUREXHTTTdFRDHuffv2jYhF4//xxx9HRMQBBxwQEcW4Yk/PP/98o/vZaaedIqLwJ37yk59ExCL0dh8QHFKam3KsuuqqjcYMw3G9w4cPj2222SYiIu67776IKMazTZs2ERFx5513RkQxp7///e8XGwvr/sQTT4yIYh0MHjw4IiI6d+4cEYWm5W0ce+yxjcZtjz32SIT1PfCn8WgqKoStoopmFHURVobgUNIfdMo666wTl19+eUREIhu98de//jUiCsdu8uTJERHRtm3biFjkMEdE3HHHHamDZcjevXtHRKF/ZMGjjjoqIiL+/Oc/R0SRsWS21q1bJ9rRG67H55eDXpLF6VBZc80110w9xkmkYaCl6zrhhBMiotBaMvB1112XCE/vQtxbbrml0edCh9NOOy0iCi2ORey0005xySWXREShux9//PGIKOarNqZPnx4REQMHDmz0+fTqgAEDEqmxI07/FVdcEREFezIf0HrfffeNiEXzQDfeddddEVFo9e233z4iCvT23n/84x8jovBFOOytW7dOlP73v/8dEQXqWTvlcN8caIjLrR07dmwi/jXXXNPotcZDhYIH47Nq/9/P+ByCHsZajBv/RCWglgFAenPpZ5C+qagQtooqmlHURdh//vOfEVFkSagps6622mrpWKo12f0zbdq0iIg499xzI6JwyFZfffWIKBzUDz/8MLPxgw8+GBGFY1h2HB977LGIKJw9SAaV3n333fx8OhgK/vrXv17iPdLp6q9cOy72SSedlLVmOs29yMK33XZbo/eiwdQkjzzyyBwfbOHaa6+NiAKtoBhGoH5N20GEBx98MIYNGxYRBTrvsssuEVGgVG14H+yIpn322WcjYpG2h/50PxTkxkNeGg4iYyeXXXZZjheUUSVQYzfH6o88ArpUvfPBBx/MdYYVWW/m//TTT290j+bMXHO1sb6WLVvm/GJzXOP58+dHROEdGG/1WHP52muvxZlnnhkRBfu54IILIqJYK94DemIV559/fkQU/QsbbLBBsgfXQVMbt6ai7hfWhPztb3+LiOILjLJsvPHGOalukCHy05/+NCIKmxp923333fN3IxY1UjB1Dj/88IgoFqIF8qtf/Soiii8K0+n222+PiKL4fPDBB+cXQ5EfXUU1UENhMbLm3fPWW28dEYuSxuabbx4RBW22oFGhM844IyIKE0aZREnm008/TepnwaBxJ598ckQsWvQRhTnjvSx4lLNVq1bZfIFqKbuh7LUhMfqCmhcyZ/bs2bnA3ZfPvvfeeyOiMPvMoYU5YMCAiFg0b8wlxpwvHbrev3//iCiaIYwlMLB+WrRoketNskFtSZ9ykB7G2HxJmB999FEmM6aOZGtNmQ8U2DyQFBtssEEak9auedYkZB2TdMcdd1xEFCVC1H7WrFmZTKxXpTKf21RUlLiKKppR1EVYFFUrIGMEZT3mmGOS4irMM0m0nDEXZHT0BTX71a9+lVSGte13UC8ooZCOgsqgEHbMmDHRqVOnRvfA3EIby4FeYwaoGUo/d+7cNBs0SqD5ylyQRslCKUsW/+ijj5Kd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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 250, D: 1.387, G:0.6395\n" ] }, { "data": { "image/png": "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Yq+k8NBDDwFxyZg8c+9piau0MRfypDYDRddXRJvTvRw1alTi33feeeco20b8aLdlDcTx11NPPRUg8lsk+X5818/M2sqzmICAgFUDqRI2K/44bNiwSILut99+QPWuL9tWzCaL0047LWJBKftE3t/PfOYzQLzrKLdSx6Wh1qT4JImr64sHrCwiJSxrB7300ksB+N73vldxXltbW1V5zy9/+ctAbOPrumI+iSddZM49Bbfot4Xl0/YEGqFpyJcgqbj99ttX/P2CCy6IYudPP/00AN/85jcB2GyzzQB49NFHgVgr8rG73MLrRQstpKbX9enTpwzVmfJSAQ499FBuvfVWgKokdDuRN954A+juZA2xAycN+iKoWoESh2t5IHlTs/LU31ElAZEg5Kg4/fTTgdjBJjW3s7MzGk9pZo888ghAZFLo4YqAILWrCBwqaVPT65S48PbbbwOVXeVsUYFGomh6XZExRZnVZquQXVJHQAs9q6uuugqAe++9F4idjiK4uBRfXy0n3T/bZV4IKnFAQAuhprCOqHEPPvhglD610UYbAdU9PLXrF3EUSaLL6XTttdcCzXGqFFGnJDW0cx577LEAHHzwwUC8WyrpWdrGpEmTovuicySVpQINGzYMqE2y9jSk8il0s84660Rr/zASEOp5L6TxiNgzevRooLpYQprZ8be//Q2I6aV6Hz7/+c8DsXbpqru19hwOEjYgoIWQasP27t27DOnJx5IiQ4YMAeC2224DYve4r5u3duJXXnklKoui6xx//PFAHBYRIf7Tn/50/pUlzBWq7Z9G9J7R2Ep3k30iably5crofyKMyxknwoRs+3rQUzasm4gA3f4LaUWSSM1EuVyueIb1rFGpnP/xH/8BVIcQRaUdMWJE1TusNX/lK18BYqeoShqdddZZQKyJuEnrvrrMSf2RXAQJGxDQQqgrva5cLke7hvR0EcFF/lcwWVJy6tSp0bkW2223HQCXX345EHue5Y1cVaG1LFq0KPH/pVKJgw46CIglq875t3/7t4bPo9mQJ9ulJCrk0SpQSE4UWlveVCV6vva1rwGV34V9990XiAk0SiEVaUSJ6go/WlqqS/C337GsEF2QsAEBLYS6bNhGQTuOjU3eeOONANxwww1AfWR/nw3b0dGRaMM2UloNHDgwKiotCfvyyy8DjUlDs3BtvGbYsEcccQQQe/EhllDN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znTWrFlAdWG0Rkq4IrZtUQ9oWukSK530qTicysu88847Ff/v378/m266KdDdDBuqvZZp17FtFaFao6nl/ub14Ps+XV642lmqEXLW2LVqZEmw3F61pezs7Izi3Ho2F154Ya7rFNHasnwOub6wjVApFJA+8sgjAbj44ouB7i+wSsB89atfBeKqfI3sKFfLTbUQQWG//fYD4iR9PUD1B1UlfNWiev311znjjDOA2DGkEIWqSO6///5AHPzfZ599gPiF0X178803o6qRMiF0Tloqng3u64ubFvLIgps0oPH0nDWmCCt62bXpqm/S4MGDgfi+DB48OEomV1mdrJREHymiFugLq6SQ3/72twBss8020dyvueYaACZNmlT39QrPr8euFBAQUDeaVvnfQo6E0047DYglR1dXF3fccQcAr732WvS3RqMW0gV0S4hDDjkEiHvkiKBg1SdLwxR22GGHqKeqqsRL1ZU0kZRUDWYVaxM05vz586uq96VR4+y6k7SWvM9ZUlTS8pZbbgG66xVLCkrCSoPQ77q/qhopuqv65Kpvzfz58yMNohGhuFqxySabADB8+HCg+/2VCfKd73wHaI5kDU6ngIDVCD0mYbfaaisgrh6vHXfp0qXcc889QHO7d/tgbTxLBh88eHDkvle9YR/Swl76n/rR/Pd//zcQdzvYaKONAKLQwQEHHADE98St6+xzMuV5Xta5kecc2aqys7/1rW8B3Xad/m9pgdZRKEkrh5L+r7rV8mN0dnZWFS7IItc3ksgizeDyyy8HYs0QYg2r2SVy0hAkbEBAC6HhvXUsJLFk99jCXvfff7+3Gn5PFMyyY9tSLnPmzImkgMJPmpd2Wu28+r9S9dRrZdiwYZEEffXVV4G4i50I5ep6oDIoKimqrgg6viftOt0DhZHOPffcit9/97vfAd1V87XWHXbYAYhtQHmB5eXWmLLl1VPVLVWblqbYbCjsKHKEnvV7770Xla39MIs+BAkbENBCqKm3ThEqmnZUNzHZPU89R5Mge0K7b094jy3NbcmSJZx++ulAbF9uvPHGQOwtzLJpOjo6IttNvW9tUTR5zXfaaScAXnzxRSBuk5GXRJAXecZRET61RFGh9ClTpgBx71R5uIGoE6Fs8B133BGISTAihshGlGaRlVrZbOi64gK43RWhe63SInSs4u+C+AP1IHRgDwhYjVCTl7gW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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 500, D: 1.233, G:0.8587\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dZ6AkVZmGn74zMDCIDCASJIMIknOWhQVEkSwI4uISBgFhCSIZlyUnlSQsQxSRJIgEhXUJkjMoQQRcGAYJgojEHeDOvfvj8tTpPrerY3Xf27Pn/TNzu6urzqlTdb70ft9XGhwcJCEhoTfQN9IDSEhIaBzphU1I6CGkFzYhoYeQXtiEhB5CemETEnoIY2t9OdNMMw0CfPzxxwCUSiUA9CwPDg7SDS+z123lN/47btw4AN5///2Kk80888yDAP39/QBMmzYNoKl5xeOLr11+roGBAQD6+vqqHhNf1+/Hjh1aqhlnnHHYufx3pplmAuCtt97KBjRmzJjB8mOE1y+/XqP3ucg1j685ODiYO44ZZpgBgKlTp1YcED+njq/a/c9bK++rz4Gfe99KpVLF/wHGjBlDteuWzwWGr3X5d/FYXecPP/yw6k1IEjYhoYdQqrVb9vX1DUKxO+pIoWzHrNi5emWO7tLjx4/PdnR3fLUC59jf35/NsVQqje6JNQHvwbRp0yrWME+LaOXc7ZyjCOQ9pyJJ2ISEHkJNGzZGNZsgoRjk3Vttmmrf59m9rV6viPXt5DPSii+jUTQjWfPG0eicS6VS7rH15pgkbEJCD6GmhK23C/SSpM0b60jPQdtp0UUXBWDKlClAGNfss88OwN/+9jcAPvjgg5Y82LE3stxma0dS512nE2hUKrUzlmZs2VlmmQWAT3/60wC88cYbQPAa56HWuJKETUiYjtCUDRvv0gmtw538qaeeAmDJJZcEwu48efJkANZYYw2gsR2/EYnSqTXshqZST0uqJWmrxXuroZn7/N5771V8vvTSSwMhlvvcc88B8NFHH9W8ZrUx56GpF1aMtBrZy/BFnWOOOQB49tlngfDCSg5YYIEFAHj77bcLvb4PRCsEkXrnLOp8zaIZlV4CzYQJEwD461//2vBv8+CL+8QTTwBw+OGHAzDPPPMAcMghh1QcV2tTqDeOpBInJPQQWpKw7SCmdc0yyywZpe6DDz4A4N133+36eDotGaS+rbvuukCQrCeddBIAm266KRDui04mJWFRKHKejnWppZbKPnPt3n//fSBIlalTpzZ0zlrS2uu1g8UXXxyA448/HoBvfvObFeNsB67V3HPPDcC//Mu/AHDTTTcBcPPNNwNJwiYk/L9BxyWsu+L8888PwFZbbQUESbPBBhsw22yzAWF3/ctf/gLAggsuCIxMqKBoaDPNNddcAPzP//wPAMsuuywQbFtx2WWXdWVczcD1WWihhQC46KKLgCFyx2uvvQYE23veeecF4M033wTgkksuAeDSSy+t+DzGmDFjCtcqIKzz9773PQA222wzAPbZZx8ATjjhhMKu9dJLLwFDNFKA008/HYDll18eGHJKtfrcJQmbkNBD6JiEdTdWj997770BmHnmmQF45JFHAJg0aVK222kLKY0PPvhgAE488cRODbMr6Ovry7zCCy+8MAArrbQSAHvuuScQ7teHH34IwBFHHFHItYvQIPQx7LTTTgAceeSRAJlmdOWVV3LggQcCgeixzDLLAIEQosT9zGc+A8A//vGPquOcNm1aR0guanrf+MY3Kj5fZZVVWj5nHr7whS8AYbyG6FzbWvNINmxCwnSEmul1raRmKSm+9KUvAXD11VcDwTO29dZbA/Dwww8DQ7uOu98rr7wCwGc/+1kgBJyVykWkPg0ODlZEpruRfjZmzJhM4iiltt9+eyBIHrHtttsCcM0117R8vfI5tjM/1/Loo48GYL/99qv4/j/+4z8AOPXUU4f91jWtRoWE4FF1bT2uFvUyL72ukRRJtYT//d//rfhcW1rfQhEaye677w7AOeecAwS6qbF2JW0txM+pSBI2IaGHULgN6455wQUXAGFn8+/7778fqIwv+v+NNtoIgN///vdAYP3ssssuAJx//vlFD7crKJVK2X3ZZJNNgKBFiL///e9AiNUVeW1oreSNUmfLLbes+F6/xK9+9avc38bakGus5NWD+vnPfx4IUsj4ba1x5X1ea44+SzF+97vf1f1ts/C+ieuuuw4IGmM7SBI2IaGHUJiEdZeTubPIIosAYcc87rjjgNrMHYnw2hlKpW9/+9sAXHXVVQC88847LY9vJNDX18dyyy0HhNiykkai+FlnnQUEtldRiK/TCNZee20gMHTEscceCwSJUQ4T7V0jU83+/Oc/A3DnnXcC8NZbbwGBS73jjjsCIRJQK7k7jlWLRtY2b/7GRouEXmLHZQy+CCmeJGxCQg+hMAnrTq69424oAyb2ztWCTCd5n7KCtEOMZbqry1/929/+1hGWTLuYMGECO+ywAzDcK/ryyy8DcPbZZwPFM6+auR8rrLACALfddhsQ7vfTTz8NwBlnnAGEMbrmu+22G2eeeWbFb4THyp2+6667Kj5/8skngcCdbiVG2YiE/dSnPlX188997nMV5yji/m+++eYV59ROLgJJwiYk9BAK9xJbLsOd6vHHHweCV7CsGDQw5DnTo+h32jdKB1lRSlJ3rrLC2RXHV8NI5vCuuOKKGWdYqeR4br/9diB4iUcCakParLGUVJORhys7yxhytQwbs19OOeUUIEhSfRxKPOPxjcTY29Ge1B7yUBbjbfka+iecm7nMl19+ecvnjFHYC+sN90WcddZZAVh11VUBOOiggwDYeOONgZDce91112WOCifoi+g5H3zwQSDcTJ1OqlGjFSZLT5w4MaPsCV38kyZNAopPoxONqHqGmOIxCumFEiVi58+0adMyp5nrHNc18twSFaSfmgRiIkEraEQllhKZ1xXAtfL5baWKoiFLf2uSRCNEiUaRVOKEhB5C4RJ21113BeDaa68Fws72rW99Cwi7ke7+J554ItttVZeUsIaE4t4+RQSgOwkl0Prrrw/AhhtuOGxHv+OOO4BAEimyJnC9z+LvVV//67/+CwhJGErDZ555BoCf/vSnQCA5SGpvRDuwwqCOxPIeQY2eIw+N/PaPf/wjMFzCKv32339/IDhNfQY33HBDYEibi39ruObHP/4xEByKag2tlPdJVRMTEqYj1JSwrez6N954IwA777wzEBKE1efddW655RYALrzwQpZYYgkgOKyEicCGdUZjyKYcOpSUIscccwww5ITwHrqj77XXXhV/5yHuajbHHHNkO7vhL0Nm1dYpr5KgGD9+fOZPcLw6iBpJB6sHx73OOusAQXJ5zp/97GdA53vaKGENL/k86gdZa621ADKCixqAYclqcMySXbTfH3jggZbHmUcOyb5v+cwJCQldR0uV/xuBpUCuvPJKIFDA3Mn09A4ODjLnnHMCYafyunEhr9FaXtXd2MRutQo1hlKplNnhhk5eeOEFoP6c4qJ1g4ODmQdeCRj3La2FmPQw55xzMt988wHBnm60YFotGBoy9c60QiXuiy++CAQi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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 750, D: 1.264, G:0.7925\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dZ4AURd7Gf7O7LLAiZpQ7A2DOWRRR9EDMCXPO6cxZT8RwyqmAWc4c0DPrGU49FRRzxhwwe4KoiJ5gQhbm/bD3dPXUdM90T3fP7Oxbz5eFmZ7uqq7uev75n8vn8zg4ONQHGmo9AAcHh+hwL6yDQx3BvbAODnUE98I6ONQR3Avr4FBHaCr1ZefOnfMAs2fPBiCXyxX8nT17NrIyR7U2NzU1FZwDYM6cOQV/Bft6ukbY5/l8vuC8/mMaGtr2ppkzZxYcMO+88+YBZs2aBcBvv/1WNJ9KLen2WILOZc+lHPxz1JwaGxsB6NatGwDfffedd7KmpqY8hN9b+/MglFsHgE6dOhWMQf/Xff35558B+P333wvO4Z+XDc1Pz4zm+csvvxTcLPs5tTFnzhzvXPbzGra2UdYuTWh8Xbt2BeCnn34KfCAcwzo41BFypXaNhoaGPKS7s2gn8aPcLhe0o/s/9/8+jKl8UkHBAc3NzQW7cxTGaS+w5yoGmjVrlvdFFmtYbdgSRWtra8HEGxsbA+dYj3Pu3LkzAL/99ptjWAeHekdJHdZmuDQQpsNlNY5yv4mrg7cHhN2PMB2uXhFVr+8IkPQw99xzlz6uGoNxcHBIByUZNgvE0TNs3TUKC4YdE/a5dNZ6Yti4c6xX2PMJsy+ESUlZSIhpQ3aHXr16AfDrr7+WPN4xrINDHaEkw7aXnSnqOHK5XOwxlzu+knMGQX7JjTbaCIANN9wQgC+++AKAG264AahfPdT2Iy600EKA8btOnz4dMAxSyTzTXttaQuy/2GKLAfDTTz8BJg4g9HelJiVzeT25Osohn88XWDJyuVxVVnW55ZYD4OWXXwZMgIEWqk+fPgB89913ia/ln2OWbh09dJtuuik333wzAAsssIDGUPBXL+4bb7wBwJAhQwD4+uuvY1+3VmtYDnFE8LBjFSTid8354URiB4c6QuZGJ+0kcggvssgigBEJt9lmGxZeeGEAnn/+eQBuuukmAD7++GPAiE/1Ki42Njay7bbbAoZZw8L96gES76+77joAdtttN+87O8xUjKH1X3LJJQFYZ511AHjssceA8qJgKVTjHuZyOVZccUUA1l13XQDeeecdAPbff3/ASA3/+c9/AHj99dcBuOaaawCYMGEC0BauWanh0DGsg0MdIfXQxB49egCw9957A3DaaacB0L1797YLWs7wn3/+ma+++gqA+eef3/sMjD6k3XfAgAEAvPfee5HHY6MW+k+PHj28XXbrrbcu+G7cuHEAbL755gC0trYmvp5/jlnYIR5++GEABg8eDLRJPvfccw9gjGjbbbcdAD179gRg5syZAHz//fcATJw4EYAzzjgDgLfeektjL3t9ew2z1NMlGbz00ksew8rAZktJmqMMa5KmJk2aBMCJJ54IwPjx40NtFTq3HULrfZ9kMg4ODtVFam6dRRddFDBWQLGloF3mggsuAOCuu+4C2qyiuk5zczNgmPWKK64AzE6uc999990A7LHHHpHHWcswt7nnnpvVVlutYBzajS+++GIgHWYNQpqso7C5TTbZBDBzuffee7n++usBo9/edtttgFn3eeedFzDzVaDAFltsAcC7774LlL4PQYkjED15JAoUyCAJ8aKLLgJgnnnm8Y6RtKKxTp06FYBbb70VgA022ACABRdcEIAZM2YARsd99dVXPUkjruTjGNbBoY5QUoeNot9p17vkkksAOOiggwo+P/bYYwEYPXo0UNmOL8b97LPPAKMbvPbaa4CxOFai/1RDh1111VV59tlnATN26Tmylr/66qupXc8/xzTn17dvX6BNBwPDLNtvv73HJvrOTlQX2+kcw4cPBwxrS+edPHly6PXD9Dt7jmFpmKWgcz/55JMA9O/fv+Dz1tZWjxUvv/xyAP773/8CxpshJhXDSnpYc801NW6gzW8tf7wtUfgKCzgd1sGh3pHYD6sdSNbBBx54AIBrr70WMH62JJg2bRoATzzxBNDmuwVYY401AKM3aVdvb5hvvvk8a6Pw7bffAsZaWg9YaaWVAFP2Rcw1bNgwL7QybA10rOwQ0uGl2y+//PJAaYbNIjRR6/LMM88Ahg2FL7/8EoC99trL86sqOk02F51D7KioNkkdekd0ro8//rhim4VjWAeHOkJihp1rrrkAs5v85S9/AYxcnwbk21WEiXYy6YHtlVmFrl27eoyiyJ8PP/wQKJ9OFQVZ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I2u4WHLGjBke24ghNthgA8A8B+PGjQPgmGOOAeDLL78EatcRfeDAgYCR1jTns846CzCeCf+91VxkHb799tuLjokKO2Fe901STBgcwzo41BESF2Gbd955gba0KIDVVlsNMPrciBEjAONbDfI/apc5//zzATjqqKMAk6YmXenkk08GDAPL7xWHYe0mQ1lms4hFFl100aJormWXXRYobY0MQ7miaEmzdWQxVfpijx49Cr4XK8rSO2HCBM/qr87xOuazzz4DTBK6jksoFSVeQ1mJpcvKqyHL/oABAwCjg0Nbq08wHen1jOuZt5syh8Hvl9fa6VnX5z/88IPL1nFwqHck0mFzuZzne5SVcLPNNgMMk4h5ldFi63f+78SsyvhQLLGslA8//DBgWLq9FsoSZIH0Q/qfneMbFblcrmplR+Uj3XLLLb1rg/GHKxlf0oIfYiGtf1izrFpB49BzKN1Rc9tvv/0A+OSTT4C2OaqQgqz/r7zyChDfHtHQ0OAxqhpj6W85P3RikViDlUJu18SxF1kDlejRtWtXnnzySQDWWmutgsErgGKvvfYCTEhcEkTt3p0GdC86d+5cJCJedtllgBEVy1We9423yNhki5f+JP1KxEXbACI3hhKzlRqoMbe2tnrrKcOhve5KApDBJkmARBoicffu3QGYPHkyYNxQcjNpw5HKssoqq3hGUBk/RSQKs9Ta6r7oWdc92WmnnYC2FEslTkybNq1gXLpfdpK+4ERiB4c6QmK3ji1ahH1v905VMMQ999zjMavdP/O9994DzI5WDaTZvVuiPRjxXky05pprAqZCoOao+yOW086vXXv27NlF4ynXlycudH4ZUf75z38W/BVzKMBl4MCBXlC/3CF26N+GG24ImFQ0iZq1wi677AIYY5Oe06+//howxiiFZfbs2dOTOBReqTRKpeRJBdKaaQ31PEsNmjhxYqhaV24NHcM6ONQRql75X7uUQr+WXnppj1VkqHr33XcBGDNmDFCs36UZMFDuXJVcI4jxFLIn1lLRrz59+gAmOF5z9+v4YBh6+vTp3u4fdt2sofV48803gbbwUxkbpQMKdn3o0047DYCDDjoISCdwIs7zoGNl4NR9VTqgXIVy60hP/eijj7xgkIUXXhigSDIMu/+6B9Lb999//9B5u/Q6B4cOhKoxrOR3sahfd1BQxRVXXAEY66qdECy9SDpCHPdOub6r9vdphDv6A7lVIkVpaKuvvjpgAk9UuE3BCrJi2skTY8eOzVyHjQrNs1u3bh6LvP322wXfSQeUfqfjapVeKP1bf/WMySOhwA4VT7j66quBtnU7+OCDATjvvPMAE7IplpZerkIMsussueSSBccppDYI5e6LY1gHhzpC5gyrXV8JzbZVbty4cYwePRowPimxsc0y9l8lvqtU6Jw5c0I7flc67rT8s7KKS1fSbt27d2+g2HFvF55TmdRSBef8VulqQFbSAQMGeJKCxin20RpKJ1fiRpp+7zjnUrzADTfcALSVaAV4+umnAZPwoGfKf+6rrroKMH5V6eOyP6jMrfRTraX0e/lxS62hsxI7OHQgZLYla8dV8LTkeOHuu+8G4IgjjvB8eGIdJRFL5lf44wcffACYYHSlSCll79FHHy0qsynELULtPz4NNlDvGEW4aJdVsLzSzqTfKLBeUUXSgf07sL0bp11exU79UiiifMiycPfr18+TFKSrSpIS6z///POASYioBoLulXyispvo/1GgZ0rPmNhaDCqGtTvRPfPMM4CRHBsbG0PXyumwDg4dCKkxrCy4YhKVr1Q7A+020lPlwzvvvPO8lhs2C0oXkCVPPjFZmqVDKXl65syZoTtXrYPOxU477LADYHb2IUOGACYBQrqsrJS6T2LcfD4fGvxfqU9TLCidTC0nJNFoTJIG7BYq3bt3L4rM0pjERtIJfc2eKhprHPjtELquJJskVuqdd9654P9i2rD+yZIQ/TYGjcceh/PDOjh0IKSWraMoEOmm/sJjYHY2XU/yvJ9VtevK0jhy5EjAFGOzMxvEsGKrzp07e8eE7aBRMz3SaKnpjwuWT06f2fPXHOTDkz4vG0Cc8qj+OdrZSJqXrt/c3Oyt3YMPPggkaxAl2Owyfvx4AHbddVcgWqfzMERdQ38fY3tcSSQuFWU44YQTAPNsS7eXZGJLEbrnnTt39tazhETosnUcHOodqemwsm4qv1B+RzuW1GaWfD7v+WgPPPBAoLj1RRi0S8vnt/zyy3tJ10l2cP94k0QPqaTNiBEjQotrST/XPZBPT7prlI7gQtBYxZaaj8ahrJmhQ4d6DbriMqvf1y0mla6qdZZ1W8neSVDtSK4w2KVgbJ+5Srna8Ou4YXNxflgHhw6ExDqs71jAWMzUuPfSSy8t+F5WRBVWu/7667nkkkuAyi13/kZTYqwS2TdVK8KmnfeRRx4papUpxpFfVsWoJRnIBx3HmuqzwHpzbGpqypc6T0NDgyeVSAcT9BvlJW+88caA0bfF/nPNNVeRJKDnQN4DSUHS0TW/SnTJqGvoly5s63QSHVbnlVShc6vUrypz2EUC/THm+iwsXsC/hn6UfGGTlE+xX2DbAOCvYVNNl0s1X9g4sCu/VxJaGVRepNwLC2ZNVLtJL9WECRMiX7vcuaUa2S9MGi9sY2NjHsJr/fo/S+oC80Nhl3byilxwYXNtbGwsWl//dwCtra3O6OTgUO8oybBhO1ecXbGS5OJKGTeowr59bn+Bsv993i4YVghLlfM748MME1INfvvtN+8Aew2jXDvLbvVpnDuMYUsZCu2UxzQDN6LOLShUMoh9wTGsg0OHQEm3jr3bV6hvRD62FKskRVyXQJZsE+W6pUqZhvUWTRrwkGbJnSTnDAvxq9QV4h9DFonzUefoP86WBlxvHQeHDoiSDCuTvCy6pSx75RgpjC1zuVyRBTlsh5XeEabn+QPjbbaxy24KdmCBveP5r2HrPWGMpvHq+99//z30/tihgnYJFXvu/t/oWF1HVstSY7THEaRX2fO0j7X/NjQ0FB1jz0Pf26F49u/y+bw3Zp8+B4R3S1C5Fx1nSyBBrKpja5UUYt9DeVOUlhoGx7AODnWEklZiBweH9gXHsA4OdQT3wjo41BHcC+vgUEdwL6yDQx3BvbAODnUE98I6ONQR/g8Tke6ibqezhQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1000, D: 1.313, G:0.8431\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1250, D: 1.23, G:1.009\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dd7xcZZnHv7ckJJQsggvSAixVqkFQEGlLX6oruCgIKruCwoqAVBGw8NEFUfpKlbYBbMDiRoqIATTUpZdsUHpNDKHctJvk7h/X7zln3pkz9cy9d+L7+2funZlzzvue98z7e/rTNTAwQERERGege7gHEBERUT/iDzYiooMQf7ARER2E+IONiOggxB9sREQHobfahz09PQMAixYtavoC3d3dFV89Z/bcXV1dJcf6v5ZsX0eNGgXA6NGjS763YMECQqv3woULS/6fN29eyUXCOfb09JSN1/f8ztixYwGYP38+AP39/WVzCa+dZ40Pz+33vL6fi+w1ensHl8/78Xd/93cAvPLKK8kcR48ePZAdY3iPK6EZz4Hn9dWxuUbeqwULFlQ8LjtPj/XVY7zvM2bMKJnEqFGjBrLf8354zuxzEc7fNWrFW+I5XbPMuID0HowbNy7533V0jm+++WbJePr6+iouVGTYiIgOQle1naW7u3sAWtt92olqbJE35oGBgZKDwjl6TnfFBQsWJLug33F3LGJ3bgXu6F5fRunv70/mWISUNFwI5+f/CxYsKFnD3t7ekjn6Pddy4cKFZecIpbYixhlKj6G0kZXMXCtf33vvvZJjFy1aFBk2IqLTUVWHHekoYncMz6HeIRYtWpToXyNN0gjHU4lFR9qYG0E4nzwpIU8/DRkv+90idNYrr7wSgH333ReA5557DoBDDz0UgGeeeQZIWTT7HIXSgCwc2lxCRIaNiOggVGXY0Eq7OCPUbbSqZt9rBWPGjAFg5ZVXBuD5559v+dzhsZXO9bewhnkMm2XW0IIbWuUbwTbbbAPAwQcfXPK+0tlbb71Vcm7XXj119OjRyfPlq8xay4ofGTYiooNQlWEX511ZhAykL6+euYfWyN122w2Am266CYDZs2cDMGvWLP7+7/8egF/+8pcAfP7zny9k/I2i0g6e5+8eboS+3aWXXrrq90Kmzb6qR4aW/kbwkY98BIDf/e53Je/7zLjusqbXnDNnTsn358+fX+aPrhcN/WArLfZIWdxmUcT499hjDwB+9rOfAakBQUf52LFj+eQnPwnAAw880PL1GkGeuJidt58tscQSJd+ZN29e2XeLgg/zRz/6UQA+85nPAPDEE08k7o9XX30VgD/+8Y9AuVgr8lSD7Pv+QOr9oXpPPvjBDwJw8sknc/jhh5eM3R/mG2+8AcAyyyxT8up4+/r6gPR+VhpDPQEtEEXiiIiOQl1GJ1HETus5t99+ewCOP/541lhjDSDdifbbbz8AXnjhhZavV+94mpmbO+W7775b8n+I/ffff8iZNUS1+Tlu3Q4GjeRB5lDM32abbXj22WcB2GCDDQBYaaWVANhpp50A2HHHHYGUxUOxNQuZ6NRTTwVShnV89c6tkjunFhzP+PHjAZg8eTIAq666avKd999/H0hF46uvvhqAJ598suTz0KBUjd3DQIo8RIaNiOggDFloojvX97//fWCQWX0/1DleeuklAA455BAA/vCHPwC1ncr1XD8M+SpijksttRSQSgTqPWLppZdOpIehQDb8sh1r+K//+q8A/PCHPwQG5x+yn2u15JJLlhybJ9F4/JtvvpkEHtx9991AechhmMCRF16aDcqv18ijC+app54CYM0110w+e+yxx4D0uVSq8NyyoxKKtgzHr1snC8eoS0gJ5N13342hiRERnY6qDNvV1dX0tuzOsfrqqwOpO2PChAklny9cuJCZM2cCsOyyy5Z8JmPpArnvvvuaHU5bGdad9O233wZS90M2KH8orelFM6zMYaDAJZdcAlCSFCGjqs+r+11zzTUAzJ07F0gt5waO/N///R+Qsk81KSqTLldxDauh1vx9PmR1rfoeN23aND72sY8B8M4771Q9l+OULZ1TpTRM74ff9f/nnnsuMmxERKejbcH/H/rQhwC46KKLANh4442BdCfTkrbHHnskybs/+MEPgDT0a/nllwdIdrZWGLadDJd3blllOH3VrVxbnVE97jvf+Q6QMqvo7+9PmPSoo44CaIvOXiv4X1RKr6uFDTfcEICtttqq5P2//OUvAGy33XY1mVV4PfXykHHnzp2bjE2d2e8qpeUhMmxERAehbQx75plnAqn/zV1G1tl7772BUtY0Ukg2Vp7/05/+1K5hFgItob6K8847bziGUxhcsxVXXBFIExdCnHLKKZx99tlAexPl86SFetLq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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1500, D: 1.206, G:0.7966\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOwAAADnCAYAAAAdFLrXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2dZ4AURd6Hnx2WRQyoeIKIOaAiZj3M2fMUxYg5nOnM4VQUwwEGjKfimXPChAmzmDHnjDmeoAhmOIRl2X0/7P26emqmw/T0hN63ni8DOzPdVd099a9/bmhra8PhcGSDXK0H4HA44uN+sA5HhnA/WIcjQ7gfrMORIdwP1uHIEI1hb3bq1KkNoLW1tWIDaGhoIC1LdUNDQ+DfmpqaAPjjjz/yPjT33HO3AcycOROA2bNnRx7THm/Q+P3ftT+j9+zjNza235JOnTrl/V3jmj17tncsfbdz5855r7///rt30EUXXbQNYOrUqQC0tLTkfbe1tdW7v3pP54ozr6j5aR46R9CzpM/5nwe95nLtcmW++eYDYMqUKXkDyOVybWHjtT4LmGvlv65J0TH1KoLucVtbW8F1sMc1bdq0wouMk7AOR6ZoCFuVSlm56h2fRMlbuRobG/N2EVmcq73Cz5o1y5vjXHPNlbeDELoebW1tBRKt3q6BxjrnnHMChdKnoaGh5AH7558WYRI17ne102hubnYS1uHIOqE6bL2ttJXAXhXtlTcL10C7g2K6pSSr/Rn/vOp9rhrXjBkzSvqef65JpF6plHJM2w6h/0fZi5yEdTgyRKiErcQ+v1ZEzcFe8cIsvPVKsXHG0c2j5lcN6RSHcs5bzTFX8lxOwjocGSJUwnYkiul3UHvrsD0u+eHkN542bVrsYwTN0U8pFstKXpM55pgDgLnmmguAn376KfI78lH/fya1K5D0Jjc2NnoO+0oSNK6grXAahhi/qV4/RDn/t99+ewA233xzAP773/8CsMUWWwDwySefAPCXv/wFgObm5sjzFXugk4w/bmBIErp06QLAZ599BsDcc88NwKWXXgrAXXfdxbBhwwBYYIEFABg4cCBQenBDpRdhO1AiSYBRqdfabYkdjgwRK3BCFPtsUskqJ/gBBxzA1VdfDRQ6920kpdZYYw0ADj74YMCE3Q0ePDjyGG1tbUUDJ4IkapJVWs7vsWPHAu0hf9rarrrqqgC88847ANx8880A9O7dGzCSZtasWQAsscQSAPzwww+R49E2eubMmd4ckwQVpIkk6COPPALAeuutB4Rv4zXHd999F4BNN90UgOnTpwMwY8aMkgInygl/1db9nXfeYdlllwUKJev3338PQP/+/QH49ttvE50LggN8hJOwDkeGiKXD2kHYem1tbfVWhLj6haTA008/DcCECRO46aabgODwua5duwJw2GGHAXg6jgwW0h1+/fVXhg8fnvc3+1hBc0tD39F1ufPOOwHYeOONvWNL6mqOgwcPBuDhhx/OG99pp50GGP1t3333BWDkyJF53w87fy3RPC6++GIADj30UMDsOhT8cMsttwCw2GKLAca4Nnz4cD788EMgOKGgVEq5tzrHiSeeCMApp5wCtO8I7eurMev4eqa1A/z9998TjTeM2t9hh8MRm1gS1l7Z/K6QuJYxWTBPPfVUwOhybW1t/qDuvO9If9hzzz0BOPLII/PenzJlCgAjRowA4Prrr08sKW1rcRL69OkDwAYbbACYFXbChAnermDMmDF55xNavSdNmgTA/PPPDxirqnRaPxqrvmun5MUhrQARWbe1Y5C9QeOWveGaa65JfI5KWn31DOqZ+vHHHwHo0aMHAH/88Ufgd3fffXfA2CMuu+wyAPbee++SxxH1/DkJ63BkiER+2Dh6n1YK6ZmSggcddBBg/Iq33norv/32W9HjSi/Wsbp16wa066oAO+20EwBvvvmm970gq3Xc1dmf2F0qsojK16pdxciRI7nvvvuKfkeSSDpq3759AbxrcsUVVwSOx55rlIW82Hf930/KE0884fmTNc5DDjkEgOuuuw6gKr72cnj99dcBE8Cx+OKLx/7us88+C5jruPLKKycehwv+dzg6ECVJ2FIkqyy7yyyzDAA777xz3udkJbzxxhsD9QPpPx9//HHeMaXryk9XTnmPNKN6Jk+eDBjJqmOdfvrpgd/ZbrvtANhvv/0AM+fjjjsOiBeyJ0oJOywn/FDflc62+eabe+PWPSrnnlQT7doWWWQRANZdd92SjyE/rLwDss/4vSlp4SSsw5EhUk9gl1VTFjJZhWVtmzhxIgDnnHMOYGJoi6EVStJZ+p7ibOPE10aRpoSVhTeOpblnz54A3HbbbYCRrPvvvz8A9957b+R4yokTLmeestbvscceQLsFVVbWrKHo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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Iter: 1750, D: 1.369, G:0.7725\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "D_DC = build_dc_classifier().type(dtype) \n", "D_DC.apply(initialize_weights)\n", "G_DC = build_dc_generator().type(dtype)\n", "G_DC.apply(initialize_weights)\n", "\n", "D_DC_solver = get_optimizer(D_DC)\n", "G_DC_solver = get_optimizer(G_DC)\n", "\n", "run_a_gan(D_DC, G_DC, D_DC_solver, G_DC_solver, discriminator_loss, generator_loss, num_epochs=5)" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## INLINE QUESTION 1\n", "\n", "We will look at an example to see why alternating minimization of the same objective (like in a GAN) can be tricky business.\n", "\n", "Consider $f(x,y)=xy$. What does $\\min_x\\max_y f(x,y)$ evaluate to? (Hint: minmax tries to minimize the maximum value achievable.)\n", "\n", "Now try to evaluate this function numerically for 6 steps, starting at the point $(1,1)$, \n", "by using alternating gradient (first updating y, then updating x using that updated y) with step size $1$. **Here step size is the learning_rate, and steps will be learning_rate * gradient.**\n", "You'll find that writing out the update step in terms of $x_t,y_t,x_{t+1},y_{t+1}$ will be useful.\n", "\n", "Breifly explain what $\\min_x\\max_y f(x,y)$ evaluates to and record the six pairs of explicit values for $(x_t,y_t)$ in the table below.\n", "\n", "### Your answer:\n", "\n", " \n", " $y_0$ | $y_1$ | $y_2$ | $y_3$ | $y_4$ | $y_5$ | $y_6$ \n", " ----- | ----- | ----- | ----- | ----- | ----- | ----- \n", " 1 | 2 | 1 | -1 | -2 | -1 | 1 \n", " $x_0$ | $x_1$ | $x_2$ | $x_3$ | $x_4$ | $x_5$ | $x_6$ \n", " 1 | -1 | -2 | -1 | 1 | 2 | 1 \n", " \n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## INLINE QUESTION 2\n", "Using this method, will we ever reach the optimal value? Why or why not?\n", "\n", "### Your answer: \n" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## INLINE QUESTION 3\n", "If the generator loss decreases during training while the discriminator loss stays at a constant high value from the start, is this a good sign? Why or why not? A qualitative answer is sufficient.\n", "\n", "### Your answer: \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "tags": [ "pdf-inline" ] }, "outputs": [], "source": [] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment3/Generative_Adversarial_Networks_TF.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Generative Adversarial Networks (GANs)\n", "So far in CS231N, all the applications of neural networks that we have explored have been **discriminative models** that take an input and are trained to produce a labeled output. This has ranged from straightforward classification of image categories to sentence generation (which was still phrased as a classification problem, our labels were in vocabulary space and we\u2019d learned a recurrence to capture multi-word labels). In this notebook, we will expand our repetoire, and build **generative models** using neural networks. Specifically, we will learn how to build models which generate novel images that resemble a set of training images." ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "### What is a GAN?\n", "\n", "In 2014, [Goodfellow et al.](https://arxiv.org/abs/1406.2661) presented a method for training generative models called Generative Adversarial Networks (GANs for short). In a GAN, we build two different neural networks. Our first network is a traditional classification network, called the **discriminator**. We will train the discriminator to take images, and classify them as being real (belonging to the training set) or fake (not present in the training set). Our other network, called the **generator**, will take random noise as input and transform it using a neural network to produce images. The goal of the generator is to fool the discriminator into thinking the images it produced are real.\n", "\n", "We can think of this back and forth process of the generator ($G$) trying to fool the discriminator ($D$), and the discriminator trying to correctly classify real vs. fake as a minimax game:\n", "$$\\underset{G}{\\text{minimize}}\\; \\underset{D}{\\text{maximize}}\\; \\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\log D(x)\\right] + \\mathbb{E}_{z \\sim p(z)}\\left[\\log \\left(1-D(G(z))\\right)\\right]$$\n", "where $x \\sim p_\\text{data}$ are samples from the input data, $z \\sim p(z)$ are the random noise samples, $G(z)$ are the generated images using the neural network generator $G$, and $D$ is the output of the discriminator, specifying the probability of an input being real. In [Goodfellow et al.](https://arxiv.org/abs/1406.2661), they analyze this minimax game and show how it relates to minimizing the Jensen-Shannon divergence between the training data distribution and the generated samples from $G$.\n", "\n", "To optimize this minimax game, we will aternate between taking gradient *descent* steps on the objective for $G$, and gradient *ascent* steps on the objective for $D$:\n", "1. update the **generator** ($G$) to minimize the probability of the __discriminator making the correct choice__. \n", "2. update the **discriminator** ($D$) to maximize the probability of the __discriminator making the correct choice__.\n", "\n", "While these updates are useful for analysis, they do not perform well in practice. Instead, we will use a different objective when we update the generator: maximize the probability of the **discriminator making the incorrect choice**. This small change helps to allevaiate problems with the generator gradient vanishing when the discriminator is confident. This is the standard update used in most GAN papers, and was used in the original paper from [Goodfellow et al.](https://arxiv.org/abs/1406.2661). \n", "\n", "In this assignment, we will alternate the following updates:\n", "1. Update the generator ($G$) to maximize the probability of the discriminator making the incorrect choice on generated data:\n", "$$\\underset{G}{\\text{maximize}}\\; \\mathbb{E}_{z \\sim p(z)}\\left[\\log D(G(z))\\right]$$\n", "2. Update the discriminator ($D$), to maximize the probability of the discriminator making the correct choice on real and generated data:\n", "$$\\underset{D}{\\text{maximize}}\\; \\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\log D(x)\\right] + \\mathbb{E}_{z \\sim p(z)}\\left[\\log \\left(1-D(G(z))\\right)\\right]$$\n", "\n", "### What else is there?\n", "Since 2014, GANs have exploded into a huge research area, with massive [workshops](https://sites.google.com/site/nips2016adversarial/), and [hundreds of new papers](https://github.com/hindupuravinash/the-gan-zoo). Compared to other approaches for generative models, they often produce the highest quality samples but are some of the most difficult and finicky models to train (see [this github repo](https://github.com/soumith/ganhacks) that contains a set of 17 hacks that are useful for getting models working). Improving the stabiilty and robustness of GAN training is an open research question, with new papers coming out every day! For a more recent tutorial on GANs, see [here](https://arxiv.org/abs/1701.00160). There is also some even more recent exciting work that changes the objective function to Wasserstein distance and yields much more stable results across model architectures: [WGAN](https://arxiv.org/abs/1701.07875), [WGAN-GP](https://arxiv.org/abs/1704.00028).\n", "\n", "\n", "GANs are not the only way to train a generative model! For other approaches to generative modeling check out the [deep generative model chapter](http://www.deeplearningbook.org/contents/generative_models.html) of the Deep Learning [book](http://www.deeplearningbook.org). Another popular way of training neural networks as generative models is Variational Autoencoders (co-discovered [here](https://arxiv.org/abs/1312.6114) and [here](https://arxiv.org/abs/1401.4082)). Variational autoencoders combine neural networks with variational inference to train deep generative models. These models tend to be far more stable and easier to train but currently don't produce samples that are as pretty as GANs.\n", "\n", "Example pictures of what you should expect (yours might look slightly different):\n", "\n", "![caption](gan_outputs_tf.png)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import os\n", "\n", "import matplotlib.pyplot as plt\n", "import matplotlib.gridspec as gridspec\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# A bunch of utility functions\n", "\n", "def show_images(images):\n", " images = np.reshape(images, [images.shape[0], -1]) # images reshape to (batch_size, D)\n", " sqrtn = int(np.ceil(np.sqrt(images.shape[0])))\n", " sqrtimg = int(np.ceil(np.sqrt(images.shape[1])))\n", "\n", " fig = plt.figure(figsize=(sqrtn, sqrtn))\n", " gs = gridspec.GridSpec(sqrtn, sqrtn)\n", " gs.update(wspace=0.05, hspace=0.05)\n", "\n", " for i, img in enumerate(images):\n", " ax = plt.subplot(gs[i])\n", " plt.axis('off')\n", " ax.set_xticklabels([])\n", " ax.set_yticklabels([])\n", " ax.set_aspect('equal')\n", " plt.imshow(img.reshape([sqrtimg,sqrtimg]))\n", " return\n", "\n", "def preprocess_img(x):\n", " return 2 * x - 1.0\n", "\n", "def deprocess_img(x):\n", " return (x + 1.0) / 2.0\n", "\n", "def rel_error(x,y):\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))\n", "\n", "def count_params(model):\n", " \"\"\"Count the number of parameters in the current TensorFlow graph \"\"\"\n", " param_count = np.sum([np.prod(p.shape) for p in model.weights])\n", " return param_count\n", "\n", "answers = np.load('gan-checks-tf.npz')\n", "\n", "NOISE_DIM = 96" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "## Dataset\n", " GANs are notoriously finicky with hyperparameters, and also require many training epochs. In order to make this assignment approachable without a GPU, we will be working on the MNIST dataset, which is 60,000 training and 10,000 test images. Each picture contains a centered image of white digit on black background (0 through 9). This was one of the first datasets used to train convolutional neural networks and it is fairly easy -- a standard CNN model can easily exceed 99% accuracy. \n", " \n", "\n", "**Heads-up**: Our MNIST wrapper returns images as vectors. That is, they're size (batch, 784). If you want to treat them as images, we have to resize them to (batch,28,28) or (batch,28,28,1). They are also type np.float32 and bounded [0,1]. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "class MNIST(object):\n", " def __init__(self, batch_size, shuffle=False):\n", " \"\"\"\n", " Construct an iterator object over the MNIST data\n", " \n", " Inputs:\n", " - batch_size: Integer giving number of elements per minibatch\n", " - shuffle: (optional) Boolean, whether to shuffle the data on each epoch\n", " \"\"\"\n", " train, _ = tf.keras.datasets.mnist.load_data()\n", " X, y = train\n", " X = X.astype(np.float32)/255\n", " X = X.reshape((X.shape[0], -1))\n", " self.X, self.y = X, y\n", " self.batch_size, self.shuffle = batch_size, shuffle\n", "\n", " def __iter__(self):\n", " N, B = self.X.shape[0], self.batch_size\n", " idxs = np.arange(N)\n", " if self.shuffle:\n", " np.random.shuffle(idxs)\n", " return iter((self.X[i:i+B], self.y[i:i+B]) for i in range(0, N, B)) " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# show a batch\n", "mnist = MNIST(batch_size=16) \n", "show_images(mnist.X[:16])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LeakyReLU\n", "In the cell below, you should implement a LeakyReLU. See the [class notes](http://cs231n.github.io/neural-networks-1/) (where alpha is small number) or equation (3) in [this paper](http://ai.stanford.edu/~amaas/papers/relu_hybrid_icml2013_final.pdf). LeakyReLUs keep ReLU units from dying and are often used in GAN methods (as are maxout units, however those increase model size and therefore are not used in this notebook).\n", "\n", "HINT: You should be able to use `tf.maximum`" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def leaky_relu(x, alpha=0.01):\n", " \"\"\"Compute the leaky ReLU activation function.\n", " \n", " Inputs:\n", " - x: TensorFlow Tensor with arbitrary shape\n", " - alpha: leak parameter for leaky ReLU\n", " \n", " Returns:\n", " TensorFlow Tensor with the same shape as x\n", " \"\"\"\n", " # TODO: implement leaky ReLU\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test your leaky ReLU implementation. You should get errors < 1e-10" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_leaky_relu(x, y_true):\n", " y = leaky_relu(tf.constant(x))\n", " print('Maximum error: %g'%rel_error(y_true, y))\n", "\n", "test_leaky_relu(answers['lrelu_x'], answers['lrelu_y'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Random Noise\n", "Generate a TensorFlow `Tensor` containing uniform noise from -1 to 1 with shape `[batch_size, dim]`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def sample_noise(batch_size, dim):\n", " \"\"\"Generate random uniform noise from -1 to 1.\n", " \n", " Inputs:\n", " - batch_size: integer giving the batch size of noise to generate\n", " - dim: integer giving the dimension of the noise to generate\n", " \n", " Returns:\n", " TensorFlow Tensor containing uniform noise in [-1, 1] with shape [batch_size, dim]\n", " \"\"\"\n", " # TODO: sample and return noise\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make sure noise is the correct shape and type:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_sample_noise():\n", " batch_size = 3\n", " dim = 4\n", " z = sample_noise(batch_size, dim)\n", " # Check z has the correct shape\n", " assert z.get_shape().as_list() == [batch_size, dim]\n", " # Make sure z is a Tensor and not a numpy array\n", " assert isinstance(z, tf.Tensor)\n", " # Check that we get different noise for different evaluations\n", " z1 = sample_noise(batch_size, dim)\n", " z2 = sample_noise(batch_size, dim)\n", " assert not np.array_equal(z1, z2)\n", " # Check that we get the correct range\n", " assert np.all(z1 >= -1.0) and np.all(z1 <= 1.0)\n", " print(\"All tests passed!\")\n", " \n", "test_sample_noise()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Discriminator\n", "Our first step is to build a discriminator. **Hint:** You should use the layers in `tf.keras.layers` to build the model.\n", "All fully connected layers should include bias terms. For initialization, just use the default initializer used by the `tf.keras.layers` functions.\n", "\n", "Architecture:\n", " * Fully connected layer with input size 784 and output size 256\n", " * LeakyReLU with alpha 0.01\n", " * Fully connected layer with output size 256\n", " * LeakyReLU with alpha 0.01\n", " * Fully connected layer with output size 1 \n", " \n", "The output of the discriminator should thus have shape `[batch_size, 1]`, and contain real numbers corresponding to the scores that each of the `batch_size` inputs is a real image." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def discriminator():\n", " \"\"\"Compute discriminator score for a batch of input images.\n", " \n", " Inputs:\n", " - x: TensorFlow Tensor of flattened input images, shape [batch_size, 784]\n", " \n", " Returns:\n", " TensorFlow Tensor with shape [batch_size, 1], containing the score \n", " for an image being real for each input image.\n", " \"\"\"\n", " model = tf.keras.models.Sequential([\n", " # TODO: implement architecture\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ])\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test to make sure the number of parameters in the discriminator is correct:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_discriminator(true_count=267009):\n", " model = discriminator()\n", " cur_count = count_params(model)\n", " if cur_count != true_count:\n", " print('Incorrect number of parameters in discriminator. {0} instead of {1}. Check your achitecture.'.format(cur_count,true_count))\n", " else:\n", " print('Correct number of parameters in discriminator.')\n", " \n", "test_discriminator()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generator\n", "Now to build a generator. You should use the layers in `tf.keras.layers` to construct the model. All fully connected layers should include bias terms. Note that you can use the tf.nn module to access activation functions. Once again, use the default initializers for parameters.\n", "\n", "Architecture:\n", " * Fully connected layer with inupt size tf.shape(z)[1] (the number of noise dimensions) and output size 1024\n", " * `ReLU`\n", " * Fully connected layer with output size 1024 \n", " * `ReLU`\n", " * Fully connected layer with output size 784\n", " * `TanH` (To restrict every element of the output to be in the range [-1,1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def generator(noise_dim=NOISE_DIM):\n", " \"\"\"Generate images from a random noise vector.\n", " \n", " Inputs:\n", " - z: TensorFlow Tensor of random noise with shape [batch_size, noise_dim]\n", " \n", " Returns:\n", " TensorFlow Tensor of generated images, with shape [batch_size, 784].\n", " \"\"\"\n", " model = tf.keras.models.Sequential([\n", " # TODO: implement architecture\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ])\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test to make sure the number of parameters in the generator is correct:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_generator(true_count=1858320):\n", " model = generator(4)\n", " cur_count = count_params(model)\n", " if cur_count != true_count:\n", " print('Incorrect number of parameters in generator. {0} instead of {1}. Check your achitecture.'.format(cur_count,true_count))\n", " else:\n", " print('Correct number of parameters in generator.')\n", " \n", "test_generator()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# GAN Loss\n", "\n", "Compute the generator and discriminator loss. The generator loss is:\n", "$$\\ell_G = -\\mathbb{E}_{z \\sim p(z)}\\left[\\log D(G(z))\\right]$$\n", "and the discriminator loss is:\n", "$$ \\ell_D = -\\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\log D(x)\\right] - \\mathbb{E}_{z \\sim p(z)}\\left[\\log \\left(1-D(G(z))\\right)\\right]$$\n", "Note that these are negated from the equations presented earlier as we will be *minimizing* these losses.\n", "\n", "**HINTS**: Use [tf.ones](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/ones) and [tf.zeros](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/zeros) to generate labels for your discriminator. Use [tf.keras.losses.BinaryCrossentropy](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/losses/BinaryCrossentropy) to help compute your loss function." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def discriminator_loss(logits_real, logits_fake):\n", " \"\"\"\n", " Computes the discriminator loss described above.\n", " \n", " Inputs:\n", " - logits_real: Tensor of shape (N, 1) giving scores for the real data.\n", " - logits_fake: Tensor of shape (N, 1) giving scores for the fake data.\n", " \n", " Returns:\n", " - loss: Tensor containing (scalar) the loss for the discriminator.\n", " \"\"\"\n", " loss = None\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " return loss\n", "\n", "def generator_loss(logits_fake):\n", " \"\"\"\n", " Computes the generator loss described above.\n", "\n", " Inputs:\n", " - logits_fake: PyTorch Tensor of shape (N,) giving scores for the fake data.\n", " \n", " Returns:\n", " - loss: PyTorch Tensor containing the (scalar) loss for the generator.\n", " \"\"\"\n", " loss = None\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " return loss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test your GAN loss. Make sure both the generator and discriminator loss are correct. You should see errors less than 1e-8." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_discriminator_loss(logits_real, logits_fake, d_loss_true):\n", " d_loss = discriminator_loss(tf.constant(logits_real),\n", " tf.constant(logits_fake))\n", " print(\"Maximum error in d_loss: %g\"%rel_error(d_loss_true, d_loss))\n", "\n", "test_discriminator_loss(answers['logits_real'], answers['logits_fake'],\n", " answers['d_loss_true'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_generator_loss(logits_fake, g_loss_true):\n", " g_loss = generator_loss(tf.constant(logits_fake))\n", " print(\"Maximum error in g_loss: %g\"%rel_error(g_loss_true, g_loss))\n", "\n", "test_generator_loss(answers['logits_fake'], answers['g_loss_true'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimizing our loss\n", "Make an `Adam` optimizer with a 1e-3 learning rate, beta1=0.5 to mininize G_loss and D_loss separately. The trick of decreasing beta was shown to be effective in helping GANs converge in the [Improved Techniques for Training GANs](https://arxiv.org/abs/1606.03498) paper. In fact, with our current hyperparameters, if you set beta1 to the Tensorflow default of 0.9, there's a good chance your discriminator loss will go to zero and the generator will fail to learn entirely. In fact, this is a common failure mode in GANs; if your D(x) learns too fast (e.g. loss goes near zero), your G(z) is never able to learn. Often D(x) is trained with SGD with Momentum or RMSProp instead of Adam, but here we'll use Adam for both D(x) and G(z). " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# TODO: create an AdamOptimizer for D_solver and G_solver\n", "def get_solvers(learning_rate=1e-3, beta1=0.5):\n", " \"\"\"Create solvers for GAN training.\n", " \n", " Inputs:\n", " - learning_rate: learning rate to use for both solvers\n", " - beta1: beta1 parameter for both solvers (first moment decay)\n", " \n", " Returns:\n", " - D_solver: instance of tf.optimizers.Adam with correct learning_rate and beta1\n", " - G_solver: instance of tf.optimizers.Adam with correct learning_rate and beta1\n", " \"\"\"\n", " D_solver = None\n", " G_solver = None\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " return D_solver, G_solver" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-ignore" ] }, "source": [ "# Training a GAN!\n", "Well that wasn't so hard, was it? After the first epoch, you should see fuzzy outlines, clear shapes as you approach epoch 3, and decent shapes, about half of which will be sharp and clearly recognizable as we pass epoch 5. In our case, we'll simply train D(x) and G(z) with one batch each every iteration. However, papers often experiment with different schedules of training D(x) and G(z), sometimes doing one for more steps than the other, or even training each one until the loss gets \"good enough\" and then switching to training the other. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "# a giant helper function\n", "def run_a_gan(D, G, D_solver, G_solver, discriminator_loss, generator_loss,\\\n", " show_every=20, print_every=20, batch_size=128, num_epochs=10, noise_size=96):\n", " \"\"\"Train a GAN for a certain number of epochs.\n", " \n", " Inputs:\n", " - D: Discriminator model\n", " - G: Generator model\n", " - D_solver: an Optimizer for Discriminator\n", " - G_solver: an Optimizer for Generator\n", " - generator_loss: Generator loss\n", " - discriminator_loss: Discriminator loss\n", " Returns:\n", " Nothing\n", " \"\"\"\n", " mnist = MNIST(batch_size=batch_size, shuffle=True)\n", " \n", " iter_count = 0\n", " for epoch in range(num_epochs):\n", " for (x, _) in mnist:\n", " with tf.GradientTape() as tape:\n", " real_data = x\n", " logits_real = D(preprocess_img(real_data))\n", "\n", " g_fake_seed = sample_noise(batch_size, noise_size)\n", " fake_images = G(g_fake_seed)\n", " logits_fake = D(tf.reshape(fake_images, [batch_size, 784]))\n", "\n", " d_total_error = discriminator_loss(logits_real, logits_fake)\n", " d_gradients = tape.gradient(d_total_error, D.trainable_variables) \n", " D_solver.apply_gradients(zip(d_gradients, D.trainable_variables))\n", " \n", " with tf.GradientTape() as tape:\n", " g_fake_seed = sample_noise(batch_size, noise_size)\n", " fake_images = G(g_fake_seed)\n", "\n", " gen_logits_fake = D(tf.reshape(fake_images, [batch_size, 784]))\n", " g_error = generator_loss(gen_logits_fake)\n", " g_gradients = tape.gradient(g_error, G.trainable_variables) \n", " G_solver.apply_gradients(zip(g_gradients, G.trainable_variables))\n", "\n", " if (iter_count % show_every == 0):\n", " print('Epoch: {}, Iter: {}, D: {:.4}, G:{:.4}'.format(epoch, iter_count,d_total_error,g_error))\n", " imgs_numpy = fake_images.cpu().numpy()\n", " show_images(imgs_numpy[0:16])\n", " plt.show()\n", " iter_count += 1\n", " \n", " # random noise fed into our generator\n", " z = sample_noise(batch_size, noise_size)\n", " # generated images\n", " G_sample = G(z)\n", " print('Final images')\n", " show_images(G_sample[:16])\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Train your GAN! This should take about 10 minutes on a CPU, or about 2 minutes on GPU." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Make the discriminator\n", "D = discriminator()\n", "\n", "# Make the generator\n", "G = generator()\n", "\n", "# Use the function you wrote earlier to get optimizers for the Discriminator and the Generator\n", "D_solver, G_solver = get_solvers()\n", "\n", "# Run it!\n", "run_a_gan(D, G, D_solver, G_solver, discriminator_loss, generator_loss)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Least Squares GAN\n", "We'll now look at [Least Squares GAN](https://arxiv.org/abs/1611.04076), a newer, more stable alternative to the original GAN loss function. For this part, all we have to do is change the loss function and retrain the model. We'll implement equation (9) in the paper, with the generator loss:\n", "$$\\ell_G = \\frac{1}{2}\\mathbb{E}_{z \\sim p(z)}\\left[\\left(D(G(z))-1\\right)^2\\right]$$\n", "and the discriminator loss:\n", "$$ \\ell_D = \\frac{1}{2}\\mathbb{E}_{x \\sim p_\\text{data}}\\left[\\left(D(x)-1\\right)^2\\right] + \\frac{1}{2}\\mathbb{E}_{z \\sim p(z)}\\left[ \\left(D(G(z))\\right)^2\\right]$$\n", "\n", "\n", "**HINTS**: Instead of computing the expectation, we will be averaging over elements of the minibatch, so make sure to combine the loss by averaging instead of summing. When plugging in for $D(x)$ and $D(G(z))$ use the direct output from the discriminator (`score_real` and `score_fake`)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def ls_discriminator_loss(scores_real, scores_fake):\n", " \"\"\"\n", " Compute the Least-Squares GAN loss for the discriminator.\n", " \n", " Inputs:\n", " - scores_real: Tensor of shape (N, 1) giving scores for the real data.\n", " - scores_fake: Tensor of shape (N, 1) giving scores for the fake data.\n", " \n", " Outputs:\n", " - loss: A Tensor containing the loss.\n", " \"\"\"\n", " loss = None\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " return loss\n", "\n", "def ls_generator_loss(scores_fake):\n", " \"\"\"\n", " Computes the Least-Squares GAN loss for the generator.\n", " \n", " Inputs:\n", " - scores_fake: Tensor of shape (N, 1) giving scores for the fake data.\n", " \n", " Outputs:\n", " - loss: A Tensor containing the loss.\n", " \"\"\"\n", " loss = None\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " return loss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test your LSGAN loss. You should see errors less than 1e-8." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def test_lsgan_loss(score_real, score_fake, d_loss_true, g_loss_true):\n", " \n", " d_loss = ls_discriminator_loss(tf.constant(score_real), tf.constant(score_fake))\n", " g_loss = ls_generator_loss(tf.constant(score_fake))\n", " print(\"Maximum error in d_loss: %g\"%rel_error(d_loss_true, d_loss))\n", " print(\"Maximum error in g_loss: %g\"%rel_error(g_loss_true, g_loss))\n", "\n", "test_lsgan_loss(answers['logits_real'], answers['logits_fake'],\n", " answers['d_loss_lsgan_true'], answers['g_loss_lsgan_true'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create new training steps so we instead minimize the LSGAN loss:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Make the discriminator\n", "D = discriminator()\n", "\n", "# Make the generator\n", "G = generator()\n", "\n", "# Use the function you wrote earlier to get optimizers for the Discriminator and the Generator\n", "D_solver, G_solver = get_solvers()\n", "\n", "# Run it!\n", "run_a_gan(D, G, D_solver, G_solver, ls_discriminator_loss, ls_generator_loss)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Deep Convolutional GANs\n", "In the first part of the notebook, we implemented an almost direct copy of the original GAN network from Ian Goodfellow. However, this network architecture allows no real spatial reasoning. It is unable to reason about things like \"sharp edges\" in general because it lacks any convolutional layers. Thus, in this section, we will implement some of the ideas from [DCGAN](https://arxiv.org/abs/1511.06434), where we use convolutional networks as our discriminators and generators.\n", "\n", "#### Discriminator\n", "We will use a discriminator inspired by the TensorFlow MNIST classification [tutorial](https://www.tensorflow.org/get_started/mnist/pros), which is able to get above 99% accuracy on the MNIST dataset fairly quickly. *Be sure to check the dimensions of x and reshape when needed*, fully connected blocks expect [N,D] Tensors while conv2d blocks expect [N,H,W,C] Tensors. Please use `tf.keras.layers` to define the following architecture:\n", "\n", "Architecture:\n", "* Conv2D: 32 Filters, 5x5, Stride 1, padding 0\n", "* Leaky ReLU(alpha=0.01)\n", "* Max Pool 2x2, Stride 2\n", "* Conv2D: 64 Filters, 5x5, Stride 1, padding 0\n", "* Leaky ReLU(alpha=0.01)\n", "* Max Pool 2x2, Stride 2\n", "* Flatten\n", "* Fully Connected with output size 4 x 4 x 64\n", "* Leaky ReLU(alpha=0.01)\n", "* Fully Connected with output size 1\n", "\n", "Once again, please use biases for all convolutional and fully connected layers, and use the default parameter initializers. Note that a padding of 0 can be accomplished with the 'VALID' padding option." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def discriminator():\n", " \"\"\"Compute discriminator score for a batch of input images.\n", " \n", " Inputs:\n", " - x: TensorFlow Tensor of flattened input images, shape [batch_size, 784]\n", " \n", " Returns:\n", " TensorFlow Tensor with shape [batch_size, 1], containing the score \n", " for an image being real for each input image.\n", " \"\"\"\n", " model = tf.keras.models.Sequential([\n", " # TODO: implement architecture\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " ])\n", " return model\n", "\n", "model = discriminator()\n", "test_discriminator(1102721)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Generator\n", "For the generator, we will copy the architecture exactly from the [InfoGAN paper](https://arxiv.org/pdf/1606.03657.pdf). See Appendix C.1 MNIST. Please use `tf.keras.layers` for your implementation. You might find the documentation for [tf.keras.layers.Conv2DTranspose](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/layers/Conv2DTranspose) useful. The architecture is as follows.\n", "\n", "Architecture:\n", "* Fully connected with output size 1024 \n", "* `ReLU`\n", "* BatchNorm\n", "* Fully connected with output size 7 x 7 x 128 \n", "* `ReLU`\n", "* BatchNorm\n", "* Resize into Image Tensor of size 7, 7, 128\n", "* Conv2D^T (transpose): 64 filters of 4x4, stride 2\n", "* `ReLU`\n", "* BatchNorm\n", "* Conv2d^T (transpose): 1 filter of 4x4, stride 2\n", "* `TanH`\n", "\n", "Once again, use biases for the fully connected and transpose convolutional layers. Please use the default initializers for your parameters. For padding, choose the 'same' option for transpose convolutions. For Batch Normalization, assume we are always in 'training' mode." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def generator(noise_dim=NOISE_DIM):\n", " \"\"\"Generate images from a random noise vector.\n", " \n", " Inputs:\n", " - z: TensorFlow Tensor of random noise with shape [batch_size, noise_dim]\n", " \n", " Returns:\n", " TensorFlow Tensor of generated images, with shape [batch_size, 784].\n", " \"\"\"\n", " model = tf.keras.models.Sequential()\n", " # TODO: implement architecture\n", " # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n\n", " pass\n", "\n # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****\n", " return model\n", "test_generator(6595521)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have to recreate our network since we've changed our functions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train and evaluate a DCGAN\n", "This is the one part of A3 that significantly benefits from using a GPU. It takes 3 minutes on a GPU for the requested five epochs. Or about 50 minutes on a dual core laptop on CPU (feel free to use 3 epochs if you do it on CPU)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Make the discriminator\n", "D = discriminator()\n", "\n", "# Make the generator\n", "G = generator()\n", "\n", "# Use the function you wrote earlier to get optimizers for the Discriminator and the Generator\n", "D_solver, G_solver = get_solvers()\n", "\n", "# Run it!\n", "run_a_gan(D, G, D_solver, G_solver, discriminator_loss, generator_loss, num_epochs=5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## INLINE QUESTION 1\n", "\n", "We will look at an example to see why alternating minimization of the same objective (like in a GAN) can be tricky business.\n", "\n", "Consider $f(x,y)=xy$. What does $\\min_x\\max_y f(x,y)$ evaluate to? (Hint: minmax tries to minimize the maximum value achievable.)\n", "\n", "Now try to evaluate this function numerically for 6 steps, starting at the point $(1,1)$, \n", "by using alternating gradient (first updating y, then updating x using that updated y) with step size $1$. **Here step size is the learning_rate, and steps will be learning_rate * gradient.**\n", "You'll find that writing out the update step in terms of $x_t,y_t,x_{t+1},y_{t+1}$ will be useful.\n", "\n", "Breifly explain what $\\min_x\\max_y f(x,y)$ evaluates to and record the six pairs of explicit values for $(x_t,y_t)$ in the table below.\n", "\n", "### Your answer:\n", " \n", " $y_0$ | $y_1$ | $y_2$ | $y_3$ | $y_4$ | $y_5$ | $y_6$ \n", " ----- | ----- | ----- | ----- | ----- | ----- | ----- \n", " 1 | | | | | | \n", " $x_0$ | $x_1$ | $x_2$ | $x_3$ | $x_4$ | $x_5$ | $x_6$ \n", " 1 | | | | | | \n", " \n" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## INLINE QUESTION 2\n", "Using this method, will we ever reach the optimal value? Why or why not?\n", "\n", "### Your answer: \n" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "pdf-inline" ] }, "source": [ "## INLINE QUESTION 3\n", "If the generator loss decreases during training while the discriminator loss stays at a constant high value from the start, is this a good sign? Why or why not? A qualitative answer is sufficient.\n", "\n", "### Your answer: \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 1 } ================================================ FILE: assignment3/LSTM_Captioning.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": { "tags": [ "pdf-title" ] }, "source": [ "# Image Captioning with LSTMs\n", "In the previous exercise you implemented a vanilla RNN and applied it to image captioning. In this notebook you will implement the LSTM update rule and use it for image captioning." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "pdf-ignore" ] }, "outputs": [], "source": [ "# As usual, a bit of setup\n", "import time, os, json\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "from cs231n.gradient_check import eval_numerical_gradient, eval_numerical_gradient_array\n", "from cs231n.rnn_layers import *\n", "from cs231n.captioning_solver import CaptioningSolver\n", "from cs231n.classifiers.rnn import CaptioningRNN\n", "from cs231n.coco_utils import load_coco_data, sample_coco_minibatch, decode_captions\n", "from cs231n.image_utils import image_from_url\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "plt.rcParams['image.interpolation'] = 'nearest'\n", "plt.rcParams['image.cmap'] = 'gray'\n", "\n", "# for auto-reloading external modules\n", "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "def rel_error(x, y):\n", " \"\"\" returns relative error \"\"\"\n", " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Load MS-COCO data\n", "As in the previous notebook, we will use the Microsoft COCO dataset for captioning." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train_captions (400135, 17) int32\n", "train_image_idxs (400135,) int32\n", "val_captions (195954, 17) int32\n", "val_image_idxs (195954,) int32\n", "train_features (82783, 512) float32\n", "val_features (40504, 512) float32\n", "idx_to_word 1004\n", "word_to_idx 1004\n", "train_urls (82783,) (40504,)