From f71ccaeeecdd48d75ae38e3177856c0e0cba4cd4 Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Fri, 22 Jan 2016 21:05:49 +0800 Subject: [PATCH 01/26] python product example 1 version --- Makefile.am | 4 +- examples/cifar10_py/cifarBin2img.py | 67 + examples/cifar10_py/main.py | 277 + examples/cifar10_py/main_bak.py | 332 + include/singa/neuralnet/input_layer.h | 22 + include/singa/neuralnet/neuralnet.h | 9 + src/neuralnet/neuralnet.cc | 6 + tool/python/examples/datasets/cifar10.py | 10 +- tool/python/singa/driver.i | 59 +- tool/python/singa/driver.py | 281 + tool/python/singa/driver_wrap.cxx | 11403 +++++++++++++++++++-- 11 files changed, 11844 insertions(+), 626 deletions(-) create mode 100644 examples/cifar10_py/cifarBin2img.py create mode 100755 examples/cifar10_py/main.py create mode 100755 examples/cifar10_py/main_bak.py diff --git a/Makefile.am b/Makefile.am index a432dc8f22..57b1e25bdd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -37,8 +37,7 @@ CUDNN_SRCS := src/neuralnet/loss_layer/cudnn_softmaxloss.cc \ src/neuralnet/neuron_layer/cudnn_lrn.cc \ src/neuralnet/neuron_layer/cudnn_convolution.cc -PY_SRCS := tool/python/singa/driver_wrap.cxx \ - src/driver.cc +PY_SRCS := tool/python/singa/driver_wrap.cxx HDFS_SRCS := src/io/hdfsfile.cc \ src/io/hdfsfile_store.cc @@ -63,6 +62,7 @@ SINGA_SRCS := src/driver.cc \ src/neuralnet/input_layer/record.cc \ src/neuralnet/input_layer/deprecated.cc \ src/neuralnet/input_layer/store.cc \ + src/neuralnet/input_layer/dummy.cc \ src/neuralnet/input_layer/rnn_label.cc \ src/neuralnet/output_layer/accuracy.cc \ src/neuralnet/output_layer/argsort.cc \ diff --git a/examples/cifar10_py/cifarBin2img.py b/examples/cifar10_py/cifarBin2img.py new file mode 100644 index 0000000000..eae4f8d068 --- /dev/null +++ b/examples/cifar10_py/cifarBin2img.py @@ -0,0 +1,67 @@ + +import sys, os + +#all the settings + +SINGA_ROOT=os.path.join(os.path.dirname(__file__),'../','../') +sys.path.append(os.path.join(SINGA_ROOT,'tool','python')) +from singa.model import * +from singa.utils import imgtool +from PIL import Image + +label_map=dict() + +def unpickle(file): + import cPickle + fo = open(file, 'rb') + dict = cPickle.load(fo) + fo.close() + return dict + +def test(): + im = Image.open("dog.jpg").convert("RGB") + + byteArray=imgtool.toBin(im,(32,32)) + im2 = imgtool.toImg(byteArray,(32,32)) + + im2.save("dog2.jpg", "JPEG") + + +def getLabelMap(path): + d = unpickle(path) + index=0 + for line in d["label_names"]: + print index,line + label_map[index]=line + index+=1 + return + +def generateImage(input_path,output_path,random): + dict=unpickle(input_path) + data=dict["data"] + labels=dict["labels"] + index=0 + for d in data: + im = imgtool.toImg(data[index],(32,32)) + temp_folder=os.path.join(output_path,label_map[labels[index]]) + try: + os.stat(temp_folder) + except: + os.makedirs(temp_folder) + im.save(os.path.join(temp_folder,random+"_"+str(index)+".jpg"),"JPEG") + index+=1 + #print labels + +getLabelMap("data/batches.meta") +#generateImage("data/data_batch_1", "data/output","1") +#generateImage("data/data_batch_2", "data/output","2") +#generateImage("data/data_batch_3", "data/output","3") +#generateImage("data/data_batch_4", "data/output","4") +#generateImage("data/data_batch_5", "data/output","5") +#generateImage("data/test_batch", "data/output","6") + + + + + + diff --git a/examples/cifar10_py/main.py b/examples/cifar10_py/main.py new file mode 100755 index 0000000000..198f62cfc7 --- /dev/null +++ b/examples/cifar10_py/main.py @@ -0,0 +1,277 @@ +#!/usr/bin/env python +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + + +from PIL import Image +import sys, glob, os, random, shutil, time +from flask import Flask, request, redirect, url_for +#all the settings +current_path_ = os.path.dirname(__file__) + +singa_root_=os.path.abspath(os.path.join(current_path_,'../..')) + +#data prepare settings +input_folder_=os.path.abspath(os.path.join(current_path_,"data/raw")) +output_folder_=os.path.abspath(os.path.join(current_path_,"data/out")) +temp_folder_=os.path.abspath(os.path.join(current_path_,"data/temp")) + +meta_file_name_="meta.txt" +train_bin_file_name_="train.bin" +test_bin_file_name_="test.bin" +validate_bin_file_name_="validate.bin" +mean_bin_file_name_="mean.bin" +label_list_=[(0,"airplane"), + (1,"truck"), + (2,"ship"), + (3,"dog"), + (4,"cat"), + (5,"deer"), + (6,"bird"), + (7,"automobile"), + (8,"horse"), + (9,"frog")] + +#image size +size_=(32,32) + +#final label numbers +total_record_num_=60000 +label_num_=10 + +#data partial +train_rate_=5.0/6 +test_rate_=1.0/6 +validate_rate_=0.0 + +#training settings +model_name_="cifar10-cnn" +workspace_="examples/cifar10_py" +batch_size_=64 +check_point_path_=workspace_+"/checkpoint/step1000-worker0" + + +allowd_extensions_ = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) + +#singa python libs +sys.path.append(os.path.join(singa_root_,'tool','python')) +from singa.driver import NeuralNet,Driver,strVector,layerVector,intVector,floatVector,DummyInputLayer,Layer,floatArray_frompointer +from singa.model import * +from singa.utils import kvstore, imgtool +from pb2.common_pb2 import RecordProto +app = Flask(__name__) + +mean_record_="" +dummy_="" +net_="" +pixel_length_=0 + + +def buildModel(argv): + model = Sequential(model_name_,argv) + + model.add(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) + model.add(MaxPooling2D(pool_size=(3,3), stride=2)) + model.add(Activation('relu')) + model.add(LRN2D(3, alpha=0.00005, beta=0.75)) + + model.add(Convolution2D(32, 5, 1, 2, b_lr=2)) + model.add(Activation('relu')) + model.add(AvgPooling2D(pool_size=(3,3), stride=2)) + model.add(LRN2D(3, alpha=0.00005, beta=0.75)) + + model.add(Convolution2D(64, 5, 1, 2)) + model.add(Activation('relu')) + model.add(AvgPooling2D(pool_size=(3,3), stride=2)) + + #label_num_ should be the same with input data label num + model.add(Dense(label_num_, w_wd=250, b_lr=2, b_wd=0, activation='softmax')) + + sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) + + topo = Cluster(workspace_) + model.compile(loss='categorical_crossentropy', optimizer=sgd, cluster=topo) + + return model + + + +def generate_data_conf( + backend = 'kvfile', + batchsize = 1, + random = 5000, + shape = (3, 32, 32), + std = 127.5, + mean = 127.5 + ): + + # using cifar10 dataset + path_train =os.path.join(output_folder_ ,train_bin_file_name_) + path_test =os.path.join(output_folder_ ,test_bin_file_name_) + path_mean =os.path.join(output_folder_ ,mean_bin_file_name_) + + + store = Store(path=path_train, mean_file=path_mean, backend=backend, + random_skip=random, batchsize=batchsize, + shape=shape) + + data_train = Data(load='recordinput', phase='train', conf=store) + + store = Store(path=path_test, mean_file=path_mean, backend=backend, + batchsize=batchsize, + shape=shape) + + data_test = Data(load='recordinput', phase='test', conf=store) + + return data_train, data_test + + +def train(model): + + X_train, X_test= generate_data_conf(batchsize=batch_size_) + model.fit(X_train, nb_epoch=1000, with_test=True) + result = model.evaluate(X_test, test_steps=100, test_freq=300) + +def test(model): + pass + + +@app.route("/") +def index(): + return "Hello World! This is SINGA DLAAS! Please send post request with image=file to '/predict' " + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1] in allowd_extensions_ + +@app.route('/predict', methods=['POST']) +def predict(): + global pixel_length_,mean_record_,net_,dummy_ + if request.method == 'POST': + file = request.files['image'] + if file and allowed_file(file.filename): + im = Image.open(file) + pixel = floatVector(pixel_length_) + byteArray = imgtool.toBin(im,size_) + for i in range(pixel_length_): + pixel[i]= byteArray[i]-mean_record_.data[i] + + #dummy data Layer + + shape = intVector(3) + shape[0]=3 + shape[1]=size_[0] + shape[2]=size_[1] + dummy_.Feed(1,shape,pixel) + + #checkpoint_paths =getattr(m.jobconf, 'checkpoint_path') + checkpoint_paths = strVector(1) + checkpoint_paths[0]=check_point_path_ + net_.Load(checkpoint_paths) + + print "1" + dummyVector=layerVector(1) + dummyVector[0]=dummy_.ToLayer() + print len(net_.layers()) + for i,layer in enumerate(net_.layers()): + #skip data layer + if i==0: + continue + elif i==1: + layer.ComputeFeature(4,dummyVector) + else: + layer.ComputeFeature(4,net_.srclayers(layer)) + + #get result + lastLayer=net_.layers()[-1] + data = lastLayer.data(dummy_.ToLayer()) + prop =floatArray_frompointer(data.mutable_cpu_data()) + result=[] + for i in range(label_num_): + result.append((i,prop[i])) + + result.sort(key=lambda tup: tup[1], reverse=True) + + label_map=dict() + for item in label_list_: + label_map[item[0]]=item[1] + response="" + for r in result: + response+=str(label_map[r[0]])+str(r[1]) + + return response + return "error" + +def product(model): + global pixel_length_,mean_record_,net_,dummy_ + #fake data layer + X_train, X_test= generate_data_conf() + + model.layers.insert(0,X_test) + model.build() + #register layers + d = Driver() + d.Init(sys.argv) + net_ = NeuralNet.CreateForTest(model.jobconf.neuralnet.SerializeToString()) + + + pixel_length_ = 3*size_[0]*size_[1] + + #minus mean and feed data + key,mean_str = kvstore.FileStore().open(os.path.join(output_folder_,mean_bin_file_name_),"read").read() + mean_record_ = RecordProto() + mean_record_.ParseFromString(mean_str) + assert len(mean_record_.data)==pixel_length_ + + dummy_ = DummyInputLayer() + + + app.debug = True + app.run() + + +if __name__=='__main__': + + print "please use -transfer -data -test -product to specify different task" + + if "-transfer" in sys.argv: + total_record_num_=imgtool.transfer_img(input_folder_,temp_folder_,size_) + if "-data" in sys.argv: + label_list_=imgtool.generate_kvrecord_data(temp_folder_, + output_folder_, + size_, + train_num=int(total_record_num_*train_rate_), + test_num=int(total_record_num_*test_rate_), + validate_num=int(total_record_num_*validate_rate_), + meta_file_name=meta_file_name_, + train_bin_file_name=train_bin_file_name_, + test_bin_file_name=test_bin_file_name_, + validate_bin_file_name=validate_bin_file_name_, + mean_bin_file_name=mean_bin_file_name_ + ) + label_num_=len(label_list_) + model=buildModel(sys.argv) + if "-train" in sys.argv: + train(model) + elif "-test" in sys.argv: + test(model) + elif "-product" in sys.argv: + product(model) \ No newline at end of file diff --git a/examples/cifar10_py/main_bak.py b/examples/cifar10_py/main_bak.py new file mode 100755 index 0000000000..dee42474b2 --- /dev/null +++ b/examples/cifar10_py/main_bak.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + + +from PIL import Image +import sys, glob, os, random, shutil, time +from flask import Flask, request, redirect, url_for +#all the settings +current_path_ = os.path.dirname(__file__) + +singa_root_=os.path.abspath(os.path.join(current_path_,'../..')) + +#data prepare settings +input_folder_=os.path.abspath(os.path.join(current_path_,"data/raw")) +output_folder_=os.path.abspath(os.path.join(current_path_,"data/out")) +temp_folder_=os.path.abspath(os.path.join(current_path_,"data/temp")) + +meta_file_name_="meta.txt" +train_bin_file_name_="train.bin" +test_bin_file_name_="test.bin" +validate_bin_file_name_="validate.bin" +mean_bin_file_name_="mean.bin" +label_list_=[(0,"airplane"), + (1,"truck"), + (2,"ship"), + (3,"dog"), + (4,"cat"), + (5,"deer"), + (6,"bird"), + (7,"automobile"), + (8,"horse"), + (9,"frog")] + +#image size +size_=(32,32) + +#final label numbers +total_record_num_=60000 +label_num_=10 + +#data partial +train_rate_=5.0/6 +test_rate_=1.0/6 +validate_rate_=0.0 + +#training settings +model_name_="cifar10-cnn" +workspace_="examples/cifar10_py" +batch_size_=64 +check_point_path_=workspace_+"/checkpoint/step1000-worker0" + + +allowd_extensions_ = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) + +#singa python libs +sys.path.append(os.path.join(singa_root_,'tool','python')) +from singa.driver import NeuralNet,Driver,strVector,layerVector,intVector,floatVector,DummyInputLayer,Layer,floatArray_frompointer +from singa.model import * +from singa.utils import kvstore, imgtool +from pb2.common_pb2 import RecordProto +app = Flask(__name__) + +mean_record_="" +dummy_="" +net_="" +pixel_length_=0 + + +def buildModel(argv): + model = Sequential(model_name_,argv) + + model.add(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) + model.add(MaxPooling2D(pool_size=(3,3), stride=2)) + model.add(Activation('relu')) + model.add(LRN2D(3, alpha=0.00005, beta=0.75)) + + model.add(Convolution2D(32, 5, 1, 2, b_lr=2)) + model.add(Activation('relu')) + model.add(AvgPooling2D(pool_size=(3,3), stride=2)) + model.add(LRN2D(3, alpha=0.00005, beta=0.75)) + + model.add(Convolution2D(64, 5, 1, 2)) + model.add(Activation('relu')) + model.add(AvgPooling2D(pool_size=(3,3), stride=2)) + + #label_num_ should be the same with input data label num + model.add(Dense(label_num_, w_wd=250, b_lr=2, b_wd=0, activation='softmax')) + + sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) + + topo = Cluster(workspace_) + model.compile(loss='categorical_crossentropy', optimizer=sgd, cluster=topo) + + return model + + + +def generate_data_conf( + backend = 'kvfile', + batchsize = 64, + random = 5000, + shape = (3, 32, 32), + std = 127.5, + mean = 127.5 + ): + + # using cifar10 dataset + path_train =os.path.join(output_folder_ ,train_bin_file_name_) + path_test =os.path.join(output_folder_ ,test_bin_file_name_) + path_mean =os.path.join(output_folder_ ,mean_bin_file_name_) + + + store = Store(path=path_train, mean_file=path_mean, backend=backend, + random_skip=random, batchsize=batchsize, + shape=shape) + + data_train = Data(load='recordinput', phase='train', conf=store) + + store = Store(path=path_test, mean_file=path_mean, backend=backend, + batchsize=batchsize, + shape=shape) + + data_test = Data(load='recordinput', phase='test', conf=store) + + return data_train, data_test + + +def train(model): + + X_train, X_test= generate_data_conf() + model.fit(X_train, nb_epoch=1000, with_test=True) + result = model.evaluate(X_test, test_steps=100, test_freq=300) + +def test(model): + pass + + +@app.route("/") +def index(): + return "Hello World! This is SINGA DLAAS! Please send post request with image=file to '/predict' " + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1] in allowd_extensions_ + +@app.route('/predict', methods=['POST']) +def predict(): + global pixel_length_,mean_record_,net_,dummy_ + if request.method == 'POST': + file = request.files['image'] + if file and allowed_file(file.filename): + im = Image.open(file) + pixel = floatVector(pixel_length_) + byteArray = imgtool.toBin(im,size_) + for i in range(pixel_length_): + pixel[i]= byteArray[i]-mean_record_.data[i] + + #dummy data Layer + + shape = intVector(3) + shape[0]=3 + shape[1]=size_[0] + shape[2]=size_[1] + dummy_.Feed(1,shape,pixel) + + #checkpoint_paths =getattr(m.jobconf, 'checkpoint_path') + checkpoint_paths = strVector(1) + checkpoint_paths[0]=check_point_path_ + net_.Load(checkpoint_paths) + + print "1" + dummyVector=layerVector(1) + dummyVector[0]=dummy_.ToLayer() + print len(net_.layers()) + for i,layer in enumerate(net_.layers()): + #skip data layer + if i==0: + continue + elif i==1: + try: + layer.ComputeFeature(4,dummyVector) + except: + print "oh" + else: + layer.ComputeFeature(4,net_.srclayers(layer)) + + #get result + lastLayer=net_.layers()[-1] + data = lastLayer.data(dummy_.ToLayer()) + prop =floatArray_frompointer(data.mutable_cpu_data()) + print "2" + result=[] + for i in range(label_num_): + result.append((i,prop[i])) + + result.sort(key=lambda tup: tup[1], reverse=True) + + label_map=dict() + for item in label_list_: + label_map[item[0]]=item[1] + + result="" + for r in result: + result+=str(label_map[r[0]])+str(r[1]) + + return result + return "error" + +def product(model): + #global pixel_length_,mean_record_,net_,dummy_ + #fake data layer + X_train, X_test= generate_data_conf() + + model.layers.insert(0,X_test) + model.build() + #register layers + d = Driver() + d.Init(sys.argv) + net_ = NeuralNet.CreateForTest(model.jobconf.neuralnet.SerializeToString()) + + + pixel_length_ = 3*size_[0]*size_[1] + + #minus mean and feed data + key,mean_str = kvstore.FileStore().open(os.path.join(output_folder_,mean_bin_file_name_),"read").read() + mean_record_ = RecordProto() + mean_record_.ParseFromString(mean_str) + assert len(mean_record_.data)==pixel_length_ + + dummy_ = DummyInputLayer() + + + im = Image.open(os.path.join(current_path_,"data/dog.jpg")).convert("RGB") + pixel = floatVector(pixel_length_) + byteArray = imgtool.toBin(im,size_) + for i in range(pixel_length_): + pixel[i]= byteArray[i]-mean_record_.data[i] + + shape = intVector(3) + shape[0]=3 + shape[1]=size_[0] + shape[2]=size_[1] + dummy_.Feed(1,shape,pixel) + + #checkpoint_paths =getattr(m.jobconf, 'checkpoint_path') + checkpoint_paths = strVector(1) + checkpoint_paths[0]=check_point_path_ + net_.Load(checkpoint_paths) + + dummyVector=layerVector(1) + dummyVector[0]=dummy_.ToLayer() + print len(net_.layers()) + for i,layer in enumerate(net_.layers()): + #skip data layer + if i==0: + continue + elif i==1: + layer.ComputeFeature(4,dummyVector) + else: + layer.ComputeFeature(4,net_.srclayers(layer)) + + #get result + lastLayer=net_.layers()[-1] + data = lastLayer.data(dummy_.ToLayer()) + prop =floatArray_frompointer(data.mutable_cpu_data()) + print "2" + result=[] + for i in range(label_num_): + result.append((i,prop[i])) + + result.sort(key=lambda tup: tup[1], reverse=True) + + label_map=dict() + for item in label_list_: + label_map[item[0]]=item[1] + + result="" + for r in result: + result+=str(label_map[r[0]])+str(r[1]) + print result + + + # app.debug = True + # app.run() + + +if __name__=='__main__': + + print "please use -transfer -data -test -product to specify different task" + + if "-transfer" in sys.argv: + total_record_num_=imgtool.transfer_img(input_folder_,temp_folder_,size_) + if "-data" in sys.argv: + label_list_=imgtool.generate_kvrecord_data(temp_folder_, + output_folder_, + size_, + train_num=int(total_record_num_*train_rate_), + test_num=int(total_record_num_*test_rate_), + validate_num=int(total_record_num_*validate_rate_), + meta_file_name=meta_file_name_, + train_bin_file_name=train_bin_file_name_, + test_bin_file_name=test_bin_file_name_, + validate_bin_file_name=validate_bin_file_name_, + mean_bin_file_name=mean_bin_file_name_ + ) + label_num_=len(label_list_) + model=buildModel(sys.argv) + if "-train" in sys.argv: + train(model) + elif "-test" in sys.argv: + test(model) + elif "-product" in sys.argv: + product(model) \ No newline at end of file diff --git a/include/singa/neuralnet/input_layer.h b/include/singa/neuralnet/input_layer.h index e701eecd46..bab7105424 100644 --- a/include/singa/neuralnet/input_layer.h +++ b/include/singa/neuralnet/input_layer.h @@ -200,6 +200,28 @@ class RNNLabelLayer : public InputLayer { void Setup(const LayerProto& proto, const vector& srclayers); void ComputeFeature(int flag, const vector& srclayers); }; + +/** + * Dummy class for loading data from anywhere. + */ +class DummyInputLayer : virtual public InputLayer { + public: + DummyInputLayer(); + void Setup(const LayerProto& proto, const vector& srclayers) override {}; + void ComputeFeature(int flag, const vector& srclayers) override {}; + + /** + * Feed data to Layer + */ + void Feed(int batchsize, vector shape, vector* data); + + Layer* ToLayer(){ + return this; + } + protected: + int batchsize_ = 1; +}; + /****************Deprecated layers******************/ /** * @deprecated please use the StoreInputLayer. diff --git a/include/singa/neuralnet/neuralnet.h b/include/singa/neuralnet/neuralnet.h index 33ad38cb1c..3c2e251238 100644 --- a/include/singa/neuralnet/neuralnet.h +++ b/include/singa/neuralnet/neuralnet.h @@ -58,6 +58,13 @@ class NeuralNet { static NeuralNet* Create(const NetProto& net_conf, Phase phase, int npartitions); + /** + * Create for python binding, production test mode + * + */ + static NeuralNet* CreateForTest(const string str); + + static const NetProto Unrolling(const NetProto& net_conf); /** * construct the net structure from protocol buffer. @@ -66,6 +73,8 @@ class NeuralNet { */ NeuralNet(NetProto net_conf, int num_partitions); ~NeuralNet(); + + NeuralNet(){} /** * Load net params from checkpoint fiels. * @param path checkpoint files diff --git a/src/neuralnet/neuralnet.cc b/src/neuralnet/neuralnet.cc index b045e0600c..e9a5439a9c 100644 --- a/src/neuralnet/neuralnet.cc +++ b/src/neuralnet/neuralnet.cc @@ -58,6 +58,12 @@ const NetProto NetConfPreprocess(const NetProto& conf) { return proto; } +NeuralNet* NeuralNet::CreateForTest(const string str){ + NetProto net_conf; + net_conf.ParseFromString(str); + return NeuralNet::Create(net_conf,singa::kTest,1); +} + NeuralNet* NeuralNet::Create(const NetProto& net_conf, Phase phase, int npartitions) { const NetProto& full_net_conf = NetConfPreprocess(net_conf); diff --git a/tool/python/examples/datasets/cifar10.py b/tool/python/examples/datasets/cifar10.py index ef5136fb91..280b4fae10 100644 --- a/tool/python/examples/datasets/cifar10.py +++ b/tool/python/examples/datasets/cifar10.py @@ -35,11 +35,11 @@ def load_data( ): # using cifar10 dataset - data_dir = 'examples/cifar10' - path_train = data_dir + '/train_data.bin' - path_test = data_dir + '/test_data.bin' - path_mean = data_dir + '/image_mean.bin' - if workspace == None: workspace = data_dir + data_dir = 'examples/cifar10_py/data/out' + path_train = data_dir + '/train.bin' + path_test = data_dir + '/test.bin' + path_mean = data_dir + '/mean.bin' + if workspace == None: workspace ="examples/cifar10" store = Store(path=path_train, mean_file=path_mean, backend=backend, random_skip=random, batchsize=batchsize, diff --git a/tool/python/singa/driver.i b/tool/python/singa/driver.i index f756d574f4..2bb751ad9f 100644 --- a/tool/python/singa/driver.i +++ b/tool/python/singa/driver.i @@ -25,19 +25,62 @@ %include "std_vector.i" %include "std_string.i" %include "argcargv.i" +%include "carrays.i" +%array_class(float, floatArray); + %apply (int ARGC, char **ARGV) { (int argc, char **argv) } %{ #include "singa/driver.h" +#include "singa/neuralnet/neuralnet.h" +#include "singa/neuralnet/layer.h" +#include "singa/neuralnet/input_layer.h" +#include "singa/utils/blob.h" %} +namespace std { + %template(strVector) vector; + %template(intVector) vector; + %template(floatVector) vector; + %template(layerVector) vector; +} + namespace singa{ -using std::vector; -class Driver{ -public: -void Train(bool resume, const std::string job_conf); -void Init(int argc, char **argv); -void InitLog(char* arg); -void Test(const std::string job_conf); -}; + class Driver{ + public: + void Train(bool resume, const std::string job_conf); + void Init(int argc, char **argv); + void InitLog(char* arg); + void Test(const std::string job_conf); + }; + + class NeuralNet{ + public: + static NeuralNet* CreateForTest(const std::string str); + void Load(const std::vector& paths); + inline const std::vector& layers(); + inline const std::vector& srclayers(const singa::Layer* layer); + }; + + class DummyInputLayer{ + public: + void Feed(int batchsize, std::vector shape, std::vector* data); + singa::Layer* ToLayer(); + }; + + %nodefault Layer; + class Layer{ + public: + virtual void ComputeFeature(int flag, const std::vector& srclayers); + virtual const singa::Blob& data(const singa::Layer* from); + }; + + + template + class Blob{ + public: + inline Dtype* mutable_cpu_data(); + }; + + %template(floatBlob) Blob; } diff --git a/tool/python/singa/driver.py b/tool/python/singa/driver.py index d2039231e5..6fea5a6bc5 100644 --- a/tool/python/singa/driver.py +++ b/tool/python/singa/driver.py @@ -98,6 +98,218 @@ def __iter__(self): return self SwigPyIterator_swigregister = _driver.SwigPyIterator_swigregister SwigPyIterator_swigregister(SwigPyIterator) +class floatArray(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, floatArray, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, floatArray, name) + __repr__ = _swig_repr + def __init__(self, *args): + this = _driver.new_floatArray(*args) + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _driver.delete_floatArray + __del__ = lambda self : None; + def __getitem__(self, *args): return _driver.floatArray___getitem__(self, *args) + def __setitem__(self, *args): return _driver.floatArray___setitem__(self, *args) + def cast(self): return _driver.floatArray_cast(self) + __swig_getmethods__["frompointer"] = lambda x: _driver.floatArray_frompointer + if _newclass:frompointer = staticmethod(_driver.floatArray_frompointer) +floatArray_swigregister = _driver.floatArray_swigregister +floatArray_swigregister(floatArray) + +def floatArray_frompointer(*args): + return _driver.floatArray_frompointer(*args) +floatArray_frompointer = _driver.floatArray_frompointer + +class strVector(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, strVector, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, strVector, name) + __repr__ = _swig_repr + def iterator(self): return _driver.strVector_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _driver.strVector___nonzero__(self) + def __bool__(self): return _driver.strVector___bool__(self) + def __len__(self): return _driver.strVector___len__(self) + def pop(self): return _driver.strVector_pop(self) + def __getslice__(self, *args): return _driver.strVector___getslice__(self, *args) + def __setslice__(self, *args): return _driver.strVector___setslice__(self, *args) + def __delslice__(self, *args): return _driver.strVector___delslice__(self, *args) + def __delitem__(self, *args): return _driver.strVector___delitem__(self, *args) + def __getitem__(self, *args): return _driver.strVector___getitem__(self, *args) + def __setitem__(self, *args): return _driver.strVector___setitem__(self, *args) + def append(self, *args): return _driver.strVector_append(self, *args) + def empty(self): return _driver.strVector_empty(self) + def size(self): return _driver.strVector_size(self) + def clear(self): return _driver.strVector_clear(self) + def swap(self, *args): return _driver.strVector_swap(self, *args) + def get_allocator(self): return _driver.strVector_get_allocator(self) + def begin(self): return _driver.strVector_begin(self) + def end(self): return _driver.strVector_end(self) + def rbegin(self): return _driver.strVector_rbegin(self) + def rend(self): return _driver.strVector_rend(self) + def pop_back(self): return _driver.strVector_pop_back(self) + def erase(self, *args): return _driver.strVector_erase(self, *args) + def __init__(self, *args): + this = _driver.new_strVector(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _driver.strVector_push_back(self, *args) + def front(self): return _driver.strVector_front(self) + def back(self): return _driver.strVector_back(self) + def assign(self, *args): return _driver.strVector_assign(self, *args) + def resize(self, *args): return _driver.strVector_resize(self, *args) + def insert(self, *args): return _driver.strVector_insert(self, *args) + def reserve(self, *args): return _driver.strVector_reserve(self, *args) + def capacity(self): return _driver.strVector_capacity(self) + __swig_destroy__ = _driver.delete_strVector + __del__ = lambda self : None; +strVector_swigregister = _driver.strVector_swigregister +strVector_swigregister(strVector) + +class intVector(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, intVector, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, intVector, name) + __repr__ = _swig_repr + def iterator(self): return _driver.intVector_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _driver.intVector___nonzero__(self) + def __bool__(self): return _driver.intVector___bool__(self) + def __len__(self): return _driver.intVector___len__(self) + def pop(self): return _driver.intVector_pop(self) + def __getslice__(self, *args): return _driver.intVector___getslice__(self, *args) + def __setslice__(self, *args): return _driver.intVector___setslice__(self, *args) + def __delslice__(self, *args): return _driver.intVector___delslice__(self, *args) + def __delitem__(self, *args): return _driver.intVector___delitem__(self, *args) + def __getitem__(self, *args): return _driver.intVector___getitem__(self, *args) + def __setitem__(self, *args): return _driver.intVector___setitem__(self, *args) + def append(self, *args): return _driver.intVector_append(self, *args) + def empty(self): return _driver.intVector_empty(self) + def size(self): return _driver.intVector_size(self) + def clear(self): return _driver.intVector_clear(self) + def swap(self, *args): return _driver.intVector_swap(self, *args) + def get_allocator(self): return _driver.intVector_get_allocator(self) + def begin(self): return _driver.intVector_begin(self) + def end(self): return _driver.intVector_end(self) + def rbegin(self): return _driver.intVector_rbegin(self) + def rend(self): return _driver.intVector_rend(self) + def pop_back(self): return _driver.intVector_pop_back(self) + def erase(self, *args): return _driver.intVector_erase(self, *args) + def __init__(self, *args): + this = _driver.new_intVector(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _driver.intVector_push_back(self, *args) + def front(self): return _driver.intVector_front(self) + def back(self): return _driver.intVector_back(self) + def assign(self, *args): return _driver.intVector_assign(self, *args) + def resize(self, *args): return _driver.intVector_resize(self, *args) + def insert(self, *args): return _driver.intVector_insert(self, *args) + def reserve(self, *args): return _driver.intVector_reserve(self, *args) + def capacity(self): return _driver.intVector_capacity(self) + __swig_destroy__ = _driver.delete_intVector + __del__ = lambda self : None; +intVector_swigregister = _driver.intVector_swigregister +intVector_swigregister(intVector) + +class floatVector(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, floatVector, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, floatVector, name) + __repr__ = _swig_repr + def iterator(self): return _driver.floatVector_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _driver.floatVector___nonzero__(self) + def __bool__(self): return _driver.floatVector___bool__(self) + def __len__(self): return _driver.floatVector___len__(self) + def pop(self): return _driver.floatVector_pop(self) + def __getslice__(self, *args): return _driver.floatVector___getslice__(self, *args) + def __setslice__(self, *args): return _driver.floatVector___setslice__(self, *args) + def __delslice__(self, *args): return _driver.floatVector___delslice__(self, *args) + def __delitem__(self, *args): return _driver.floatVector___delitem__(self, *args) + def __getitem__(self, *args): return _driver.floatVector___getitem__(self, *args) + def __setitem__(self, *args): return _driver.floatVector___setitem__(self, *args) + def append(self, *args): return _driver.floatVector_append(self, *args) + def empty(self): return _driver.floatVector_empty(self) + def size(self): return _driver.floatVector_size(self) + def clear(self): return _driver.floatVector_clear(self) + def swap(self, *args): return _driver.floatVector_swap(self, *args) + def get_allocator(self): return _driver.floatVector_get_allocator(self) + def begin(self): return _driver.floatVector_begin(self) + def end(self): return _driver.floatVector_end(self) + def rbegin(self): return _driver.floatVector_rbegin(self) + def rend(self): return _driver.floatVector_rend(self) + def pop_back(self): return _driver.floatVector_pop_back(self) + def erase(self, *args): return _driver.floatVector_erase(self, *args) + def __init__(self, *args): + this = _driver.new_floatVector(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _driver.floatVector_push_back(self, *args) + def front(self): return _driver.floatVector_front(self) + def back(self): return _driver.floatVector_back(self) + def assign(self, *args): return _driver.floatVector_assign(self, *args) + def resize(self, *args): return _driver.floatVector_resize(self, *args) + def insert(self, *args): return _driver.floatVector_insert(self, *args) + def reserve(self, *args): return _driver.floatVector_reserve(self, *args) + def capacity(self): return _driver.floatVector_capacity(self) + __swig_destroy__ = _driver.delete_floatVector + __del__ = lambda self : None; +floatVector_swigregister = _driver.floatVector_swigregister +floatVector_swigregister(floatVector) + +class layerVector(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, layerVector, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, layerVector, name) + __repr__ = _swig_repr + def iterator(self): return _driver.layerVector_iterator(self) + def __iter__(self): return self.iterator() + def __nonzero__(self): return _driver.layerVector___nonzero__(self) + def __bool__(self): return _driver.layerVector___bool__(self) + def __len__(self): return _driver.layerVector___len__(self) + def pop(self): return _driver.layerVector_pop(self) + def __getslice__(self, *args): return _driver.layerVector___getslice__(self, *args) + def __setslice__(self, *args): return _driver.layerVector___setslice__(self, *args) + def __delslice__(self, *args): return _driver.layerVector___delslice__(self, *args) + def __delitem__(self, *args): return _driver.layerVector___delitem__(self, *args) + def __getitem__(self, *args): return _driver.layerVector___getitem__(self, *args) + def __setitem__(self, *args): return _driver.layerVector___setitem__(self, *args) + def append(self, *args): return _driver.layerVector_append(self, *args) + def empty(self): return _driver.layerVector_empty(self) + def size(self): return _driver.layerVector_size(self) + def clear(self): return _driver.layerVector_clear(self) + def swap(self, *args): return _driver.layerVector_swap(self, *args) + def get_allocator(self): return _driver.layerVector_get_allocator(self) + def begin(self): return _driver.layerVector_begin(self) + def end(self): return _driver.layerVector_end(self) + def rbegin(self): return _driver.layerVector_rbegin(self) + def rend(self): return _driver.layerVector_rend(self) + def pop_back(self): return _driver.layerVector_pop_back(self) + def erase(self, *args): return _driver.layerVector_erase(self, *args) + def __init__(self, *args): + this = _driver.new_layerVector(*args) + try: self.this.append(this) + except: self.this = this + def push_back(self, *args): return _driver.layerVector_push_back(self, *args) + def front(self): return _driver.layerVector_front(self) + def back(self): return _driver.layerVector_back(self) + def assign(self, *args): return _driver.layerVector_assign(self, *args) + def resize(self, *args): return _driver.layerVector_resize(self, *args) + def insert(self, *args): return _driver.layerVector_insert(self, *args) + def reserve(self, *args): return _driver.layerVector_reserve(self, *args) + def capacity(self): return _driver.layerVector_capacity(self) + __swig_destroy__ = _driver.delete_layerVector + __del__ = lambda self : None; +layerVector_swigregister = _driver.layerVector_swigregister +layerVector_swigregister(layerVector) + class Driver(_object): __swig_setmethods__ = {} __setattr__ = lambda self, name, value: _swig_setattr(self, Driver, name, value) @@ -117,6 +329,75 @@ def __init__(self): Driver_swigregister = _driver.Driver_swigregister Driver_swigregister(Driver) +class NeuralNet(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, NeuralNet, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, NeuralNet, name) + __repr__ = _swig_repr + __swig_getmethods__["CreateForTest"] = lambda x: _driver.NeuralNet_CreateForTest + if _newclass:CreateForTest = staticmethod(_driver.NeuralNet_CreateForTest) + def Load(self, *args): return _driver.NeuralNet_Load(self, *args) + def layers(self): return _driver.NeuralNet_layers(self) + def srclayers(self, *args): return _driver.NeuralNet_srclayers(self, *args) + def __init__(self): + this = _driver.new_NeuralNet() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _driver.delete_NeuralNet + __del__ = lambda self : None; +NeuralNet_swigregister = _driver.NeuralNet_swigregister +NeuralNet_swigregister(NeuralNet) + +def NeuralNet_CreateForTest(*args): + return _driver.NeuralNet_CreateForTest(*args) +NeuralNet_CreateForTest = _driver.NeuralNet_CreateForTest + +class DummyInputLayer(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, DummyInputLayer, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, DummyInputLayer, name) + __repr__ = _swig_repr + def Feed(self, *args): return _driver.DummyInputLayer_Feed(self, *args) + def ToLayer(self): return _driver.DummyInputLayer_ToLayer(self) + def __init__(self): + this = _driver.new_DummyInputLayer() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _driver.delete_DummyInputLayer + __del__ = lambda self : None; +DummyInputLayer_swigregister = _driver.DummyInputLayer_swigregister +DummyInputLayer_swigregister(DummyInputLayer) + +class Layer(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, Layer, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, Layer, name) + def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") + __repr__ = _swig_repr + def ComputeFeature(self, *args): return _driver.Layer_ComputeFeature(self, *args) + def data(self, *args): return _driver.Layer_data(self, *args) +Layer_swigregister = _driver.Layer_swigregister +Layer_swigregister(Layer) + +class floatBlob(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, floatBlob, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, floatBlob, name) + __repr__ = _swig_repr + def mutable_cpu_data(self): return _driver.floatBlob_mutable_cpu_data(self) + def __init__(self): + this = _driver.new_floatBlob() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _driver.delete_floatBlob + __del__ = lambda self : None; +floatBlob_swigregister = _driver.floatBlob_swigregister +floatBlob_swigregister(floatBlob) + # This file is compatible with both classic and new-style classes. diff --git a/tool/python/singa/driver_wrap.cxx b/tool/python/singa/driver_wrap.cxx index 40ea5ce6ef..36659b0502 100644 --- a/tool/python/singa/driver_wrap.cxx +++ b/tool/python/singa/driver_wrap.cxx @@ -2937,13 +2937,36 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { /* -------- TYPES TABLE (BEGIN) -------- */ -#define SWIGTYPE_p_char swig_types[0] -#define SWIGTYPE_p_p_char swig_types[1] -#define SWIGTYPE_p_singa__Driver swig_types[2] -#define SWIGTYPE_p_std__invalid_argument swig_types[3] -#define SWIGTYPE_p_swig__SwigPyIterator swig_types[4] -static swig_type_info *swig_types[6]; -static swig_module_info swig_module = {swig_types, 5, 0, 0, 0, 0}; +#define SWIGTYPE_p_allocator_type swig_types[0] +#define SWIGTYPE_p_char swig_types[1] +#define SWIGTYPE_p_const_reference swig_types[2] +#define SWIGTYPE_p_difference_type swig_types[3] +#define SWIGTYPE_p_float swig_types[4] +#define SWIGTYPE_p_floatArray swig_types[5] +#define SWIGTYPE_p_p_PyObject swig_types[6] +#define SWIGTYPE_p_p_char swig_types[7] +#define SWIGTYPE_p_reference swig_types[8] +#define SWIGTYPE_p_singa__BlobT_float_t swig_types[9] +#define SWIGTYPE_p_singa__Driver swig_types[10] +#define SWIGTYPE_p_singa__DummyInputLayer swig_types[11] +#define SWIGTYPE_p_singa__Layer swig_types[12] +#define SWIGTYPE_p_singa__NeuralNet swig_types[13] +#define SWIGTYPE_p_size_type swig_types[14] +#define SWIGTYPE_p_std__allocatorT_float_t swig_types[15] +#define SWIGTYPE_p_std__allocatorT_int_t swig_types[16] +#define SWIGTYPE_p_std__allocatorT_singa__Layer_p_t swig_types[17] +#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[18] +#define SWIGTYPE_p_std__invalid_argument swig_types[19] +#define SWIGTYPE_p_std__vectorT__Tp__Alloc_t swig_types[20] +#define SWIGTYPE_p_std__vectorT__Tp_p__Alloc_t swig_types[21] +#define SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t swig_types[22] +#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[23] +#define SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t swig_types[24] +#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[25] +#define SWIGTYPE_p_swig__SwigPyIterator swig_types[26] +#define SWIGTYPE_p_value_type swig_types[27] +static swig_type_info *swig_types[29]; +static swig_module_info swig_module = {swig_types, 28, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) @@ -3421,328 +3444,9334 @@ SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val) #include -#include "singa/driver.h" +typedef float floatArray; + +SWIGINTERN floatArray *new_floatArray(size_t nelements){ + return (new float[nelements]); + } +SWIGINTERN void delete_floatArray(floatArray *self){ + delete[] self; + } +SWIGINTERN float floatArray___getitem__(floatArray *self,size_t index){ + return self[index]; + } + + #define SWIG_From_double PyFloat_FromDouble + + +SWIGINTERNINLINE PyObject * +SWIG_From_float (float value) +{ + return SWIG_From_double (value); +} + + +/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */ +#ifndef SWIG_isfinite +# if defined(isfinite) +# define SWIG_isfinite(X) (isfinite(X)) +# elif defined(_MSC_VER) +# define SWIG_isfinite(X) (_finite(X)) +# elif defined(__sun) && defined(__SVR4) +# include +# define SWIG_isfinite(X) (finite(X)) +# endif +#endif + + +/* Accept infinite as a valid float value unless we are unable to check if a value is finite */ +#ifdef SWIG_isfinite +# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X)) +#else +# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX)) +#endif SWIGINTERN int -SWIG_AsVal_bool (PyObject *obj, bool *val) +SWIG_AsVal_float (PyObject * obj, float *val) { - int r = PyObject_IsTrue(obj); - if (r == -1) - return SWIG_ERROR; - if (val) *val = r ? true : false; - return SWIG_OK; + double v; + int res = SWIG_AsVal_double (obj, &v); + if (SWIG_IsOK(res)) { + if (SWIG_Float_Overflow_Check(v)) { + return SWIG_OverflowError; + } else { + if (val) *val = static_cast< float >(v); + } + } + return res; } +SWIGINTERN void floatArray___setitem__(floatArray *self,size_t index,float value){ + self[index] = value; + } +SWIGINTERN float *floatArray_cast(floatArray *self){ + return self; + } +SWIGINTERN floatArray *floatArray_frompointer(float *t){ + return static_cast< floatArray * >(t); + } + +#include "singa/driver.h" +#include "singa/neuralnet/neuralnet.h" +#include "singa/neuralnet/layer.h" +#include "singa/neuralnet/input_layer.h" +#include "singa/utils/blob.h" -SWIGINTERN swig_type_info* -SWIG_pchar_descriptor(void) -{ - static int init = 0; - static swig_type_info* info = 0; - if (!init) { - info = SWIG_TypeQuery("_p_char"); - init = 1; + +namespace swig { + template + struct noconst_traits { + typedef Type noconst_type; + }; + + template + struct noconst_traits { + typedef Type noconst_type; + }; + + /* + type categories + */ + struct pointer_category { }; + struct value_category { }; + + /* + General traits that provides type_name and type_info + */ + template struct traits { }; + + template + inline const char* type_name() { + return traits::noconst_type >::type_name(); } - return info; + + template + struct traits_info { + static swig_type_info *type_query(std::string name) { + name += " *"; + return SWIG_TypeQuery(name.c_str()); + } + static swig_type_info *type_info() { + static swig_type_info *info = type_query(type_name()); + return info; + } + }; + + template + inline swig_type_info *type_info() { + return traits_info::type_info(); + } + + /* + Partial specialization for pointers + */ + template struct traits { + typedef pointer_category category; + static std::string make_ptr_name(const char* name) { + std::string ptrname = name; + ptrname += " *"; + return ptrname; + } + static const char* type_name() { + static std::string name = make_ptr_name(swig::type_name()); + return name.c_str(); + } + }; + + template + struct traits_as { }; + + template + struct traits_check { }; + } -SWIGINTERN int -SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) -{ -#if PY_VERSION_HEX>=0x03000000 - if (PyUnicode_Check(obj)) -#else - if (PyString_Check(obj)) -#endif - { - char *cstr; Py_ssize_t len; -#if PY_VERSION_HEX>=0x03000000 - if (!alloc && cptr) { - /* We can't allow converting without allocation, since the internal - representation of string in Python 3 is UCS-2/UCS-4 but we require - a UTF-8 representation. - TODO(bhy) More detailed explanation */ - return SWIG_RuntimeError; +namespace swig { + /* + Traits that provides the from method + */ + template struct traits_from_ptr { + static PyObject *from(Type *val, int owner = 0) { + return SWIG_InternalNewPointerObj(val, type_info(), owner); } - obj = PyUnicode_AsUTF8String(obj); - PyBytes_AsStringAndSize(obj, &cstr, &len); - if(alloc) *alloc = SWIG_NEWOBJ; -#else - PyString_AsStringAndSize(obj, &cstr, &len); -#endif - if (cptr) { - if (alloc) { - /* - In python the user should not be able to modify the inner - string representation. To warranty that, if you define - SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string - buffer is always returned. + }; - The default behavior is just to return the pointer value, - so, be careful. - */ -#if defined(SWIG_PYTHON_SAFE_CSTRINGS) - if (*alloc != SWIG_OLDOBJ) -#else - if (*alloc == SWIG_NEWOBJ) -#endif - { - *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1))); - *alloc = SWIG_NEWOBJ; + template struct traits_from { + static PyObject *from(const Type& val) { + return traits_from_ptr::from(new Type(val), 1); + } + }; + + template struct traits_from { + static PyObject *from(Type* val) { + return traits_from_ptr::from(val, 0); + } + }; + + template struct traits_from { + static PyObject *from(const Type* val) { + return traits_from_ptr::from(const_cast(val), 0); + } + }; + + + template + inline PyObject *from(const Type& val) { + return traits_from::from(val); + } + + template + inline PyObject *from_ptr(Type* val, int owner) { + return traits_from_ptr::from(val, owner); + } + + /* + Traits that provides the asval/as/check method + */ + template + struct traits_asptr { + static int asptr(PyObject *obj, Type **val) { + Type *p; + int res = SWIG_ConvertPtr(obj, (void**)&p, type_info(), 0); + if (SWIG_IsOK(res)) { + if (val) *val = p; + } + return res; + } + }; + + template + inline int asptr(PyObject *obj, Type **vptr) { + return traits_asptr::asptr(obj, vptr); + } + + template + struct traits_asval { + static int asval(PyObject *obj, Type *val) { + if (val) { + Type *p = 0; + int res = traits_asptr::asptr(obj, &p); + if (!SWIG_IsOK(res)) return res; + if (p) { + typedef typename noconst_traits::noconst_type noconst_type; + *(const_cast(val)) = *p; + if (SWIG_IsNewObj(res)){ + delete p; + res = SWIG_DelNewMask(res); } - else { - *cptr = cstr; - *alloc = SWIG_OLDOBJ; + return res; + } else { + return SWIG_ERROR; } } else { - #if PY_VERSION_HEX>=0x03000000 - assert(0); /* Should never reach here in Python 3 */ - #endif - *cptr = SWIG_Python_str_AsChar(obj); + return traits_asptr::asptr(obj, (Type **)(0)); } } - if (psize) *psize = len + 1; -#if PY_VERSION_HEX>=0x03000000 - Py_XDECREF(obj); -#endif - return SWIG_OK; - } else { - swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); - if (pchar_descriptor) { - void* vptr = 0; - if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { - if (cptr) *cptr = (char *) vptr; - if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; - if (alloc) *alloc = SWIG_OLDOBJ; - return SWIG_OK; + }; + + template struct traits_asval { + static int asval(PyObject *obj, Type **val) { + if (val) { + typedef typename noconst_traits::noconst_type noconst_type; + noconst_type *p = 0; + int res = traits_asptr::asptr(obj, &p); + if (SWIG_IsOK(res)) { + *(const_cast(val)) = p; + } + return res; + } else { + return traits_asptr::asptr(obj, (Type **)(0)); + } + } + }; + + template + inline int asval(PyObject *obj, Type *val) { + return traits_asval::asval(obj, val); + } + + template + struct traits_as { + static Type as(PyObject *obj, bool throw_error) { + Type v; + int res = asval(obj, &v); + if (!obj || !SWIG_IsOK(res)) { + if (!PyErr_Occurred()) { + ::SWIG_Error(SWIG_TypeError, swig::type_name()); + } + if (throw_error) throw std::invalid_argument("bad type"); + } + return v; + } + }; + + template + struct traits_as { + static Type as(PyObject *obj, bool throw_error) { + Type *v = 0; + int res = (obj ? traits_asptr::asptr(obj, &v) : SWIG_ERROR); + if (SWIG_IsOK(res) && v) { + if (SWIG_IsNewObj(res)) { + Type r(*v); + delete v; + return r; + } else { + return *v; + } + } else { + // Uninitialized return value, no Type() constructor required. + static Type *v_def = (Type*) malloc(sizeof(Type)); + if (!PyErr_Occurred()) { + SWIG_Error(SWIG_TypeError, swig::type_name()); + } + if (throw_error) throw std::invalid_argument("bad type"); + memset(v_def,0,sizeof(Type)); + return *v_def; + } + } + }; + + template + struct traits_as { + static Type* as(PyObject *obj, bool throw_error) { + Type *v = 0; + int res = (obj ? traits_asptr::asptr(obj, &v) : SWIG_ERROR); + if (SWIG_IsOK(res)) { + return v; + } else { + if (!PyErr_Occurred()) { + SWIG_Error(SWIG_TypeError, swig::type_name()); + } + if (throw_error) throw std::invalid_argument("bad type"); + return 0; + } + } + }; + + template + inline Type as(PyObject *obj, bool te = false) { + return traits_as::category>::as(obj, te); + } + + template + struct traits_check { + static bool check(PyObject *obj) { + int res = obj ? asval(obj, (Type *)(0)) : SWIG_ERROR; + return SWIG_IsOK(res) ? true : false; + } + }; + + template + struct traits_check { + static bool check(PyObject *obj) { + int res = obj ? asptr(obj, (Type **)(0)) : SWIG_ERROR; + return SWIG_IsOK(res) ? true : false; + } + }; + + template + inline bool check(PyObject *obj) { + return traits_check::category>::check(obj); + } +} + + +#include + +namespace std { + template <> + struct less : public binary_function + { + bool + operator()(PyObject * v, PyObject *w) const + { + bool res; + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + res = PyObject_RichCompareBool(v, w, Py_LT) ? true : false; + /* This may fall into a case of inconsistent + eg. ObjA > ObjX > ObjB + but ObjA < ObjB + */ + if( PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError) ) + { + /* Objects can't be compared, this mostly occurred in Python 3.0 */ + /* Compare their ptr directly for a workaround */ + res = (v < w); + PyErr_Clear(); + } + SWIG_PYTHON_THREAD_END_BLOCK; + return res; + } + }; + + template <> + struct less : public binary_function + { + bool + operator()(const swig::SwigPtr_PyObject& v, const swig::SwigPtr_PyObject& w) const + { + return std::less()(v, w); + } + }; + + template <> + struct less : public binary_function + { + bool + operator()(const swig::SwigVar_PyObject& v, const swig::SwigVar_PyObject& w) const + { + return std::less()(v, w); + } + }; + +} + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return "PyObject *"; } + }; + + template <> struct traits_asval { + typedef PyObject * value_type; + static int asval(PyObject *obj, value_type *val) { + if (val) *val = obj; + return SWIG_OK; + } + }; + + template <> + struct traits_check { + static bool check(PyObject *) { + return true; + } + }; + + template <> struct traits_from { + typedef PyObject * value_type; + static PyObject *from(const value_type& val) { + Py_XINCREF(val); + return val; + } + }; + +} + +namespace swig { + template + inline size_t + check_index(Difference i, size_t size, bool insert = false) { + if ( i < 0 ) { + if ((size_t) (-i) <= size) + return (size_t) (i + size); + } else if ( (size_t) i < size ) { + return (size_t) i; + } else if (insert && ((size_t) i == size)) { + return size; + } + throw std::out_of_range("index out of range"); + } + + template + void + slice_adjust(Difference i, Difference j, Py_ssize_t step, size_t size, Difference &ii, Difference &jj, bool insert = false) { + if (step == 0) { + throw std::invalid_argument("slice step cannot be zero"); + } else if (step > 0) { + // Required range: 0 <= i < size, 0 <= j < size + if (i < 0) { + ii = 0; + } else if (i < (Difference)size) { + ii = i; + } else if (insert && (i >= (Difference)size)) { + ii = (Difference)size; + } + if ( j < 0 ) { + jj = 0; + } else { + jj = (j < (Difference)size) ? j : (Difference)size; + } + } else { + // Required range: -1 <= i < size-1, -1 <= j < size-1 + if (i < -1) { + ii = -1; + } else if (i < (Difference) size) { + ii = i; + } else if (i >= (Difference)(size-1)) { + ii = (Difference)(size-1); + } + if (j < -1) { + jj = -1; + } else { + jj = (j < (Difference)size ) ? j : (Difference)(size-1); + } + } + } + + template + inline typename Sequence::iterator + getpos(Sequence* self, Difference i) { + typename Sequence::iterator pos = self->begin(); + std::advance(pos, check_index(i,self->size())); + return pos; + } + + template + inline typename Sequence::const_iterator + cgetpos(const Sequence* self, Difference i) { + typename Sequence::const_iterator pos = self->begin(); + std::advance(pos, check_index(i,self->size())); + return pos; + } + + template + inline Sequence* + getslice(const Sequence* self, Difference i, Difference j, Py_ssize_t step) { + typename Sequence::size_type size = self->size(); + Difference ii = 0; + Difference jj = 0; + swig::slice_adjust(i, j, step, size, ii, jj); + + if (step > 0) { + typename Sequence::const_iterator sb = self->begin(); + typename Sequence::const_iterator se = self->begin(); + std::advance(sb,ii); + std::advance(se,jj); + if (step == 1) { + return new Sequence(sb, se); + } else { + Sequence *sequence = new Sequence(); + typename Sequence::const_iterator it = sb; + while (it!=se) { + sequence->push_back(*it); + for (Py_ssize_t c=0; c jj) { + typename Sequence::const_reverse_iterator sb = self->rbegin(); + typename Sequence::const_reverse_iterator se = self->rbegin(); + std::advance(sb,size-ii-1); + std::advance(se,size-jj-1); + typename Sequence::const_reverse_iterator it = sb; + while (it!=se) { + sequence->push_back(*it); + for (Py_ssize_t c=0; c<-step && it!=se; ++c) + it++; + } + } + return sequence; + } + } + + template + inline void + setslice(Sequence* self, Difference i, Difference j, Py_ssize_t step, const InputSeq& is = InputSeq()) { + typename Sequence::size_type size = self->size(); + Difference ii = 0; + Difference jj = 0; + swig::slice_adjust(i, j, step, size, ii, jj, true); + if (step > 0) { + if (jj < ii) + jj = ii; + if (step == 1) { + size_t ssize = jj - ii; + if (ssize <= is.size()) { + // expanding/staying the same size + typename Sequence::iterator sb = self->begin(); + typename InputSeq::const_iterator isit = is.begin(); + std::advance(sb,ii); + std::advance(isit, jj - ii); + self->insert(std::copy(is.begin(), isit, sb), isit, is.end()); + } else { + // shrinking + typename Sequence::iterator sb = self->begin(); + typename Sequence::iterator se = self->begin(); + std::advance(sb,ii); + std::advance(se,jj); + self->erase(sb,se); + sb = self->begin(); + std::advance(sb,ii); + self->insert(sb, is.begin(), is.end()); + } + } else { + size_t replacecount = (jj - ii + step - 1) / step; + if (is.size() != replacecount) { + char msg[1024]; + sprintf(msg, "attempt to assign sequence of size %lu to extended slice of size %lu", (unsigned long)is.size(), (unsigned long)replacecount); + throw std::invalid_argument(msg); + } + typename Sequence::const_iterator isit = is.begin(); + typename Sequence::iterator it = self->begin(); + std::advance(it,ii); + for (size_t rc=0; rcend(); ++c) + it++; + } + } + } else { + if (jj > ii) + jj = ii; + size_t replacecount = (ii - jj - step - 1) / -step; + if (is.size() != replacecount) { + char msg[1024]; + sprintf(msg, "attempt to assign sequence of size %lu to extended slice of size %lu", (unsigned long)is.size(), (unsigned long)replacecount); + throw std::invalid_argument(msg); + } + typename Sequence::const_iterator isit = is.begin(); + typename Sequence::reverse_iterator it = self->rbegin(); + std::advance(it,size-ii-1); + for (size_t rc=0; rcrend(); ++c) + it++; } } } - return SWIG_TypeError; + + template + inline void + delslice(Sequence* self, Difference i, Difference j, Py_ssize_t step) { + typename Sequence::size_type size = self->size(); + Difference ii = 0; + Difference jj = 0; + swig::slice_adjust(i, j, step, size, ii, jj, true); + if (step > 0) { + if (jj > ii) { + typename Sequence::iterator sb = self->begin(); + std::advance(sb,ii); + if (step == 1) { + typename Sequence::iterator se = self->begin(); + std::advance(se,jj); + self->erase(sb,se); + } else { + typename Sequence::iterator it = sb; + size_t delcount = (jj - ii + step - 1) / step; + while (delcount) { + it = self->erase(it); + for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c) + it++; + delcount--; + } + } + } + } else { + if (ii > jj) { + typename Sequence::reverse_iterator sb = self->rbegin(); + std::advance(sb,size-ii-1); + typename Sequence::reverse_iterator it = sb; + size_t delcount = (ii - jj - step - 1) / -step; + while (delcount) { + it = typename Sequence::reverse_iterator(self->erase((++it).base())); + for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c) + it++; + delcount--; + } + } + } + } +} + + +#if defined(__SUNPRO_CC) && defined(_RWSTD_VER) +# if !defined(SWIG_NO_STD_NOITERATOR_TRAITS_STL) +# define SWIG_STD_NOITERATOR_TRAITS_STL +# endif +#endif + +#if !defined(SWIG_STD_NOITERATOR_TRAITS_STL) +#include +#else +namespace std { + template + struct iterator_traits { + typedef ptrdiff_t difference_type; + typedef typename Iterator::value_type value_type; + }; + + template + struct iterator_traits<__reverse_bi_iterator > { + typedef Distance difference_type; + typedef T value_type; + }; + + template + struct iterator_traits { + typedef T value_type; + typedef ptrdiff_t difference_type; + }; + + template + inline typename iterator_traits<_InputIterator>::difference_type + distance(_InputIterator __first, _InputIterator __last) + { + typename iterator_traits<_InputIterator>::difference_type __n = 0; + while (__first != __last) { + ++__first; ++__n; + } + return __n; + } +} +#endif + + +namespace swig { + template + class SwigPyIterator_T : public SwigPyIterator + { + public: + typedef OutIterator out_iterator; + typedef typename std::iterator_traits::value_type value_type; + typedef SwigPyIterator_T self_type; + + SwigPyIterator_T(out_iterator curr, PyObject *seq) + : SwigPyIterator(seq), current(curr) + { + } + + const out_iterator& get_current() const + { + return current; + } + + + bool equal (const SwigPyIterator &iter) const + { + const self_type *iters = dynamic_cast(&iter); + if (iters) { + return (current == iters->get_current()); + } else { + throw std::invalid_argument("bad iterator type"); + } + } + + ptrdiff_t distance(const SwigPyIterator &iter) const + { + const self_type *iters = dynamic_cast(&iter); + if (iters) { + return std::distance(current, iters->get_current()); + } else { + throw std::invalid_argument("bad iterator type"); + } + } + + protected: + out_iterator current; + }; + + template + struct from_oper + { + typedef const ValueType& argument_type; + typedef PyObject *result_type; + result_type operator()(argument_type v) const + { + return swig::from(v); + } + }; + + template::value_type, + typename FromOper = from_oper > + class SwigPyIteratorOpen_T : public SwigPyIterator_T + { + public: + FromOper from; + typedef OutIterator out_iterator; + typedef ValueType value_type; + typedef SwigPyIterator_T base; + typedef SwigPyIteratorOpen_T self_type; + + SwigPyIteratorOpen_T(out_iterator curr, PyObject *seq) + : SwigPyIterator_T(curr, seq) + { + } + + PyObject *value() const { + return from(static_cast(*(base::current))); + } + + SwigPyIterator *copy() const + { + return new self_type(*this); + } + + SwigPyIterator *incr(size_t n = 1) + { + while (n--) { + ++base::current; + } + return this; + } + + SwigPyIterator *decr(size_t n = 1) + { + while (n--) { + --base::current; + } + return this; + } + }; + + template::value_type, + typename FromOper = from_oper > + class SwigPyIteratorClosed_T : public SwigPyIterator_T + { + public: + FromOper from; + typedef OutIterator out_iterator; + typedef ValueType value_type; + typedef SwigPyIterator_T base; + typedef SwigPyIteratorClosed_T self_type; + + SwigPyIteratorClosed_T(out_iterator curr, out_iterator first, out_iterator last, PyObject *seq) + : SwigPyIterator_T(curr, seq), begin(first), end(last) + { + } + + PyObject *value() const { + if (base::current == end) { + throw stop_iteration(); + } else { + return from(static_cast(*(base::current))); + } + } + + SwigPyIterator *copy() const + { + return new self_type(*this); + } + + SwigPyIterator *incr(size_t n = 1) + { + while (n--) { + if (base::current == end) { + throw stop_iteration(); + } else { + ++base::current; + } + } + return this; + } + + SwigPyIterator *decr(size_t n = 1) + { + while (n--) { + if (base::current == begin) { + throw stop_iteration(); + } else { + --base::current; + } + } + return this; + } + + private: + out_iterator begin; + out_iterator end; + }; + + template + inline SwigPyIterator* + make_output_iterator(const OutIter& current, const OutIter& begin,const OutIter& end, PyObject *seq = 0) + { + return new SwigPyIteratorClosed_T(current, begin, end, seq); + } + + template + inline SwigPyIterator* + make_output_iterator(const OutIter& current, PyObject *seq = 0) + { + return new SwigPyIteratorOpen_T(current, seq); + } + +} + + +namespace swig +{ + template + struct SwigPySequence_Ref + { + SwigPySequence_Ref(PyObject* seq, int index) + : _seq(seq), _index(index) + { + } + + operator T () const + { + swig::SwigVar_PyObject item = PySequence_GetItem(_seq, _index); + try { + return swig::as(item, true); + } catch (std::exception& e) { + char msg[1024]; + sprintf(msg, "in sequence element %d ", _index); + if (!PyErr_Occurred()) { + ::SWIG_Error(SWIG_TypeError, swig::type_name()); + } + SWIG_Python_AddErrorMsg(msg); + SWIG_Python_AddErrorMsg(e.what()); + throw; + } + } + + SwigPySequence_Ref& operator=(const T& v) + { + PySequence_SetItem(_seq, _index, swig::from(v)); + return *this; + } + + private: + PyObject* _seq; + int _index; + }; + + template + struct SwigPySequence_ArrowProxy + { + SwigPySequence_ArrowProxy(const T& x): m_value(x) {} + const T* operator->() const { return &m_value; } + operator const T*() const { return &m_value; } + T m_value; + }; + + template + struct SwigPySequence_InputIterator + { + typedef SwigPySequence_InputIterator self; + + typedef std::random_access_iterator_tag iterator_category; + typedef Reference reference; + typedef T value_type; + typedef T* pointer; + typedef int difference_type; + + SwigPySequence_InputIterator() + { + } + + SwigPySequence_InputIterator(PyObject* seq, int index) + : _seq(seq), _index(index) + { + } + + reference operator*() const + { + return reference(_seq, _index); + } + + SwigPySequence_ArrowProxy + operator->() const { + return SwigPySequence_ArrowProxy(operator*()); + } + + bool operator==(const self& ri) const + { + return (_index == ri._index) && (_seq == ri._seq); + } + + bool operator!=(const self& ri) const + { + return !(operator==(ri)); + } + + self& operator ++ () + { + ++_index; + return *this; + } + + self& operator -- () + { + --_index; + return *this; + } + + self& operator += (difference_type n) + { + _index += n; + return *this; + } + + self operator +(difference_type n) const + { + return self(_seq, _index + n); + } + + self& operator -= (difference_type n) + { + _index -= n; + return *this; + } + + self operator -(difference_type n) const + { + return self(_seq, _index - n); + } + + difference_type operator - (const self& ri) const + { + return _index - ri._index; + } + + bool operator < (const self& ri) const + { + return _index < ri._index; + } + + reference + operator[](difference_type n) const + { + return reference(_seq, _index + n); + } + + private: + PyObject* _seq; + difference_type _index; + }; + + template + struct SwigPySequence_Cont + { + typedef SwigPySequence_Ref reference; + typedef const SwigPySequence_Ref const_reference; + typedef T value_type; + typedef T* pointer; + typedef int difference_type; + typedef int size_type; + typedef const pointer const_pointer; + typedef SwigPySequence_InputIterator iterator; + typedef SwigPySequence_InputIterator const_iterator; + + SwigPySequence_Cont(PyObject* seq) : _seq(0) + { + if (!PySequence_Check(seq)) { + throw std::invalid_argument("a sequence is expected"); + } + _seq = seq; + Py_INCREF(_seq); + } + + ~SwigPySequence_Cont() + { + Py_XDECREF(_seq); + } + + size_type size() const + { + return static_cast(PySequence_Size(_seq)); + } + + bool empty() const + { + return size() == 0; + } + + iterator begin() + { + return iterator(_seq, 0); + } + + const_iterator begin() const + { + return const_iterator(_seq, 0); + } + + iterator end() + { + return iterator(_seq, size()); + } + + const_iterator end() const + { + return const_iterator(_seq, size()); + } + + reference operator[](difference_type n) + { + return reference(_seq, n); + } + + const_reference operator[](difference_type n) const + { + return const_reference(_seq, n); + } + + bool check(bool set_err = true) const + { + int s = size(); + for (int i = 0; i < s; ++i) { + swig::SwigVar_PyObject item = PySequence_GetItem(_seq, i); + if (!swig::check(item)) { + if (set_err) { + char msg[1024]; + sprintf(msg, "in sequence element %d", i); + SWIG_Error(SWIG_RuntimeError, msg); + } + return false; + } + } + return true; + } + + private: + PyObject* _seq; + }; + +} + + +SWIGINTERN swig_type_info* +SWIG_pchar_descriptor(void) +{ + static int init = 0; + static swig_type_info* info = 0; + if (!init) { + info = SWIG_TypeQuery("_p_char"); + init = 1; + } + return info; +} + + +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 + if (PyUnicode_Check(obj)) +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + PyBytes_AsStringAndSize(obj, &cstr, &len); + if(alloc) *alloc = SWIG_NEWOBJ; +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1))); + *alloc = SWIG_NEWOBJ; + } + else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { + #if PY_VERSION_HEX>=0x03000000 + assert(0); /* Should never reach here in Python 3 */ + #endif + *cptr = SWIG_Python_str_AsChar(obj); + } + } + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + +SWIGINTERN int +SWIG_AsPtr_std_string (PyObject * obj, std::string **val) +{ + char* buf = 0 ; size_t size = 0; int alloc = SWIG_OLDOBJ; + if (SWIG_IsOK((SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc)))) { + if (buf) { + if (val) *val = new std::string(buf, size - 1); + if (alloc == SWIG_NEWOBJ) delete[] buf; + return SWIG_NEWOBJ; + } else { + if (val) *val = 0; + return SWIG_OLDOBJ; + } + } else { + static int init = 0; + static swig_type_info* descriptor = 0; + if (!init) { + descriptor = SWIG_TypeQuery("std::string" " *"); + init = 1; + } + if (descriptor) { + std::string *vptr; + int res = SWIG_ConvertPtr(obj, (void**)&vptr, descriptor, 0); + if (SWIG_IsOK(res) && val) *val = vptr; + return res; + } + } + return SWIG_ERROR; +} + + +SWIGINTERN int +SWIG_AsVal_std_string (PyObject * obj, std::string *val) +{ + std::string* v = (std::string *) 0; + int res = SWIG_AsPtr_std_string (obj, &v); + if (!SWIG_IsOK(res)) return res; + if (v) { + if (val) *val = *v; + if (SWIG_IsNewObj(res)) { + delete v; + res = SWIG_DelNewMask(res); + } + return res; + } + return SWIG_ERROR; +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtrAndSize(const char* carray, size_t size) +{ + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + return pchar_descriptor ? + SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { +#if PY_VERSION_HEX >= 0x03000000 + return PyUnicode_FromStringAndSize(carray, static_cast< int >(size)); +#else + return PyString_FromStringAndSize(carray, static_cast< int >(size)); +#endif + } + } else { + return SWIG_Py_Void(); + } +} + + +SWIGINTERNINLINE PyObject * +SWIG_From_std_string (const std::string& s) +{ + return SWIG_FromCharPtrAndSize(s.data(), s.size()); +} + + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"std::string"; } + }; + template <> struct traits_asval { + typedef std::string value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_std_string (obj, val); + } + }; + template <> struct traits_from { + typedef std::string value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_std_string (val); + } + }; +} + + +namespace swig { + template + inline void + assign(const SwigPySeq& swigpyseq, Seq* seq) { + // seq->assign(swigpyseq.begin(), swigpyseq.end()); // not used as not always implemented + typedef typename SwigPySeq::value_type value_type; + typename SwigPySeq::const_iterator it = swigpyseq.begin(); + for (;it != swigpyseq.end(); ++it) { + seq->insert(seq->end(),(value_type)(*it)); + } + } + + template + struct traits_asptr_stdseq { + typedef Seq sequence; + typedef T value_type; + + static int asptr(PyObject *obj, sequence **seq) { + if (obj == Py_None || SWIG_Python_GetSwigThis(obj)) { + sequence *p; + if (::SWIG_ConvertPtr(obj,(void**)&p, + swig::type_info(),0) == SWIG_OK) { + if (seq) *seq = p; + return SWIG_OLDOBJ; + } + } else if (PySequence_Check(obj)) { + try { + SwigPySequence_Cont swigpyseq(obj); + if (seq) { + sequence *pseq = new sequence(); + assign(swigpyseq, pseq); + *seq = pseq; + return SWIG_NEWOBJ; + } else { + return swigpyseq.check() ? SWIG_OK : SWIG_ERROR; + } + } catch (std::exception& e) { + if (seq) { + if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, e.what()); + } + } + return SWIG_ERROR; + } + } + return SWIG_ERROR; + } + }; + + template + struct traits_from_stdseq { + typedef Seq sequence; + typedef T value_type; + typedef typename Seq::size_type size_type; + typedef typename sequence::const_iterator const_iterator; + + static PyObject *from(const sequence& seq) { +#ifdef SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS + swig_type_info *desc = swig::type_info(); + if (desc && desc->clientdata) { + return SWIG_NewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN); + } +#endif + size_type size = seq.size(); + if (size <= (size_type)INT_MAX) { + PyObject *obj = PyTuple_New((int)size); + int i = 0; + for (const_iterator it = seq.begin(); + it != seq.end(); ++it, ++i) { + PyTuple_SetItem(obj,i,swig::from(*it)); + } + return obj; + } else { + PyErr_SetString(PyExc_OverflowError,"sequence size not valid in python"); + return NULL; + } + } + }; +} + + + namespace swig { + template + struct traits_asptr > { + static int asptr(PyObject *obj, std::vector **vec) { + return traits_asptr_stdseq >::asptr(obj, vec); + } + }; + + template + struct traits_from > { + static PyObject *from(const std::vector& vec) { + return traits_from_stdseq >::from(vec); + } + }; + } + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "std::string" "," "std::allocator< std::string >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_std_string_Sg__iterator(std::vector< std::string > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_std_string_Sg____nonzero__(std::vector< std::string > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_std_string_Sg____bool__(std::vector< std::string > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< std::string >::size_type std_vector_Sl_std_string_Sg____len__(std::vector< std::string > const *self){ + return self->size(); + } + +SWIGINTERNINLINE PyObject* +SWIG_From_unsigned_SS_long (unsigned long value) +{ + return (value > LONG_MAX) ? + PyLong_FromUnsignedLong(value) : PyLong_FromLong(static_cast< long >(value)); +} + + +SWIGINTERNINLINE PyObject * +SWIG_From_size_t (size_t value) +{ + return SWIG_From_unsigned_SS_long (static_cast< unsigned long >(value)); +} + +SWIGINTERN std::vector< std::string >::value_type std_vector_Sl_std_string_Sg__pop(std::vector< std::string > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< std::string,std::allocator< std::string > > *std_vector_Sl_std_string_Sg____getslice__(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setslice____SWIG_0(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j,std::vector< std::string,std::allocator< std::string > > const &v=std::vector< std::string,std::allocator< std::string > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____delslice__(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____delitem____SWIG_0(std::vector< std::string > *self,std::vector< std::string >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< std::string,std::allocator< std::string > > *std_vector_Sl_std_string_Sg____getitem____SWIG_0(std::vector< std::string > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_0(std::vector< std::string > *self,PySliceObject *slice,std::vector< std::string,std::allocator< std::string > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_1(std::vector< std::string > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____delitem____SWIG_1(std::vector< std::string > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< std::string >::value_type const &std_vector_Sl_std_string_Sg____getitem____SWIG_1(std::vector< std::string > const *self,std::vector< std::string >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_2(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_std_string_Sg__append(std::vector< std::string > *self,std::vector< std::string >::value_type const &x){ + self->push_back(x); + } + +#include +#if !defined(SWIG_NO_LLONG_MAX) +# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) +# define LLONG_MAX __LONG_LONG_MAX__ +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +# endif +#endif + + +SWIGINTERN int +SWIG_AsVal_int (PyObject * obj, int *val) +{ + long v; + int res = SWIG_AsVal_long (obj, &v); + if (SWIG_IsOK(res)) { + if ((v < INT_MIN || v > INT_MAX)) { + return SWIG_OverflowError; + } else { + if (val) *val = static_cast< int >(v); + } + } + return res; +} + + +SWIGINTERNINLINE PyObject* + SWIG_From_int (int value) +{ + return PyInt_FromLong((long) value); +} + + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"int"; } + }; + template <> struct traits_asval { + typedef int value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_int (obj, val); + } + }; + template <> struct traits_from { + typedef int value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_int (val); + } + }; +} + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "int" "," "std::allocator< int >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_int_Sg__iterator(std::vector< int > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_int_Sg____nonzero__(std::vector< int > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_int_Sg____bool__(std::vector< int > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< int >::size_type std_vector_Sl_int_Sg____len__(std::vector< int > const *self){ + return self->size(); + } +SWIGINTERN std::vector< int >::value_type std_vector_Sl_int_Sg__pop(std::vector< int > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< int,std::allocator< int > > *std_vector_Sl_int_Sg____getslice__(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_int_Sg____setslice____SWIG_0(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j,std::vector< int,std::allocator< int > > const &v=std::vector< int,std::allocator< int > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_int_Sg____delslice__(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_int_Sg____delitem____SWIG_0(std::vector< int > *self,std::vector< int >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< int,std::allocator< int > > *std_vector_Sl_int_Sg____getitem____SWIG_0(std::vector< int > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_0(std::vector< int > *self,PySliceObject *slice,std::vector< int,std::allocator< int > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_1(std::vector< int > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_int_Sg____delitem____SWIG_1(std::vector< int > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< int >::value_type const &std_vector_Sl_int_Sg____getitem____SWIG_1(std::vector< int > const *self,std::vector< int >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_2(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_int_Sg__append(std::vector< int > *self,std::vector< int >::value_type const &x){ + self->push_back(x); + } + +namespace swig { + template <> struct traits { + typedef value_category category; + static const char* type_name() { return"float"; } + }; + template <> struct traits_asval { + typedef float value_type; + static int asval(PyObject *obj, value_type *val) { + return SWIG_AsVal_float (obj, val); + } + }; + template <> struct traits_from { + typedef float value_type; + static PyObject *from(const value_type& val) { + return SWIG_From_float (val); + } + }; +} + + + namespace swig { + template <> struct traits > > { + typedef pointer_category category; + static const char* type_name() { + return "std::vector<" "float" "," "std::allocator< float >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_float_Sg__iterator(std::vector< float > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_float_Sg____nonzero__(std::vector< float > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_float_Sg____bool__(std::vector< float > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< float >::size_type std_vector_Sl_float_Sg____len__(std::vector< float > const *self){ + return self->size(); + } +SWIGINTERN std::vector< float >::value_type std_vector_Sl_float_Sg__pop(std::vector< float > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< float,std::allocator< float > > *std_vector_Sl_float_Sg____getslice__(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_float_Sg____setslice____SWIG_0(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j,std::vector< float,std::allocator< float > > const &v=std::vector< float,std::allocator< float > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_float_Sg____delslice__(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_float_Sg____delitem____SWIG_0(std::vector< float > *self,std::vector< float >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< float,std::allocator< float > > *std_vector_Sl_float_Sg____getitem____SWIG_0(std::vector< float > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_0(std::vector< float > *self,PySliceObject *slice,std::vector< float,std::allocator< float > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_1(std::vector< float > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_float_Sg____delitem____SWIG_1(std::vector< float > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< float >::value_type const &std_vector_Sl_float_Sg____getitem____SWIG_1(std::vector< float > const *self,std::vector< float >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_2(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::value_type const &x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_float_Sg__append(std::vector< float > *self,std::vector< float >::value_type const &x){ + self->push_back(x); + } + + namespace swig { + template <> struct traits { + typedef pointer_category category; + static const char* type_name() { return"singa::Layer"; } + }; + } + + + namespace swig { + template <> struct traits > > { + typedef value_category category; + static const char* type_name() { + return "std::vector<" "singa::Layer" " *," "std::allocator< singa::Layer * >" " >"; + } + }; + } + +SWIGINTERN swig::SwigPyIterator *std_vector_Sl_singa_Layer_Sm__Sg__iterator(std::vector< singa::Layer * > *self,PyObject **PYTHON_SELF){ + return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } +SWIGINTERN bool std_vector_Sl_singa_Layer_Sm__Sg____nonzero__(std::vector< singa::Layer * > const *self){ + return !(self->empty()); + } +SWIGINTERN bool std_vector_Sl_singa_Layer_Sm__Sg____bool__(std::vector< singa::Layer * > const *self){ + return !(self->empty()); + } +SWIGINTERN std::vector< singa::Layer * >::size_type std_vector_Sl_singa_Layer_Sm__Sg____len__(std::vector< singa::Layer * > const *self){ + return self->size(); + } +SWIGINTERN std::vector< singa::Layer * >::value_type std_vector_Sl_singa_Layer_Sm__Sg__pop(std::vector< singa::Layer * > *self){ + if (self->size() == 0) + throw std::out_of_range("pop from empty container"); + std::vector >::value_type x = self->back(); + self->pop_back(); + return x; + } +SWIGINTERN std::vector< singa::Layer *,std::allocator< singa::Layer * > > *std_vector_Sl_singa_Layer_Sm__Sg____getslice__(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::difference_type j){ + return swig::getslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setslice____SWIG_0(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::difference_type j,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &v=std::vector< singa::Layer *,std::allocator< singa::Layer * > >()){ + swig::setslice(self, i, j, 1, v); + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____delslice__(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::difference_type j){ + swig::delslice(self, i, j, 1); + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_0(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i){ + self->erase(swig::getpos(self,i)); + } +SWIGINTERN std::vector< singa::Layer *,std::allocator< singa::Layer * > > *std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_0(std::vector< singa::Layer * > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return NULL; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + return swig::getslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_0(std::vector< singa::Layer * > *self,PySliceObject *slice,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &v){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::setslice(self, id, jd, step, v); + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_1(std::vector< singa::Layer * > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_1(std::vector< singa::Layer * > *self,PySliceObject *slice){ + Py_ssize_t i, j, step; + if( !PySlice_Check(slice) ) { + SWIG_Error(SWIG_TypeError, "Slice object expected."); + return; + } + PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); + std::vector >::difference_type id = i; + std::vector >::difference_type jd = j; + swig::delslice(self, id, jd, step); + } +SWIGINTERN std::vector< singa::Layer * >::value_type std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_1(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i){ + return *(swig::cgetpos(self, i)); + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_2(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::value_type x){ + *(swig::getpos(self,i)) = x; + } +SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg__append(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::value_type x){ + self->push_back(x); + } + +SWIGINTERN int +SWIG_AsVal_bool (PyObject *obj, bool *val) +{ + int r = PyObject_IsTrue(obj); + if (r == -1) + return SWIG_ERROR; + if (val) *val = r ? true : false; + return SWIG_OK; +} + + +SWIGINTERN int +SWIG_AsArgcArgv(PyObject *input, + swig_type_info *ppchar_info, + size_t *argc, char ***argv, int *owner) +{ + void *vptr; + int res = SWIG_ConvertPtr(input, &vptr, ppchar_info, 0); + if (!SWIG_IsOK(res)) { + int list = 0; + PyErr_Clear(); + list = PyList_Check(input); + if (list || PyTuple_Check(input)) { + size_t i = 0; + size_t size = list ? PyList_Size(input) : PyTuple_Size(input); + if (argc) *argc = size; + if (argv) { + *argv = (new char*[size + 1]); + for (; i < size; ++i) { + PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); + char *cptr = 0; size_t sz = 0; int alloc = 0; + res = SWIG_AsCharPtrAndSize(obj, &cptr, &sz, &alloc); + if (SWIG_IsOK(res)) { + if (cptr && sz) { + (*argv)[i] = (alloc == SWIG_NEWOBJ) ? cptr : reinterpret_cast< char* >(memcpy((new char[sz]), cptr, sizeof(char)*(sz))); + } else { + (*argv)[i] = 0; + } + } else { + return SWIG_TypeError; + } + } + (*argv)[i] = 0; + if (owner) *owner = 1; + } else { + for (; i < size; ++i) { + PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); + res = SWIG_AsCharPtrAndSize(obj, 0, 0, 0); + if (!SWIG_IsOK(res)) return SWIG_TypeError; + } + if (owner) *owner = 0; + } + return SWIG_OK; + } else { + return SWIG_TypeError; + } + } else { + /* seems dangerous, but the user asked for it... */ + size_t i = 0; + if (argv) { while (*argv[i] != 0) ++i;} + if (argc) *argc = i; + if (owner) *owner = 0; + return SWIG_OK; + } +} + + + + +#ifdef __cplusplus +extern "C" { +#endif +SWIGINTERN PyObject *_wrap_delete_SwigPyIterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_SwigPyIterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SwigPyIterator" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_value",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_value" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + result = (PyObject *)((swig::SwigPyIterator const *)arg1)->value(); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_incr",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_incr" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = static_cast< size_t >(val2); + try { + result = (swig::SwigPyIterator *)(arg1)->incr(arg2); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_incr",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + result = (swig::SwigPyIterator *)(arg1)->incr(); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 1) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_SwigPyIterator_incr__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_SwigPyIterator_incr__SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_incr'.\n" + " Possible C/C++ prototypes are:\n" + " swig::SwigPyIterator::incr(size_t)\n" + " swig::SwigPyIterator::incr()\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_decr",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_decr" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = static_cast< size_t >(val2); + try { + result = (swig::SwigPyIterator *)(arg1)->decr(arg2); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_decr",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + result = (swig::SwigPyIterator *)(arg1)->decr(); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_decr(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 1) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_SwigPyIterator_decr__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_SwigPyIterator_decr__SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_decr'.\n" + " Possible C/C++ prototypes are:\n" + " swig::SwigPyIterator::decr(size_t)\n" + " swig::SwigPyIterator::decr()\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + ptrdiff_t result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_distance",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_distance" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + try { + result = ((swig::SwigPyIterator const *)arg1)->distance((swig::SwigPyIterator const &)*arg2); + } + catch(std::invalid_argument &_e) { + SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; + } + + resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_equal",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_equal" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + try { + result = (bool)((swig::SwigPyIterator const *)arg1)->equal((swig::SwigPyIterator const &)*arg2); + } + catch(std::invalid_argument &_e) { + SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; + } + + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_copy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_copy",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_copy" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->copy(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_next",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_next" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + result = (PyObject *)(arg1)->next(); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___next__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator___next__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___next__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + result = (PyObject *)(arg1)->__next__(); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_previous(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_previous",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_previous" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + try { + result = (PyObject *)(arg1)->previous(); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator_advance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_advance",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_advance" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_advance" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + result = (swig::SwigPyIterator *)(arg1)->advance(arg2); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___eq__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___eq__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + result = (bool)((swig::SwigPyIterator const *)arg1)->operator ==((swig::SwigPyIterator const &)*arg2); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___ne__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___ne__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + result = (bool)((swig::SwigPyIterator const *)arg1)->operator !=((swig::SwigPyIterator const &)*arg2); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___iadd__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___iadd__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___iadd__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + result = (swig::SwigPyIterator *) &(arg1)->operator +=(arg2); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___isub__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___isub__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___isub__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + result = (swig::SwigPyIterator *) &(arg1)->operator -=(arg2); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___add__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___add__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___add__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator +(arg2); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + ptrdiff_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + swig::SwigPyIterator *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "ptrdiff_t""'"); + } + arg2 = static_cast< ptrdiff_t >(val2); + try { + result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator -(arg2); + } + catch(swig::stop_iteration &_e) { + { + (void)_e; + SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); + SWIG_fail; + } + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + swig::SwigPyIterator *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + ptrdiff_t result; + + if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + } + arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + } + arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); + result = ((swig::SwigPyIterator const *)arg1)->operator -((swig::SwigPyIterator const &)*arg2); + resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_SwigPyIterator___sub__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_SwigPyIterator___sub____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_SwigPyIterator___sub____SWIG_0(self, args); + } + } + } + +fail: + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; +} + + +SWIGINTERN PyObject *SwigPyIterator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_swig__SwigPyIterator, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_new_floatArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + size_t arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + floatArray *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_floatArray",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_floatArray" "', argument " "1"" of type '" "size_t""'"); + } + arg1 = static_cast< size_t >(val1); + result = (floatArray *)new_floatArray(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_floatArray, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_floatArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + floatArray *arg1 = (floatArray *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_floatArray",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_floatArray" "', argument " "1"" of type '" "floatArray *""'"); + } + arg1 = reinterpret_cast< floatArray * >(argp1); + delete_floatArray(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatArray___getitem__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + floatArray *arg1 = (floatArray *) 0 ; + size_t arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatArray___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray___getitem__" "', argument " "1"" of type '" "floatArray *""'"); + } + arg1 = reinterpret_cast< floatArray * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatArray___getitem__" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = static_cast< size_t >(val2); + result = (float)floatArray___getitem__(arg1,arg2); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatArray___setitem__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + floatArray *arg1 = (floatArray *) 0 ; + size_t arg2 ; + float arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatArray___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray___setitem__" "', argument " "1"" of type '" "floatArray *""'"); + } + arg1 = reinterpret_cast< floatArray * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatArray___setitem__" "', argument " "2"" of type '" "size_t""'"); + } + arg2 = static_cast< size_t >(val2); + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatArray___setitem__" "', argument " "3"" of type '" "float""'"); + } + arg3 = static_cast< float >(val3); + floatArray___setitem__(arg1,arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatArray_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + floatArray *arg1 = (floatArray *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:floatArray_cast",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray_cast" "', argument " "1"" of type '" "floatArray *""'"); + } + arg1 = reinterpret_cast< floatArray * >(argp1); + result = (float *)floatArray_cast(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_float, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatArray_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + float *arg1 = (float *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + floatArray *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:floatArray_frompointer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_float, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray_frompointer" "', argument " "1"" of type '" "float *""'"); + } + arg1 = reinterpret_cast< float * >(argp1); + result = (floatArray *)floatArray_frompointer(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_floatArray, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *floatArray_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_floatArray, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_strVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:strVector_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_iterator" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (swig::SwigPyIterator *)std_vector_Sl_std_string_Sg__iterator(arg1,arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___nonzero__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (bool)std_vector_Sl_std_string_Sg____nonzero__((std::vector< std::string > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___bool__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (bool)std_vector_Sl_std_string_Sg____bool__((std::vector< std::string > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___len__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = std_vector_Sl_std_string_Sg____len__((std::vector< std::string > const *)arg1); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_pop" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + try { + result = std_vector_Sl_std_string_Sg__pop(arg1); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_std_string(static_cast< std::string >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::string,std::allocator< std::string > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___getslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___getslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___getslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + try { + result = (std::vector< std::string,std::allocator< std::string > > *)std_vector_Sl_std_string_Sg____getslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + std::vector< std::string,std::allocator< std::string > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:strVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___setslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___setslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "strVector___setslice__" "', argument " "4"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector___setslice__" "', argument " "4"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + arg4 = ptr; + } + try { + std_vector_Sl_std_string_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< std::string,std::allocator< std::string > > const &)*arg4); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___setslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___setslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + try { + std_vector_Sl_std_string_Sg____setslice____SWIG_0(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_strVector___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_strVector___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__setslice__(std::vector< std::string >::difference_type,std::vector< std::string >::difference_type,std::vector< std::string,std::allocator< std::string > > const &)\n" + " std::vector< std::string >::__setslice__(std::vector< std::string >::difference_type,std::vector< std::string >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_strVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___delslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___delslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___delslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg3 = static_cast< std::vector< std::string >::difference_type >(val3); + try { + std_vector_Sl_std_string_Sg____delslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___delitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___delitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + try { + std_vector_Sl_std_string_Sg____delitem____SWIG_0(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string,std::allocator< std::string > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___getitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + result = (std::vector< std::string,std::allocator< std::string > > *)std_vector_Sl_std_string_Sg____getitem____SWIG_0(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< std::string,std::allocator< std::string > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + arg3 = ptr; + } + try { + std_vector_Sl_std_string_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< std::string,std::allocator< std::string > > const &)*arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + std_vector_Sl_std_string_Sg____setitem____SWIG_1(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___delitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + std_vector_Sl_std_string_Sg____delitem____SWIG_1(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_strVector___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_strVector___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__delitem__(std::vector< std::string >::difference_type)\n" + " std::vector< std::string >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_strVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___getitem__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___getitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + try { + result = (std::vector< std::string >::value_type *) &std_vector_Sl_std_string_Sg____getitem____SWIG_1((std::vector< std::string > const *)arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_strVector___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_strVector___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__getitem__(PySliceObject *)\n" + " std::vector< std::string >::__getitem__(std::vector< std::string >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_strVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::difference_type arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___setitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); + } + arg2 = static_cast< std::vector< std::string >::difference_type >(val2); + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + try { + std_vector_Sl_std_string_Sg____setitem____SWIG_2(arg1,arg2,(std::string const &)*arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_strVector___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_strVector___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_strVector___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::__setitem__(PySliceObject *,std::vector< std::string,std::allocator< std::string > > const &)\n" + " std::vector< std::string >::__setitem__(PySliceObject *)\n" + " std::vector< std::string >::__setitem__(std::vector< std::string >::difference_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_strVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_append" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strVector_append" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_append" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg2 = ptr; + } + std_vector_Sl_std_string_Sg__append(arg1,(std::string const &)*arg2); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_strVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_strVector")) SWIG_fail; + result = (std::vector< std::string > *)new std::vector< std::string >(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_strVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_strVector",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string > const &""'"); + } + arg1 = ptr; + } + result = (std::vector< std::string > *)new std::vector< std::string >((std::vector< std::string > const &)*arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_empty" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (bool)((std::vector< std::string > const *)arg1)->empty(); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_size" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = ((std::vector< std::string > const *)arg1)->size(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_clear" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + (arg1)->clear(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_swap" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strVector_swap" "', argument " "2"" of type '" "std::vector< std::string > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_swap" "', argument " "2"" of type '" "std::vector< std::string > &""'"); + } + arg2 = reinterpret_cast< std::vector< std::string > * >(argp2); + (arg1)->swap(*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< std::string > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_get_allocator" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = ((std::vector< std::string > const *)arg1)->get_allocator(); + resultobj = SWIG_NewPointerObj((new std::vector< std::string >::allocator_type(static_cast< const std::vector< std::string >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_std__string_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_begin" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (arg1)->begin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_end" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (arg1)->end(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_rbegin" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (arg1)->rbegin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_rend" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (arg1)->rend(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_strVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_strVector",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string >::size_type""'"); + } + arg1 = static_cast< std::vector< std::string >::size_type >(val1); + result = (std::vector< std::string > *)new std::vector< std::string >(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_pop_back" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + (arg1)->pop_back(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_resize" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_resize" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + (arg1)->resize(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_erase" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + result = (arg1)->erase(arg2); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + std::vector< std::string >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_erase" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "3"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "3"" of type '" "std::vector< std::string >::iterator""'"); + } + } + result = (arg1)->erase(arg2,arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_strVector_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_strVector_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::erase(std::vector< std::string >::iterator)\n" + " std::vector< std::string >::erase(std::vector< std::string >::iterator,std::vector< std::string >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_strVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string >::size_type arg1 ; + std::vector< std::string >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< std::string > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_strVector",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string >::size_type""'"); + } + arg1 = static_cast< std::vector< std::string >::size_type >(val1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_strVector" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_strVector" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg2 = ptr; + } + result = (std::vector< std::string > *)new std::vector< std::string >(arg1,(std::vector< std::string >::value_type const &)*arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_strVector(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_strVector__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_strVector__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_strVector__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_strVector__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_strVector'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::vector()\n" + " std::vector< std::string >::vector(std::vector< std::string > const &)\n" + " std::vector< std::string >::vector(std::vector< std::string >::size_type)\n" + " std::vector< std::string >::vector(std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_strVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_push_back" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strVector_push_back" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_push_back" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg2 = ptr; + } + (arg1)->push_back((std::vector< std::string >::value_type const &)*arg2); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_front" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (std::vector< std::string >::value_type *) &((std::vector< std::string > const *)arg1)->front(); + resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_back" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = (std::vector< std::string >::value_type *) &((std::vector< std::string > const *)arg1)->back(); + resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_assign" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_assign" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector_assign" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_assign" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + (arg1)->assign(arg2,(std::vector< std::string >::value_type const &)*arg3); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_resize" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_resize" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector_resize" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_resize" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + (arg1)->resize(arg2,(std::vector< std::string >::value_type const &)*arg3); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_strVector_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_strVector_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::resize(std::vector< std::string >::size_type)\n" + " std::vector< std::string >::resize(std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_strVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + std::vector< std::string >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< std::string >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_insert" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + { + std::string *ptr = (std::string *)0; + res3 = SWIG_AsPtr_std_string(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector_insert" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_insert" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg3 = ptr; + } + result = (arg1)->insert(arg2,(std::vector< std::string >::value_type const &)*arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::iterator arg2 ; + std::vector< std::string >::size_type arg3 ; + std::vector< std::string >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:strVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_insert" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector_insert" "', argument " "3"" of type '" "std::vector< std::string >::size_type""'"); + } + arg3 = static_cast< std::vector< std::string >::size_type >(val3); + { + std::string *ptr = (std::string *)0; + res4 = SWIG_AsPtr_std_string(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "strVector_insert" "', argument " "4"" of type '" "std::vector< std::string >::value_type const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_insert" "', argument " "4"" of type '" "std::vector< std::string >::value_type const &""'"); + } + arg4 = ptr; + } + (arg1)->insert(arg2,arg3,(std::vector< std::string >::value_type const &)*arg4); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_strVector_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = SWIG_AsPtr_std_string(argv[3], (std::string**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_strVector_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< std::string >::insert(std::vector< std::string >::iterator,std::vector< std::string >::value_type const &)\n" + " std::vector< std::string >::insert(std::vector< std::string >::iterator,std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_strVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + std::vector< std::string >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:strVector_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_reserve" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_reserve" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); + } + arg2 = static_cast< std::vector< std::string >::size_type >(val2); + (arg1)->reserve(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_strVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:strVector_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_capacity" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + result = ((std::vector< std::string > const *)arg1)->capacity(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_strVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_strVector",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_strVector" "', argument " "1"" of type '" "std::vector< std::string > *""'"); + } + arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *strVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_intVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:intVector_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_iterator" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (swig::SwigPyIterator *)std_vector_Sl_int_Sg__iterator(arg1,arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___nonzero__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (bool)std_vector_Sl_int_Sg____nonzero__((std::vector< int > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___bool__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (bool)std_vector_Sl_int_Sg____bool__((std::vector< int > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___len__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = std_vector_Sl_int_Sg____len__((std::vector< int > const *)arg1); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_pop" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + try { + result = (std::vector< int >::value_type)std_vector_Sl_int_Sg__pop(arg1); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_int(static_cast< int >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< int,std::allocator< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___getslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___getslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___getslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + try { + result = (std::vector< int,std::allocator< int > > *)std_vector_Sl_int_Sg____getslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + std::vector< int,std::allocator< int > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:intVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___setslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___setslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "intVector___setslice__" "', argument " "4"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "intVector___setslice__" "', argument " "4"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + arg4 = ptr; + } + try { + std_vector_Sl_int_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< int,std::allocator< int > > const &)*arg4); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___setslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___setslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + try { + std_vector_Sl_int_Sg____setslice____SWIG_0(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_intVector___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__setslice__(std::vector< int >::difference_type,std::vector< int >::difference_type,std::vector< int,std::allocator< int > > const &)\n" + " std::vector< int >::__setslice__(std::vector< int >::difference_type,std::vector< int >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_intVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___delslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___delslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___delslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); + } + arg3 = static_cast< std::vector< int >::difference_type >(val3); + try { + std_vector_Sl_int_Sg____delslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___delitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___delitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + try { + std_vector_Sl_int_Sg____delitem____SWIG_0(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int,std::allocator< int > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___getitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + result = (std::vector< int,std::allocator< int > > *)std_vector_Sl_int_Sg____getitem____SWIG_0(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< int,std::allocator< int > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "intVector___setitem__" "', argument " "3"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "intVector___setitem__" "', argument " "3"" of type '" "std::vector< int,std::allocator< int > > const &""'"); + } + arg3 = ptr; + } + try { + std_vector_Sl_int_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< int,std::allocator< int > > const &)*arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + std_vector_Sl_int_Sg____setitem____SWIG_1(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___delitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + std_vector_Sl_int_Sg____delitem____SWIG_1(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_intVector___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__delitem__(std::vector< int >::difference_type)\n" + " std::vector< int >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_intVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___getitem__" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___getitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + try { + result = (std::vector< int >::value_type *) &std_vector_Sl_int_Sg____getitem____SWIG_1((std::vector< int > const *)arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_int(static_cast< int >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_intVector___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__getitem__(PySliceObject *)\n" + " std::vector< int >::__getitem__(std::vector< int >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_intVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::difference_type arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___setitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); + } + arg2 = static_cast< std::vector< int >::difference_type >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___setitem__" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + try { + std_vector_Sl_int_Sg____setitem____SWIG_2(arg1,arg2,(int const &)*arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_intVector___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_intVector___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::__setitem__(PySliceObject *,std::vector< int,std::allocator< int > > const &)\n" + " std::vector< int >::__setitem__(PySliceObject *)\n" + " std::vector< int >::__setitem__(std::vector< int >::difference_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_intVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< int >::value_type temp2 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_append" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_append" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); + } + temp2 = static_cast< std::vector< int >::value_type >(val2); + arg2 = &temp2; + std_vector_Sl_int_Sg__append(arg1,(int const &)*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_intVector")) SWIG_fail; + result = (std::vector< int > *)new std::vector< int >(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_intVector",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int > const &""'"); + } + arg1 = ptr; + } + result = (std::vector< int > *)new std::vector< int >((std::vector< int > const &)*arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_empty" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (bool)((std::vector< int > const *)arg1)->empty(); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_size" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = ((std::vector< int > const *)arg1)->size(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_clear" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + (arg1)->clear(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_swap" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "intVector_swap" "', argument " "2"" of type '" "std::vector< int > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "intVector_swap" "', argument " "2"" of type '" "std::vector< int > &""'"); + } + arg2 = reinterpret_cast< std::vector< int > * >(argp2); + (arg1)->swap(*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< int > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_get_allocator" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = ((std::vector< int > const *)arg1)->get_allocator(); + resultobj = SWIG_NewPointerObj((new std::vector< int >::allocator_type(static_cast< const std::vector< int >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_int_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_begin" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (arg1)->begin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_end" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (arg1)->end(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_rbegin" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (arg1)->rbegin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_rend" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (arg1)->rend(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_intVector",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int >::size_type""'"); + } + arg1 = static_cast< std::vector< int >::size_type >(val1); + result = (std::vector< int > *)new std::vector< int >(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_pop_back" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + (arg1)->pop_back(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_resize" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_resize" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + (arg1)->resize(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_erase" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + result = (arg1)->erase(arg2); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + std::vector< int >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_erase" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "3"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "3"" of type '" "std::vector< int >::iterator""'"); + } + } + result = (arg1)->erase(arg2,arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_intVector_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_intVector_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::erase(std::vector< int >::iterator)\n" + " std::vector< int >::erase(std::vector< int >::iterator,std::vector< int >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_intVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int >::size_type arg1 ; + std::vector< int >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + std::vector< int >::value_type temp2 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< int > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_intVector",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int >::size_type""'"); + } + arg1 = static_cast< std::vector< int >::size_type >(val1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_intVector" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); + } + temp2 = static_cast< std::vector< int >::value_type >(val2); + arg2 = &temp2; + result = (std::vector< int > *)new std::vector< int >(arg1,(std::vector< int >::value_type const &)*arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_intVector(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_intVector__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_intVector__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_intVector__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_intVector__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_intVector'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::vector()\n" + " std::vector< int >::vector(std::vector< int > const &)\n" + " std::vector< int >::vector(std::vector< int >::size_type)\n" + " std::vector< int >::vector(std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_intVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< int >::value_type temp2 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_push_back" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_push_back" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); + } + temp2 = static_cast< std::vector< int >::value_type >(val2); + arg2 = &temp2; + (arg1)->push_back((std::vector< int >::value_type const &)*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_front" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (std::vector< int >::value_type *) &((std::vector< int > const *)arg1)->front(); + resultobj = SWIG_From_int(static_cast< int >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_back" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = (std::vector< int >::value_type *) &((std::vector< int > const *)arg1)->back(); + resultobj = SWIG_From_int(static_cast< int >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_assign" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_assign" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_assign" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + (arg1)->assign(arg2,(std::vector< int >::value_type const &)*arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_resize" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_resize" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_resize" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + (arg1)->resize(arg2,(std::vector< int >::value_type const &)*arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::resize(std::vector< int >::size_type)\n" + " std::vector< int >::resize(std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_intVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + std::vector< int >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + std::vector< int >::value_type temp3 ; + int val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< int >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_insert" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_int(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_insert" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); + } + temp3 = static_cast< std::vector< int >::value_type >(val3); + arg3 = &temp3; + result = (arg1)->insert(arg2,(std::vector< int >::value_type const &)*arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::iterator arg2 ; + std::vector< int >::size_type arg3 ; + std::vector< int >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + std::vector< int >::value_type temp4 ; + int val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:intVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_insert" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_insert" "', argument " "3"" of type '" "std::vector< int >::size_type""'"); + } + arg3 = static_cast< std::vector< int >::size_type >(val3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "intVector_insert" "', argument " "4"" of type '" "std::vector< int >::value_type""'"); + } + temp4 = static_cast< std::vector< int >::value_type >(val4); + arg4 = &temp4; + (arg1)->insert(arg2,arg3,(std::vector< int >::value_type const &)*arg4); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_int(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_int(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_intVector_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< int >::insert(std::vector< int >::iterator,std::vector< int >::value_type const &)\n" + " std::vector< int >::insert(std::vector< int >::iterator,std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_intVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + std::vector< int >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:intVector_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_reserve" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_reserve" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); + } + arg2 = static_cast< std::vector< int >::size_type >(val2); + (arg1)->reserve(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_intVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< int >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:intVector_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_capacity" "', argument " "1"" of type '" "std::vector< int > const *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + result = ((std::vector< int > const *)arg1)->capacity(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_intVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< int > *arg1 = (std::vector< int > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_intVector",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intVector" "', argument " "1"" of type '" "std::vector< int > *""'"); + } + arg1 = reinterpret_cast< std::vector< int > * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *intVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_floatVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_iterator" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (swig::SwigPyIterator *)std_vector_Sl_float_Sg__iterator(arg1,arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___nonzero__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (bool)std_vector_Sl_float_Sg____nonzero__((std::vector< float > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___bool__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (bool)std_vector_Sl_float_Sg____bool__((std::vector< float > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___len__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = std_vector_Sl_float_Sg____len__((std::vector< float > const *)arg1); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_pop" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + try { + result = (std::vector< float >::value_type)std_vector_Sl_float_Sg__pop(arg1); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< float,std::allocator< float > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___getslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___getslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___getslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + try { + result = (std::vector< float,std::allocator< float > > *)std_vector_Sl_float_Sg____getslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + std::vector< float,std::allocator< float > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:floatVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___setslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___setslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "floatVector___setslice__" "', argument " "4"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "floatVector___setslice__" "', argument " "4"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + arg4 = ptr; + } + try { + std_vector_Sl_float_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< float,std::allocator< float > > const &)*arg4); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___setslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___setslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + try { + std_vector_Sl_float_Sg____setslice____SWIG_0(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_floatVector___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__setslice__(std::vector< float >::difference_type,std::vector< float >::difference_type,std::vector< float,std::allocator< float > > const &)\n" + " std::vector< float >::__setslice__(std::vector< float >::difference_type,std::vector< float >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_floatVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___delslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___delslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___delslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); + } + arg3 = static_cast< std::vector< float >::difference_type >(val3); + try { + std_vector_Sl_float_Sg____delslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___delitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___delitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + try { + std_vector_Sl_float_Sg____delitem____SWIG_0(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float,std::allocator< float > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___getitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + result = (std::vector< float,std::allocator< float > > *)std_vector_Sl_float_Sg____getitem____SWIG_0(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< float,std::allocator< float > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "floatVector___setitem__" "', argument " "3"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "floatVector___setitem__" "', argument " "3"" of type '" "std::vector< float,std::allocator< float > > const &""'"); + } + arg3 = ptr; + } + try { + std_vector_Sl_float_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< float,std::allocator< float > > const &)*arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + std_vector_Sl_float_Sg____setitem____SWIG_1(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___delitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + try { + std_vector_Sl_float_Sg____delitem____SWIG_1(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_floatVector___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__delitem__(std::vector< float >::difference_type)\n" + " std::vector< float >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_floatVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___getitem__" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___getitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + try { + result = (std::vector< float >::value_type *) &std_vector_Sl_float_Sg____getitem____SWIG_1((std::vector< float > const *)arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_From_float(static_cast< float >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___getitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_floatVector___getitem____SWIG_0(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector___getitem____SWIG_1(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___getitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__getitem__(PySliceObject *)\n" + " std::vector< float >::__getitem__(std::vector< float >::difference_type) const\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_floatVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::difference_type arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___setitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); + } + arg2 = static_cast< std::vector< float >::difference_type >(val2); + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___setitem__" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + try { + std_vector_Sl_float_Sg____setitem____SWIG_2(arg1,arg2,(float const &)*arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector___setitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_floatVector___setitem____SWIG_1(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_floatVector___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector___setitem____SWIG_2(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___setitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::__setitem__(PySliceObject *,std::vector< float,std::allocator< float > > const &)\n" + " std::vector< float >::__setitem__(PySliceObject *)\n" + " std::vector< float >::__setitem__(std::vector< float >::difference_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_floatVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< float >::value_type temp2 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_append" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_append" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); + } + temp2 = static_cast< std::vector< float >::value_type >(val2); + arg2 = &temp2; + std_vector_Sl_float_Sg__append(arg1,(float const &)*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_floatVector")) SWIG_fail; + result = (std::vector< float > *)new std::vector< float >(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_floatVector",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float > const &""'"); + } + arg1 = ptr; + } + result = (std::vector< float > *)new std::vector< float >((std::vector< float > const &)*arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_empty" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (bool)((std::vector< float > const *)arg1)->empty(); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_size" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = ((std::vector< float > const *)arg1)->size(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_clear" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + (arg1)->clear(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_swap" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "floatVector_swap" "', argument " "2"" of type '" "std::vector< float > &""'"); + } + if (!argp2) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "floatVector_swap" "', argument " "2"" of type '" "std::vector< float > &""'"); + } + arg2 = reinterpret_cast< std::vector< float > * >(argp2); + (arg1)->swap(*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< float > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_get_allocator" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = ((std::vector< float > const *)arg1)->get_allocator(); + resultobj = SWIG_NewPointerObj((new std::vector< float >::allocator_type(static_cast< const std::vector< float >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_float_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_begin" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (arg1)->begin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_end" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (arg1)->end(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_rbegin" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (arg1)->rbegin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_rend" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (arg1)->rend(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_floatVector",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float >::size_type""'"); + } + arg1 = static_cast< std::vector< float >::size_type >(val1); + result = (std::vector< float > *)new std::vector< float >(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_pop_back" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + (arg1)->pop_back(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_resize" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_resize" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + (arg1)->resize(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_erase" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + result = (arg1)->erase(arg2); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + std::vector< float >::iterator arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_erase" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "3"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "3"" of type '" "std::vector< float >::iterator""'"); + } + } + result = (arg1)->erase(arg2,arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_floatVector_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_floatVector_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::erase(std::vector< float >::iterator)\n" + " std::vector< float >::erase(std::vector< float >::iterator,std::vector< float >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float >::size_type arg1 ; + std::vector< float >::value_type *arg2 = 0 ; + size_t val1 ; + int ecode1 = 0 ; + std::vector< float >::value_type temp2 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:new_floatVector",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float >::size_type""'"); + } + arg1 = static_cast< std::vector< float >::size_type >(val1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_floatVector" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); + } + temp2 = static_cast< std::vector< float >::value_type >(val2); + arg2 = &temp2; + result = (std::vector< float > *)new std::vector< float >(arg1,(std::vector< float >::value_type const &)*arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_floatVector(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_floatVector__SWIG_0(self, args); + } + if (argc == 1) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_floatVector__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_floatVector__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_floatVector__SWIG_3(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_floatVector'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::vector()\n" + " std::vector< float >::vector(std::vector< float > const &)\n" + " std::vector< float >::vector(std::vector< float >::size_type)\n" + " std::vector< float >::vector(std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_floatVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::value_type *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + std::vector< float >::value_type temp2 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_push_back" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_push_back" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); + } + temp2 = static_cast< std::vector< float >::value_type >(val2); + arg2 = &temp2; + (arg1)->push_back((std::vector< float >::value_type const &)*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_front" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (std::vector< float >::value_type *) &((std::vector< float > const *)arg1)->front(); + resultobj = SWIG_From_float(static_cast< float >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::value_type *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_back" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = (std::vector< float >::value_type *) &((std::vector< float > const *)arg1)->back(); + resultobj = SWIG_From_float(static_cast< float >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_assign" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_assign" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_assign" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + (arg1)->assign(arg2,(std::vector< float >::value_type const &)*arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_resize" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_resize" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_resize" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + (arg1)->resize(arg2,(std::vector< float >::value_type const &)*arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector_resize__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::resize(std::vector< float >::size_type)\n" + " std::vector< float >::resize(std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_floatVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + std::vector< float >::value_type *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + std::vector< float >::value_type temp3 ; + float val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< float >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_insert" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_float(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_insert" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); + } + temp3 = static_cast< std::vector< float >::value_type >(val3); + arg3 = &temp3; + result = (arg1)->insert(arg2,(std::vector< float >::value_type const &)*arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::iterator arg2 ; + std::vector< float >::size_type arg3 ; + std::vector< float >::value_type *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + std::vector< float >::value_type temp4 ; + float val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:floatVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_insert" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); + } + } + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_insert" "', argument " "3"" of type '" "std::vector< float >::size_type""'"); + } + arg3 = static_cast< std::vector< float >::size_type >(val3); + ecode4 = SWIG_AsVal_float(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "floatVector_insert" "', argument " "4"" of type '" "std::vector< float >::value_type""'"); + } + temp4 = static_cast< std::vector< float >::value_type >(val4); + arg4 = &temp4; + (arg1)->insert(arg2,arg3,(std::vector< float >::value_type const &)*arg4); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_insert(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_float(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector_insert__SWIG_0(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_float(argv[3], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_floatVector_insert__SWIG_1(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< float >::insert(std::vector< float >::iterator,std::vector< float >::value_type const &)\n" + " std::vector< float >::insert(std::vector< float >::iterator,std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_floatVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + std::vector< float >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_reserve" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_reserve" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); + } + arg2 = static_cast< std::vector< float >::size_type >(val2); + (arg1)->reserve(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_floatVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< float >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:floatVector_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_capacity" "', argument " "1"" of type '" "std::vector< float > const *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + result = ((std::vector< float > const *)arg1)->capacity(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_floatVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< float > *arg1 = (std::vector< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_floatVector",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_floatVector" "', argument " "1"" of type '" "std::vector< float > *""'"); + } + arg1 = reinterpret_cast< std::vector< float > * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *floatVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_layerVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + PyObject **arg2 = (PyObject **) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + swig::SwigPyIterator *result = 0 ; + + arg2 = &obj0; + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_iterator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_iterator" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (swig::SwigPyIterator *)std_vector_Sl_singa_Layer_Sm__Sg__iterator(arg1,arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector___nonzero__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___nonzero__" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (bool)std_vector_Sl_singa_Layer_Sm__Sg____nonzero__((std::vector< singa::Layer * > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector___bool__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___bool__" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (bool)std_vector_Sl_singa_Layer_Sm__Sg____bool__((std::vector< singa::Layer * > const *)arg1); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector___len__",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___len__" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = std_vector_Sl_singa_Layer_Sm__Sg____len__((std::vector< singa::Layer * > const *)arg1); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * >::value_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_pop",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_pop" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + try { + result = (std::vector< singa::Layer * >::value_type)std_vector_Sl_singa_Layer_Sm__Sg__pop(arg1); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::difference_type arg2 ; + std::vector< singa::Layer * >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___getslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___getslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___getslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); + try { + result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *)std_vector_Sl_singa_Layer_Sm__Sg____getslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::difference_type arg2 ; + std::vector< singa::Layer * >::difference_type arg3 ; + std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg4 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + int res4 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:layerVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___setslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___setslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); + { + std::vector > *ptr = (std::vector > *)0; + res4 = swig::asptr(obj3, &ptr); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "layerVector___setslice__" "', argument " "4"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "layerVector___setslice__" "', argument " "4"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); + } + arg4 = ptr; + } + try { + std_vector_Sl_singa_Layer_Sm__Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg4); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res4)) delete arg4; + return resultobj; +fail: + if (SWIG_IsNewObj(res4)) delete arg4; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::difference_type arg2 ; + std::vector< singa::Layer * >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___setslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___setslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); + try { + std_vector_Sl_singa_Layer_Sm__Sg____setslice____SWIG_0(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector___setslice__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[5]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 4) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_layerVector___setslice____SWIG_1(self, args); + } + } + } + } + if (argc == 4) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + int res = swig::asptr(argv[3], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_layerVector___setslice____SWIG_0(self, args); + } + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___setslice__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< singa::Layer * >::__setslice__(std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)\n" + " std::vector< singa::Layer * >::__setslice__(std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer * >::difference_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_layerVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::difference_type arg2 ; + std::vector< singa::Layer * >::difference_type arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + ptrdiff_t val3 ; + int ecode3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___delslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___delslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); + ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___delslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); + try { + std_vector_Sl_singa_Layer_Sm__Sg____delslice__(arg1,arg2,arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; } -SWIGINTERN int -SWIG_AsPtr_std_string (PyObject * obj, std::string **val) -{ - char* buf = 0 ; size_t size = 0; int alloc = SWIG_OLDOBJ; - if (SWIG_IsOK((SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc)))) { - if (buf) { - if (val) *val = new std::string(buf, size - 1); - if (alloc == SWIG_NEWOBJ) delete[] buf; - return SWIG_NEWOBJ; - } else { - if (val) *val = 0; - return SWIG_OLDOBJ; - } - } else { - static int init = 0; - static swig_type_info* descriptor = 0; - if (!init) { - descriptor = SWIG_TypeQuery("std::string" " *"); - init = 1; - } - if (descriptor) { - std::string *vptr; - int res = SWIG_ConvertPtr(obj, (void**)&vptr, descriptor, 0); - if (SWIG_IsOK(res) && val) *val = vptr; - return res; - } +SWIGINTERN PyObject *_wrap_layerVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::difference_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___delitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - return SWIG_ERROR; + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___delitem__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); + try { + std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_0(arg1,arg2); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; } -SWIGINTERN int -SWIG_AsArgcArgv(PyObject *input, - swig_type_info *ppchar_info, - size_t *argc, char ***argv, int *owner) -{ - void *vptr; - int res = SWIG_ConvertPtr(input, &vptr, ppchar_info, 0); - if (!SWIG_IsOK(res)) { - int list = 0; - PyErr_Clear(); - list = PyList_Check(input); - if (list || PyTuple_Check(input)) { - size_t i = 0; - size_t size = list ? PyList_Size(input) : PyTuple_Size(input); - if (argc) *argc = size; - if (argv) { - *argv = (new char*[size + 1]); - for (; i < size; ++i) { - PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); - char *cptr = 0; size_t sz = 0; int alloc = 0; - res = SWIG_AsCharPtrAndSize(obj, &cptr, &sz, &alloc); - if (SWIG_IsOK(res)) { - if (cptr && sz) { - (*argv)[i] = (alloc == SWIG_NEWOBJ) ? cptr : reinterpret_cast< char* >(memcpy((new char[sz]), cptr, sizeof(char)*(sz))); - } else { - (*argv)[i] = 0; - } - } else { - return SWIG_TypeError; - } - } - (*argv)[i] = 0; - if (owner) *owner = 1; - } else { - for (; i < size; ++i) { - PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); - res = SWIG_AsCharPtrAndSize(obj, 0, 0, 0); - if (!SWIG_IsOK(res)) return SWIG_TypeError; - } - if (owner) *owner = 0; - } - return SWIG_OK; - } else { - return SWIG_TypeError; +SWIGINTERN PyObject *_wrap_layerVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___getitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); } - } else { - /* seems dangerous, but the user asked for it... */ - size_t i = 0; - if (argv) { while (*argv[i] != 0) ++i;} - if (argc) *argc = i; - if (owner) *owner = 0; - return SWIG_OK; + arg2 = (PySliceObject *) obj1; + } + try { + result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *)std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_0(arg1,arg2); } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; } - - -#ifdef __cplusplus -extern "C" { -#endif -SWIGINTERN PyObject *_wrap_delete_SwigPyIterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; + std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg3 = 0 ; void *argp1 = 0 ; int res1 = 0 ; + int res3 = SWIG_OLDOBJ ; PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"O:delete_SwigPyIterator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SwigPyIterator" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - delete arg1; + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; + } + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "layerVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); + } + arg3 = ptr; + } + try { + std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_0(arg1,arg2,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg3); + } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); + } + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; return resultobj; fail: + if (SWIG_IsNewObj(res3)) delete arg3; return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; - PyObject *result = 0 ; + PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_value",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___setitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_value" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); try { - result = (PyObject *)((swig::SwigPyIterator const *)arg1)->value(); + std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_1(arg1,arg2); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); } - resultobj = result; + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - size_t arg2 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + PySliceObject *arg2 = (PySliceObject *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_incr",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___delitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___delitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + { + if (!PySlice_Check(obj1)) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); + } + arg2 = (PySliceObject *) obj1; } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_incr" "', argument " "2"" of type '" "size_t""'"); - } - arg2 = static_cast< size_t >(val2); try { - result = (swig::SwigPyIterator *)(arg1)->incr(arg2); + std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_1(arg1,arg2); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); + } + catch(std::invalid_argument &_e) { + SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); } - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector___delitem__(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_layerVector___delitem____SWIG_1(self, args); + } + } + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_layerVector___delitem____SWIG_0(self, args); + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___delitem__'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< singa::Layer * >::__delitem__(std::vector< singa::Layer * >::difference_type)\n" + " std::vector< singa::Layer * >::__delitem__(PySliceObject *)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_layerVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::difference_type arg2 ; void *argp1 = 0 ; int res1 = 0 ; + ptrdiff_t val2 ; + int ecode2 = 0 ; PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; + PyObject * obj1 = 0 ; + std::vector< singa::Layer * >::value_type result; - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_incr",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___getitem__",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___getitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___getitem__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); try { - result = (swig::SwigPyIterator *)(arg1)->incr(); + result = (std::vector< singa::Layer * >::value_type)std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_1(arg1,arg2); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); } - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector___getitem__(PyObject *self, PyObject *args) { int argc; PyObject *argv[3]; int ii; @@ -3752,711 +12781,1191 @@ SWIGINTERN PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) { for (ii = 0; (ii < 2) && (ii < argc); ii++) { argv[ii] = PyTuple_GET_ITEM(args,ii); } - if (argc == 1) { + if (argc == 2) { int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + int res = swig::asptr(argv[0], (std::vector >**)(0)); _v = SWIG_CheckState(res); if (_v) { - return _wrap_SwigPyIterator_incr__SWIG_1(self, args); + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_layerVector___getitem____SWIG_0(self, args); + } } } if (argc == 2) { int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + int res = swig::asptr(argv[0], (std::vector >**)(0)); _v = SWIG_CheckState(res); if (_v) { { - int res = SWIG_AsVal_size_t(argv[1], NULL); + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { - return _wrap_SwigPyIterator_incr__SWIG_0(self, args); + return _wrap_layerVector___getitem____SWIG_1(self, args); } } } fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_incr'.\n" + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___getitem__'.\n" " Possible C/C++ prototypes are:\n" - " swig::SwigPyIterator::incr(size_t)\n" - " swig::SwigPyIterator::incr()\n"); + " std::vector< singa::Layer * >::__getitem__(PySliceObject *)\n" + " std::vector< singa::Layer * >::__getitem__(std::vector< singa::Layer * >::difference_type)\n"); return 0; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - size_t arg2 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::difference_type arg2 ; + std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; void *argp1 = 0 ; int res1 = 0 ; - size_t val2 ; + ptrdiff_t val2 ; int ecode2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; + PyObject * obj2 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_decr",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_decr" "', argument " "2"" of type '" "size_t""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___setitem__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); } - arg2 = static_cast< size_t >(val2); - try { - result = (swig::SwigPyIterator *)(arg1)->decr(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_decr",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); + arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); try { - result = (swig::SwigPyIterator *)(arg1)->decr(); + std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_2(arg1,arg2,arg3); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } + catch(std::out_of_range &_e) { + SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); } - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_decr(PyObject *self, PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector___setitem__(PyObject *self, PyObject *args) { int argc; - PyObject *argv[3]; + PyObject *argv[4]; int ii; if (!PyTuple_Check(args)) SWIG_fail; argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { + for (ii = 0; (ii < 3) && (ii < argc); ii++) { argv[ii] = PyTuple_GET_ITEM(args,ii); } - if (argc == 1) { + if (argc == 2) { int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + int res = swig::asptr(argv[0], (std::vector >**)(0)); _v = SWIG_CheckState(res); if (_v) { - return _wrap_SwigPyIterator_decr__SWIG_1(self, args); + { + _v = PySlice_Check(argv[1]); + } + if (_v) { + return _wrap_layerVector___setitem____SWIG_1(self, args); + } } } - if (argc == 2) { + if (argc == 3) { int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + int res = swig::asptr(argv[0], (std::vector >**)(0)); _v = SWIG_CheckState(res); if (_v) { { - int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = PySlice_Check(argv[1]); + } + if (_v) { + int res = swig::asptr(argv[2], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_layerVector___setitem____SWIG_0(self, args); + } + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); _v = SWIG_CheckState(res); } if (_v) { - return _wrap_SwigPyIterator_decr__SWIG_0(self, args); + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Layer, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_layerVector___setitem____SWIG_2(self, args); + } } } } fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_decr'.\n" + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___setitem__'.\n" " Possible C/C++ prototypes are:\n" - " swig::SwigPyIterator::decr(size_t)\n" - " swig::SwigPyIterator::decr()\n"); + " std::vector< singa::Layer * >::__setitem__(PySliceObject *,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)\n" + " std::vector< singa::Layer * >::__setitem__(PySliceObject *)\n" + " std::vector< singa::Layer * >::__setitem__(std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer * >::value_type)\n"); return 0; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::value_type arg2 = (std::vector< singa::Layer * >::value_type) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - ptrdiff_t result; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_distance",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_append",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_distance" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_append" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "layerVector_append" "', argument " "2"" of type '" "std::vector< singa::Layer * >::value_type""'"); + } + arg2 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp2); + std_vector_Sl_singa_Layer_Sm__Sg__append(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_layerVector")) SWIG_fail; + result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = 0 ; + int res1 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:new_layerVector",&obj0)) SWIG_fail; + { + std::vector > *ptr = (std::vector > *)0; + res1 = swig::asptr(obj0, &ptr); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * > const &""'"); + } + arg1 = ptr; + } + result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >((std::vector< singa::Layer * > const &)*arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); + if (SWIG_IsNewObj(res1)) delete arg1; + return resultobj; +fail: + if (SWIG_IsNewObj(res1)) delete arg1; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + bool result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_empty",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_empty" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (bool)((std::vector< singa::Layer * > const *)arg1)->empty(); + resultobj = SWIG_From_bool(static_cast< bool >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_size",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_size" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = ((std::vector< singa::Layer * > const *)arg1)->size(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_clear",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_clear" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + (arg1)->clear(); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_swap",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_swap" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "layerVector_swap" "', argument " "2"" of type '" "std::vector< singa::Layer * > &""'"); } if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "layerVector_swap" "', argument " "2"" of type '" "std::vector< singa::Layer * > &""'"); } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - try { - result = ((swig::SwigPyIterator const *)arg1)->distance((swig::SwigPyIterator const &)*arg2); + arg2 = reinterpret_cast< std::vector< singa::Layer * > * >(argp2); + (arg1)->swap(*arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + SwigValueWrapper< std::allocator< singa::Layer * > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_get_allocator",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_get_allocator" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); } - catch(std::invalid_argument &_e) { - SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = ((std::vector< singa::Layer * > const *)arg1)->get_allocator(); + resultobj = SWIG_NewPointerObj((new std::vector< singa::Layer * >::allocator_type(static_cast< const std::vector< singa::Layer * >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_singa__Layer_p_t, SWIG_POINTER_OWN | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * >::iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_begin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_begin" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (arg1)->begin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * >::iterator result; - resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_end",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_end" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (arg1)->end(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - bool result; + std::vector< singa::Layer * >::reverse_iterator result; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_equal",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_rbegin",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_equal" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - try { - result = (bool)((swig::SwigPyIterator const *)arg1)->equal((swig::SwigPyIterator const &)*arg2); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_rbegin" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - catch(std::invalid_argument &_e) { - SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (arg1)->rbegin(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * >::reverse_iterator result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_rend",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_rend" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (arg1)->rend(); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::reverse_iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * >::size_type arg1 ; + size_t val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * > *result = 0 ; - resultobj = SWIG_From_bool(static_cast< bool >(result)); + if (!PyArg_ParseTuple(args,(char *)"O:new_layerVector",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * >::size_type""'"); + } + arg1 = static_cast< std::vector< singa::Layer * >::size_type >(val1); + result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_copy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_copy",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_pop_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_copy" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_pop_back" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->copy(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + (arg1)->pop_back(); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::size_type arg2 ; void *argp1 = 0 ; int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; PyObject * obj0 = 0 ; - PyObject *result = 0 ; + PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_next",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_resize",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_next" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (PyObject *)(arg1)->next(); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_resize" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = result; + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_resize" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); + (arg1)->resize(arg2); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___next__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::iterator arg2 ; void *argp1 = 0 ; int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; PyObject * obj0 = 0 ; - PyObject *result = 0 ; + PyObject * obj1 = 0 ; + std::vector< singa::Layer * >::iterator result; - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator___next__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_erase",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___next__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (PyObject *)(arg1)->__next__(); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_erase" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); } } - - resultobj = result; + result = (arg1)->erase(arg2); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_previous(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::iterator arg2 ; + std::vector< singa::Layer * >::iterator arg3 ; void *argp1 = 0 ; int res1 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + swig::SwigPyIterator *iter3 = 0 ; + int res3 ; PyObject * obj0 = 0 ; - PyObject *result = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + std::vector< singa::Layer * >::iterator result; - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_previous",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_previous" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_erase" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (PyObject *)(arg1)->previous(); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); + } } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; + res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res3) || !iter3) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "3"" of type '" "std::vector< singa::Layer * >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); + if (iter_t) { + arg3 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "3"" of type '" "std::vector< singa::Layer * >::iterator""'"); } } - - resultobj = result; + result = (arg1)->erase(arg2,arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator_advance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_erase(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_layerVector_erase__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); + if (_v) { + return _wrap_layerVector_erase__SWIG_1(self, args); + } + } + } + } + +fail: + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector_erase'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< singa::Layer * >::erase(std::vector< singa::Layer * >::iterator)\n" + " std::vector< singa::Layer * >::erase(std::vector< singa::Layer * >::iterator,std::vector< singa::Layer * >::iterator)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; + std::vector< singa::Layer * >::size_type arg1 ; + std::vector< singa::Layer * >::value_type arg2 = (std::vector< singa::Layer * >::value_type) 0 ; + size_t val1 ; + int ecode1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; + std::vector< singa::Layer * > *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_advance",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_advance" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_advance" "', argument " "2"" of type '" "ptrdiff_t""'"); + if (!PyArg_ParseTuple(args,(char *)"OO:new_layerVector",&obj0,&obj1)) SWIG_fail; + ecode1 = SWIG_AsVal_size_t(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * >::size_type""'"); } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *)(arg1)->advance(arg2); + arg1 = static_cast< std::vector< singa::Layer * >::size_type >(val1); + res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_layerVector" "', argument " "2"" of type '" "std::vector< singa::Layer * >::value_type""'"); } - catch(swig::stop_iteration &_e) { + arg2 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp2); + result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >(arg1,arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_layerVector(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[3]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 2) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 0) { + return _wrap_new_layerVector__SWIG_0(self, args); + } + if (argc == 1) { + int _v; { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_new_layerVector__SWIG_2(self, args); + } + } + if (argc == 1) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_layerVector__SWIG_1(self, args); + } + } + if (argc == 2) { + int _v; + { + int res = SWIG_AsVal_size_t(argv[0], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_singa__Layer, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_new_layerVector__SWIG_3(self, args); + } } } - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - return resultobj; fail: - return NULL; + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_layerVector'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< singa::Layer * >::vector()\n" + " std::vector< singa::Layer * >::vector(std::vector< singa::Layer * > const &)\n" + " std::vector< singa::Layer * >::vector(std::vector< singa::Layer * >::size_type)\n" + " std::vector< singa::Layer * >::vector(std::vector< singa::Layer * >::size_type,std::vector< singa::Layer * >::value_type)\n"); + return 0; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::value_type arg2 = (std::vector< singa::Layer * >::value_type) 0 ; void *argp1 = 0 ; int res1 = 0 ; void *argp2 = 0 ; int res2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - bool result; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___eq__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_push_back",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___eq__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_push_back" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "layerVector_push_back" "', argument " "2"" of type '" "std::vector< singa::Layer * >::value_type""'"); } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - result = (bool)((swig::SwigPyIterator const *)arg1)->operator ==((swig::SwigPyIterator const &)*arg2); - resultobj = SWIG_From_bool(static_cast< bool >(result)); + arg2 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp2); + (arg1)->push_back(arg2); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - bool result; + std::vector< singa::Layer * >::value_type result; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___ne__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_front",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___ne__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_front" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - result = (bool)((swig::SwigPyIterator const *)arg1)->operator !=((swig::SwigPyIterator const &)*arg2); - resultobj = SWIG_From_bool(static_cast< bool >(result)); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (std::vector< singa::Layer * >::value_type)((std::vector< singa::Layer * > const *)arg1)->front(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; + std::vector< singa::Layer * >::value_type result; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___iadd__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_back",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___iadd__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___iadd__" "', argument " "2"" of type '" "ptrdiff_t""'"); - } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *) &(arg1)->operator +=(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_back" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = (std::vector< singa::Layer * >::value_type)((std::vector< singa::Layer * > const *)arg1)->back(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::size_type arg2 ; + std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; void *argp1 = 0 ; int res1 = 0 ; - ptrdiff_t val2 ; + size_t val2 ; int ecode2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; + PyObject * obj2 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___isub__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___isub__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_assign" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___isub__" "', argument " "2"" of type '" "ptrdiff_t""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_assign" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *) &(arg1)->operator -=(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } + arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector_assign" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); + (arg1)->assign(arg2,arg3); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::size_type arg2 ; + std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; void *argp1 = 0 ; int res1 = 0 ; - ptrdiff_t val2 ; + size_t val2 ; int ecode2 = 0 ; + void *argp3 = 0 ; + int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; + PyObject * obj2 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___add__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___add__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_resize" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___add__" "', argument " "2"" of type '" "ptrdiff_t""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_resize" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator +(arg2); + arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector_resize" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; + arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); + (arg1)->resize(arg2,arg3); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_resize(PyObject *self, PyObject *args) { + int argc; + PyObject *argv[4]; + int ii; + + if (!PyTuple_Check(args)) SWIG_fail; + argc = args ? (int)PyObject_Length(args) : 0; + for (ii = 0; (ii < 3) && (ii < argc); ii++) { + argv[ii] = PyTuple_GET_ITEM(args,ii); + } + if (argc == 2) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + return _wrap_layerVector_resize__SWIG_0(self, args); + } + } + } + if (argc == 3) { + int _v; + int res = swig::asptr(argv[0], (std::vector >**)(0)); + _v = SWIG_CheckState(res); + if (_v) { + { + int res = SWIG_AsVal_size_t(argv[1], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Layer, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_layerVector_resize__SWIG_1(self, args); + } + } } } - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; fail: - return NULL; + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector_resize'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< singa::Layer * >::resize(std::vector< singa::Layer * >::size_type)\n" + " std::vector< singa::Layer * >::resize(std::vector< singa::Layer * >::size_type,std::vector< singa::Layer * >::value_type)\n"); + return 0; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::iterator arg2 ; + std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; void *argp1 = 0 ; int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + void *argp3 = 0 ; + int res3 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; + PyObject * obj2 = 0 ; + std::vector< singa::Layer * >::iterator result; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "ptrdiff_t""'"); - } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator -(arg2); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_insert" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); } } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); + res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector_insert" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); + } + arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); + result = (arg1)->insert(arg2,arg3); + resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), + swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::iterator arg2 ; + std::vector< singa::Layer * >::size_type arg3 ; + std::vector< singa::Layer * >::value_type arg4 = (std::vector< singa::Layer * >::value_type) 0 ; void *argp1 = 0 ; int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; + swig::SwigPyIterator *iter2 = 0 ; + int res2 ; + size_t val3 ; + int ecode3 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - ptrdiff_t result; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OOOO:layerVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_insert" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); + if (!SWIG_IsOK(res2) || !iter2) { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); + } else { + swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); + if (iter_t) { + arg2 = iter_t->get_current(); + } else { + SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); + } } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); + ecode3 = SWIG_AsVal_size_t(obj2, &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector_insert" "', argument " "3"" of type '" "std::vector< singa::Layer * >::size_type""'"); + } + arg3 = static_cast< std::vector< singa::Layer * >::size_type >(val3); + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "layerVector_insert" "', argument " "4"" of type '" "std::vector< singa::Layer * >::value_type""'"); } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - result = ((swig::SwigPyIterator const *)arg1)->operator -((swig::SwigPyIterator const &)*arg2); - resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); + arg4 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp4); + (arg1)->insert(arg2,arg3,arg4); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_SwigPyIterator___sub__(PyObject *self, PyObject *args) { +SWIGINTERN PyObject *_wrap_layerVector_insert(PyObject *self, PyObject *args) { int argc; - PyObject *argv[3]; + PyObject *argv[5]; int ii; if (!PyTuple_Check(args)) SWIG_fail; argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { + for (ii = 0; (ii < 4) && (ii < argc); ii++) { argv[ii] = PyTuple_GET_ITEM(args,ii); } - if (argc == 2) { + if (argc == 3) { int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + int res = swig::asptr(argv[0], (std::vector >**)(0)); _v = SWIG_CheckState(res); if (_v) { - int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); if (_v) { - return _wrap_SwigPyIterator___sub____SWIG_1(self, args); + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Layer, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_layerVector_insert__SWIG_0(self, args); + } } } } - if (argc == 2) { + if (argc == 4) { int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); + int res = swig::asptr(argv[0], (std::vector >**)(0)); _v = SWIG_CheckState(res); if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } + swig::SwigPyIterator *iter = 0; + int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); + _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); if (_v) { - return _wrap_SwigPyIterator___sub____SWIG_0(self, args); + { + int res = SWIG_AsVal_size_t(argv[2], NULL); + _v = SWIG_CheckState(res); + } + if (_v) { + void *vptr = 0; + int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_singa__Layer, 0); + _v = SWIG_CheckState(res); + if (_v) { + return _wrap_layerVector_insert__SWIG_1(self, args); + } + } } } } fail: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; + SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector_insert'.\n" + " Possible C/C++ prototypes are:\n" + " std::vector< singa::Layer * >::insert(std::vector< singa::Layer * >::iterator,std::vector< singa::Layer * >::value_type)\n" + " std::vector< singa::Layer * >::insert(std::vector< singa::Layer * >::iterator,std::vector< singa::Layer * >::size_type,std::vector< singa::Layer * >::value_type)\n"); + return 0; +} + + +SWIGINTERN PyObject *_wrap_layerVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + std::vector< singa::Layer * >::size_type arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + size_t val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_reserve",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_reserve" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + ecode2 = SWIG_AsVal_size_t(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_reserve" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); + } + arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); + (arg1)->reserve(arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_layerVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer * >::size_type result; + + if (!PyArg_ParseTuple(args,(char *)"O:layerVector_capacity",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_capacity" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + result = ((std::vector< singa::Layer * > const *)arg1)->capacity(); + resultobj = SWIG_From_size_t(static_cast< size_t >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_layerVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_layerVector",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); + } + arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; } -SWIGINTERN PyObject *SwigPyIterator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *layerVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_swig__SwigPyIterator, SWIG_NewClientData(obj)); + SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_NewClientData(obj)); return SWIG_Py_Void(); } @@ -4657,6 +14166,421 @@ SWIGINTERN PyObject *Driver_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObjec return SWIG_Py_Void(); } +SWIGINTERN PyObject *_wrap_NeuralNet_CreateForTest(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string arg1 ; + PyObject * obj0 = 0 ; + singa::NeuralNet *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:NeuralNet_CreateForTest",&obj0)) SWIG_fail; + { + std::string *ptr = (std::string *)0; + int res = SWIG_AsPtr_std_string(obj0, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "NeuralNet_CreateForTest" "', argument " "1"" of type '" "std::string const""'"); + } + arg1 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + result = (singa::NeuralNet *)singa::NeuralNet::CreateForTest(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_NeuralNet_Load(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; + std::vector< std::string,std::allocator< std::string > > *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:NeuralNet_Load",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "NeuralNet_Load" "', argument " "1"" of type '" "singa::NeuralNet *""'"); + } + arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); + { + std::vector > *ptr = (std::vector > *)0; + res2 = swig::asptr(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "NeuralNet_Load" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "NeuralNet_Load" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); + } + arg2 = ptr; + } + (arg1)->Load((std::vector< std::string,std::allocator< std::string > > const &)*arg2); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_NeuralNet_layers(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:NeuralNet_layers",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "NeuralNet_layers" "', argument " "1"" of type '" "singa::NeuralNet *""'"); + } + arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); + result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *) &(arg1)->layers(); + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_NeuralNet_srclayers(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; + singa::Layer *arg2 = (singa::Layer *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:NeuralNet_srclayers",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "NeuralNet_srclayers" "', argument " "1"" of type '" "singa::NeuralNet *""'"); + } + arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "NeuralNet_srclayers" "', argument " "2"" of type '" "singa::Layer const *""'"); + } + arg2 = reinterpret_cast< singa::Layer * >(argp2); + result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *) &(arg1)->srclayers((singa::Layer const *)arg2); + resultobj = swig::from(static_cast< std::vector > >(*result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_NeuralNet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::NeuralNet *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_NeuralNet")) SWIG_fail; + result = (singa::NeuralNet *)new singa::NeuralNet(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__NeuralNet, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_NeuralNet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_NeuralNet",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_NeuralNet" "', argument " "1"" of type '" "singa::NeuralNet *""'"); + } + arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *NeuralNet_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_singa__NeuralNet, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_DummyInputLayer_Feed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::DummyInputLayer *arg1 = (singa::DummyInputLayer *) 0 ; + int arg2 ; + std::vector< int,std::allocator< int > > arg3 ; + std::vector< float,std::allocator< float > > *arg4 = (std::vector< float,std::allocator< float > > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + void *argp4 = 0 ; + int res4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:DummyInputLayer_Feed",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__DummyInputLayer, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DummyInputLayer_Feed" "', argument " "1"" of type '" "singa::DummyInputLayer *""'"); + } + arg1 = reinterpret_cast< singa::DummyInputLayer * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "DummyInputLayer_Feed" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + { + std::vector > *ptr = (std::vector > *)0; + int res = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res) || !ptr) { + SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "DummyInputLayer_Feed" "', argument " "3"" of type '" "std::vector< int,std::allocator< int > >""'"); + } + arg3 = *ptr; + if (SWIG_IsNewObj(res)) delete ptr; + } + res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); + if (!SWIG_IsOK(res4)) { + SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "DummyInputLayer_Feed" "', argument " "4"" of type '" "std::vector< float,std::allocator< float > > *""'"); + } + arg4 = reinterpret_cast< std::vector< float,std::allocator< float > > * >(argp4); + (arg1)->Feed(arg2,arg3,arg4); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_DummyInputLayer_ToLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::DummyInputLayer *arg1 = (singa::DummyInputLayer *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + singa::Layer *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:DummyInputLayer_ToLayer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__DummyInputLayer, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DummyInputLayer_ToLayer" "', argument " "1"" of type '" "singa::DummyInputLayer *""'"); + } + arg1 = reinterpret_cast< singa::DummyInputLayer * >(argp1); + result = (singa::Layer *)(arg1)->ToLayer(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_DummyInputLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::DummyInputLayer *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_DummyInputLayer")) SWIG_fail; + result = (singa::DummyInputLayer *)new singa::DummyInputLayer(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__DummyInputLayer, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_DummyInputLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::DummyInputLayer *arg1 = (singa::DummyInputLayer *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_DummyInputLayer",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__DummyInputLayer, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_DummyInputLayer" "', argument " "1"" of type '" "singa::DummyInputLayer *""'"); + } + arg1 = reinterpret_cast< singa::DummyInputLayer * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *DummyInputLayer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_singa__DummyInputLayer, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_Layer_ComputeFeature(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::Layer *arg1 = (singa::Layer *) 0 ; + int arg2 ; + std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg3 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + int res3 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOO:Layer_ComputeFeature",&obj0,&obj1,&obj2)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_ComputeFeature" "', argument " "1"" of type '" "singa::Layer *""'"); + } + arg1 = reinterpret_cast< singa::Layer * >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Layer_ComputeFeature" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + { + std::vector > *ptr = (std::vector > *)0; + res3 = swig::asptr(obj2, &ptr); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Layer_ComputeFeature" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Layer_ComputeFeature" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); + } + arg3 = ptr; + } + (arg1)->ComputeFeature(arg2,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg3); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res3)) delete arg3; + return resultobj; +fail: + if (SWIG_IsNewObj(res3)) delete arg3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_Layer_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::Layer *arg1 = (singa::Layer *) 0 ; + singa::Layer *arg2 = (singa::Layer *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + singa::Blob< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:Layer_data",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_data" "', argument " "1"" of type '" "singa::Layer *""'"); + } + arg1 = reinterpret_cast< singa::Layer * >(argp1); + res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Layer_data" "', argument " "2"" of type '" "singa::Layer const *""'"); + } + arg2 = reinterpret_cast< singa::Layer * >(argp2); + result = (singa::Blob< float > *) &(arg1)->data((singa::Layer const *)arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__BlobT_float_t, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *Layer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_singa__Layer, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_floatBlob_mutable_cpu_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::Blob< float > *arg1 = (singa::Blob< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:floatBlob_mutable_cpu_data",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__BlobT_float_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatBlob_mutable_cpu_data" "', argument " "1"" of type '" "singa::Blob< float > *""'"); + } + arg1 = reinterpret_cast< singa::Blob< float > * >(argp1); + result = (float *)(arg1)->mutable_cpu_data(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_float, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_floatBlob(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::Blob< float > *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_floatBlob")) SWIG_fail; + result = (singa::Blob< float > *)new singa::Blob< float >(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__BlobT_float_t, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_floatBlob(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + singa::Blob< float > *arg1 = (singa::Blob< float > *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_floatBlob",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__BlobT_float_t, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_floatBlob" "', argument " "1"" of type '" "singa::Blob< float > *""'"); + } + arg1 = reinterpret_cast< singa::Blob< float > * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *floatBlob_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_singa__BlobT_float_t, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + static PyMethodDef SwigMethods[] = { { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, { (char *)"delete_SwigPyIterator", _wrap_delete_SwigPyIterator, METH_VARARGS, NULL}, @@ -4677,6 +14601,149 @@ static PyMethodDef SwigMethods[] = { { (char *)"SwigPyIterator___add__", _wrap_SwigPyIterator___add__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator___sub__", _wrap_SwigPyIterator___sub__, METH_VARARGS, NULL}, { (char *)"SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_VARARGS, NULL}, + { (char *)"new_floatArray", _wrap_new_floatArray, METH_VARARGS, NULL}, + { (char *)"delete_floatArray", _wrap_delete_floatArray, METH_VARARGS, NULL}, + { (char *)"floatArray___getitem__", _wrap_floatArray___getitem__, METH_VARARGS, NULL}, + { (char *)"floatArray___setitem__", _wrap_floatArray___setitem__, METH_VARARGS, NULL}, + { (char *)"floatArray_cast", _wrap_floatArray_cast, METH_VARARGS, NULL}, + { (char *)"floatArray_frompointer", _wrap_floatArray_frompointer, METH_VARARGS, NULL}, + { (char *)"floatArray_swigregister", floatArray_swigregister, METH_VARARGS, NULL}, + { (char *)"strVector_iterator", _wrap_strVector_iterator, METH_VARARGS, NULL}, + { (char *)"strVector___nonzero__", _wrap_strVector___nonzero__, METH_VARARGS, NULL}, + { (char *)"strVector___bool__", _wrap_strVector___bool__, METH_VARARGS, NULL}, + { (char *)"strVector___len__", _wrap_strVector___len__, METH_VARARGS, NULL}, + { (char *)"strVector_pop", _wrap_strVector_pop, METH_VARARGS, NULL}, + { (char *)"strVector___getslice__", _wrap_strVector___getslice__, METH_VARARGS, NULL}, + { (char *)"strVector___setslice__", _wrap_strVector___setslice__, METH_VARARGS, NULL}, + { (char *)"strVector___delslice__", _wrap_strVector___delslice__, METH_VARARGS, NULL}, + { (char *)"strVector___delitem__", _wrap_strVector___delitem__, METH_VARARGS, NULL}, + { (char *)"strVector___getitem__", _wrap_strVector___getitem__, METH_VARARGS, NULL}, + { (char *)"strVector___setitem__", _wrap_strVector___setitem__, METH_VARARGS, NULL}, + { (char *)"strVector_append", _wrap_strVector_append, METH_VARARGS, NULL}, + { (char *)"strVector_empty", _wrap_strVector_empty, METH_VARARGS, NULL}, + { (char *)"strVector_size", _wrap_strVector_size, METH_VARARGS, NULL}, + { (char *)"strVector_clear", _wrap_strVector_clear, METH_VARARGS, NULL}, + { (char *)"strVector_swap", _wrap_strVector_swap, METH_VARARGS, NULL}, + { (char *)"strVector_get_allocator", _wrap_strVector_get_allocator, METH_VARARGS, NULL}, + { (char *)"strVector_begin", _wrap_strVector_begin, METH_VARARGS, NULL}, + { (char *)"strVector_end", _wrap_strVector_end, METH_VARARGS, NULL}, + { (char *)"strVector_rbegin", _wrap_strVector_rbegin, METH_VARARGS, NULL}, + { (char *)"strVector_rend", _wrap_strVector_rend, METH_VARARGS, NULL}, + { (char *)"strVector_pop_back", _wrap_strVector_pop_back, METH_VARARGS, NULL}, + { (char *)"strVector_erase", _wrap_strVector_erase, METH_VARARGS, NULL}, + { (char *)"new_strVector", _wrap_new_strVector, METH_VARARGS, NULL}, + { (char *)"strVector_push_back", _wrap_strVector_push_back, METH_VARARGS, NULL}, + { (char *)"strVector_front", _wrap_strVector_front, METH_VARARGS, NULL}, + { (char *)"strVector_back", _wrap_strVector_back, METH_VARARGS, NULL}, + { (char *)"strVector_assign", _wrap_strVector_assign, METH_VARARGS, NULL}, + { (char *)"strVector_resize", _wrap_strVector_resize, METH_VARARGS, NULL}, + { (char *)"strVector_insert", _wrap_strVector_insert, METH_VARARGS, NULL}, + { (char *)"strVector_reserve", _wrap_strVector_reserve, METH_VARARGS, NULL}, + { (char *)"strVector_capacity", _wrap_strVector_capacity, METH_VARARGS, NULL}, + { (char *)"delete_strVector", _wrap_delete_strVector, METH_VARARGS, NULL}, + { (char *)"strVector_swigregister", strVector_swigregister, METH_VARARGS, NULL}, + { (char *)"intVector_iterator", _wrap_intVector_iterator, METH_VARARGS, NULL}, + { (char *)"intVector___nonzero__", _wrap_intVector___nonzero__, METH_VARARGS, NULL}, + { (char *)"intVector___bool__", _wrap_intVector___bool__, METH_VARARGS, NULL}, + { (char *)"intVector___len__", _wrap_intVector___len__, METH_VARARGS, NULL}, + { (char *)"intVector_pop", _wrap_intVector_pop, METH_VARARGS, NULL}, + { (char *)"intVector___getslice__", _wrap_intVector___getslice__, METH_VARARGS, NULL}, + { (char *)"intVector___setslice__", _wrap_intVector___setslice__, METH_VARARGS, NULL}, + { (char *)"intVector___delslice__", _wrap_intVector___delslice__, METH_VARARGS, NULL}, + { (char *)"intVector___delitem__", _wrap_intVector___delitem__, METH_VARARGS, NULL}, + { (char *)"intVector___getitem__", _wrap_intVector___getitem__, METH_VARARGS, NULL}, + { (char *)"intVector___setitem__", _wrap_intVector___setitem__, METH_VARARGS, NULL}, + { (char *)"intVector_append", _wrap_intVector_append, METH_VARARGS, NULL}, + { (char *)"intVector_empty", _wrap_intVector_empty, METH_VARARGS, NULL}, + { (char *)"intVector_size", _wrap_intVector_size, METH_VARARGS, NULL}, + { (char *)"intVector_clear", _wrap_intVector_clear, METH_VARARGS, NULL}, + { (char *)"intVector_swap", _wrap_intVector_swap, METH_VARARGS, NULL}, + { (char *)"intVector_get_allocator", _wrap_intVector_get_allocator, METH_VARARGS, NULL}, + { (char *)"intVector_begin", _wrap_intVector_begin, METH_VARARGS, NULL}, + { (char *)"intVector_end", _wrap_intVector_end, METH_VARARGS, NULL}, + { (char *)"intVector_rbegin", _wrap_intVector_rbegin, METH_VARARGS, NULL}, + { (char *)"intVector_rend", _wrap_intVector_rend, METH_VARARGS, NULL}, + { (char *)"intVector_pop_back", _wrap_intVector_pop_back, METH_VARARGS, NULL}, + { (char *)"intVector_erase", _wrap_intVector_erase, METH_VARARGS, NULL}, + { (char *)"new_intVector", _wrap_new_intVector, METH_VARARGS, NULL}, + { (char *)"intVector_push_back", _wrap_intVector_push_back, METH_VARARGS, NULL}, + { (char *)"intVector_front", _wrap_intVector_front, METH_VARARGS, NULL}, + { (char *)"intVector_back", _wrap_intVector_back, METH_VARARGS, NULL}, + { (char *)"intVector_assign", _wrap_intVector_assign, METH_VARARGS, NULL}, + { (char *)"intVector_resize", _wrap_intVector_resize, METH_VARARGS, NULL}, + { (char *)"intVector_insert", _wrap_intVector_insert, METH_VARARGS, NULL}, + { (char *)"intVector_reserve", _wrap_intVector_reserve, METH_VARARGS, NULL}, + { (char *)"intVector_capacity", _wrap_intVector_capacity, METH_VARARGS, NULL}, + { (char *)"delete_intVector", _wrap_delete_intVector, METH_VARARGS, NULL}, + { (char *)"intVector_swigregister", intVector_swigregister, METH_VARARGS, NULL}, + { (char *)"floatVector_iterator", _wrap_floatVector_iterator, METH_VARARGS, NULL}, + { (char *)"floatVector___nonzero__", _wrap_floatVector___nonzero__, METH_VARARGS, NULL}, + { (char *)"floatVector___bool__", _wrap_floatVector___bool__, METH_VARARGS, NULL}, + { (char *)"floatVector___len__", _wrap_floatVector___len__, METH_VARARGS, NULL}, + { (char *)"floatVector_pop", _wrap_floatVector_pop, METH_VARARGS, NULL}, + { (char *)"floatVector___getslice__", _wrap_floatVector___getslice__, METH_VARARGS, NULL}, + { (char *)"floatVector___setslice__", _wrap_floatVector___setslice__, METH_VARARGS, NULL}, + { (char *)"floatVector___delslice__", _wrap_floatVector___delslice__, METH_VARARGS, NULL}, + { (char *)"floatVector___delitem__", _wrap_floatVector___delitem__, METH_VARARGS, NULL}, + { (char *)"floatVector___getitem__", _wrap_floatVector___getitem__, METH_VARARGS, NULL}, + { (char *)"floatVector___setitem__", _wrap_floatVector___setitem__, METH_VARARGS, NULL}, + { (char *)"floatVector_append", _wrap_floatVector_append, METH_VARARGS, NULL}, + { (char *)"floatVector_empty", _wrap_floatVector_empty, METH_VARARGS, NULL}, + { (char *)"floatVector_size", _wrap_floatVector_size, METH_VARARGS, NULL}, + { (char *)"floatVector_clear", _wrap_floatVector_clear, METH_VARARGS, NULL}, + { (char *)"floatVector_swap", _wrap_floatVector_swap, METH_VARARGS, NULL}, + { (char *)"floatVector_get_allocator", _wrap_floatVector_get_allocator, METH_VARARGS, NULL}, + { (char *)"floatVector_begin", _wrap_floatVector_begin, METH_VARARGS, NULL}, + { (char *)"floatVector_end", _wrap_floatVector_end, METH_VARARGS, NULL}, + { (char *)"floatVector_rbegin", _wrap_floatVector_rbegin, METH_VARARGS, NULL}, + { (char *)"floatVector_rend", _wrap_floatVector_rend, METH_VARARGS, NULL}, + { (char *)"floatVector_pop_back", _wrap_floatVector_pop_back, METH_VARARGS, NULL}, + { (char *)"floatVector_erase", _wrap_floatVector_erase, METH_VARARGS, NULL}, + { (char *)"new_floatVector", _wrap_new_floatVector, METH_VARARGS, NULL}, + { (char *)"floatVector_push_back", _wrap_floatVector_push_back, METH_VARARGS, NULL}, + { (char *)"floatVector_front", _wrap_floatVector_front, METH_VARARGS, NULL}, + { (char *)"floatVector_back", _wrap_floatVector_back, METH_VARARGS, NULL}, + { (char *)"floatVector_assign", _wrap_floatVector_assign, METH_VARARGS, NULL}, + { (char *)"floatVector_resize", _wrap_floatVector_resize, METH_VARARGS, NULL}, + { (char *)"floatVector_insert", _wrap_floatVector_insert, METH_VARARGS, NULL}, + { (char *)"floatVector_reserve", _wrap_floatVector_reserve, METH_VARARGS, NULL}, + { (char *)"floatVector_capacity", _wrap_floatVector_capacity, METH_VARARGS, NULL}, + { (char *)"delete_floatVector", _wrap_delete_floatVector, METH_VARARGS, NULL}, + { (char *)"floatVector_swigregister", floatVector_swigregister, METH_VARARGS, NULL}, + { (char *)"layerVector_iterator", _wrap_layerVector_iterator, METH_VARARGS, NULL}, + { (char *)"layerVector___nonzero__", _wrap_layerVector___nonzero__, METH_VARARGS, NULL}, + { (char *)"layerVector___bool__", _wrap_layerVector___bool__, METH_VARARGS, NULL}, + { (char *)"layerVector___len__", _wrap_layerVector___len__, METH_VARARGS, NULL}, + { (char *)"layerVector_pop", _wrap_layerVector_pop, METH_VARARGS, NULL}, + { (char *)"layerVector___getslice__", _wrap_layerVector___getslice__, METH_VARARGS, NULL}, + { (char *)"layerVector___setslice__", _wrap_layerVector___setslice__, METH_VARARGS, NULL}, + { (char *)"layerVector___delslice__", _wrap_layerVector___delslice__, METH_VARARGS, NULL}, + { (char *)"layerVector___delitem__", _wrap_layerVector___delitem__, METH_VARARGS, NULL}, + { (char *)"layerVector___getitem__", _wrap_layerVector___getitem__, METH_VARARGS, NULL}, + { (char *)"layerVector___setitem__", _wrap_layerVector___setitem__, METH_VARARGS, NULL}, + { (char *)"layerVector_append", _wrap_layerVector_append, METH_VARARGS, NULL}, + { (char *)"layerVector_empty", _wrap_layerVector_empty, METH_VARARGS, NULL}, + { (char *)"layerVector_size", _wrap_layerVector_size, METH_VARARGS, NULL}, + { (char *)"layerVector_clear", _wrap_layerVector_clear, METH_VARARGS, NULL}, + { (char *)"layerVector_swap", _wrap_layerVector_swap, METH_VARARGS, NULL}, + { (char *)"layerVector_get_allocator", _wrap_layerVector_get_allocator, METH_VARARGS, NULL}, + { (char *)"layerVector_begin", _wrap_layerVector_begin, METH_VARARGS, NULL}, + { (char *)"layerVector_end", _wrap_layerVector_end, METH_VARARGS, NULL}, + { (char *)"layerVector_rbegin", _wrap_layerVector_rbegin, METH_VARARGS, NULL}, + { (char *)"layerVector_rend", _wrap_layerVector_rend, METH_VARARGS, NULL}, + { (char *)"layerVector_pop_back", _wrap_layerVector_pop_back, METH_VARARGS, NULL}, + { (char *)"layerVector_erase", _wrap_layerVector_erase, METH_VARARGS, NULL}, + { (char *)"new_layerVector", _wrap_new_layerVector, METH_VARARGS, NULL}, + { (char *)"layerVector_push_back", _wrap_layerVector_push_back, METH_VARARGS, NULL}, + { (char *)"layerVector_front", _wrap_layerVector_front, METH_VARARGS, NULL}, + { (char *)"layerVector_back", _wrap_layerVector_back, METH_VARARGS, NULL}, + { (char *)"layerVector_assign", _wrap_layerVector_assign, METH_VARARGS, NULL}, + { (char *)"layerVector_resize", _wrap_layerVector_resize, METH_VARARGS, NULL}, + { (char *)"layerVector_insert", _wrap_layerVector_insert, METH_VARARGS, NULL}, + { (char *)"layerVector_reserve", _wrap_layerVector_reserve, METH_VARARGS, NULL}, + { (char *)"layerVector_capacity", _wrap_layerVector_capacity, METH_VARARGS, NULL}, + { (char *)"delete_layerVector", _wrap_delete_layerVector, METH_VARARGS, NULL}, + { (char *)"layerVector_swigregister", layerVector_swigregister, METH_VARARGS, NULL}, { (char *)"Driver_Train", _wrap_Driver_Train, METH_VARARGS, NULL}, { (char *)"Driver_Init", _wrap_Driver_Init, METH_VARARGS, NULL}, { (char *)"Driver_InitLog", _wrap_Driver_InitLog, METH_VARARGS, NULL}, @@ -4684,38 +14751,152 @@ static PyMethodDef SwigMethods[] = { { (char *)"new_Driver", _wrap_new_Driver, METH_VARARGS, NULL}, { (char *)"delete_Driver", _wrap_delete_Driver, METH_VARARGS, NULL}, { (char *)"Driver_swigregister", Driver_swigregister, METH_VARARGS, NULL}, + { (char *)"NeuralNet_CreateForTest", _wrap_NeuralNet_CreateForTest, METH_VARARGS, NULL}, + { (char *)"NeuralNet_Load", _wrap_NeuralNet_Load, METH_VARARGS, NULL}, + { (char *)"NeuralNet_layers", _wrap_NeuralNet_layers, METH_VARARGS, NULL}, + { (char *)"NeuralNet_srclayers", _wrap_NeuralNet_srclayers, METH_VARARGS, NULL}, + { (char *)"new_NeuralNet", _wrap_new_NeuralNet, METH_VARARGS, NULL}, + { (char *)"delete_NeuralNet", _wrap_delete_NeuralNet, METH_VARARGS, NULL}, + { (char *)"NeuralNet_swigregister", NeuralNet_swigregister, METH_VARARGS, NULL}, + { (char *)"DummyInputLayer_Feed", _wrap_DummyInputLayer_Feed, METH_VARARGS, NULL}, + { (char *)"DummyInputLayer_ToLayer", _wrap_DummyInputLayer_ToLayer, METH_VARARGS, NULL}, + { (char *)"new_DummyInputLayer", _wrap_new_DummyInputLayer, METH_VARARGS, NULL}, + { (char *)"delete_DummyInputLayer", _wrap_delete_DummyInputLayer, METH_VARARGS, NULL}, + { (char *)"DummyInputLayer_swigregister", DummyInputLayer_swigregister, METH_VARARGS, NULL}, + { (char *)"Layer_ComputeFeature", _wrap_Layer_ComputeFeature, METH_VARARGS, NULL}, + { (char *)"Layer_data", _wrap_Layer_data, METH_VARARGS, NULL}, + { (char *)"Layer_swigregister", Layer_swigregister, METH_VARARGS, NULL}, + { (char *)"floatBlob_mutable_cpu_data", _wrap_floatBlob_mutable_cpu_data, METH_VARARGS, NULL}, + { (char *)"new_floatBlob", _wrap_new_floatBlob, METH_VARARGS, NULL}, + { (char *)"delete_floatBlob", _wrap_delete_floatBlob, METH_VARARGS, NULL}, + { (char *)"floatBlob_swigregister", floatBlob_swigregister, METH_VARARGS, NULL}, { NULL, NULL, 0, NULL } }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ +static void *_p_floatArrayTo_p_float(void *x, int *SWIGUNUSEDPARM(newmemory)) { + return (void *)((float *) ((floatArray *) x)); +} +static swig_type_info _swigt__p_allocator_type = {"_p_allocator_type", "allocator_type *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_const_reference = {"_p_const_reference", "const_reference *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_difference_type = {"_p_difference_type", "difference_type *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_float = {"_p_float", "float *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_floatArray = {"_p_floatArray", "floatArray *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_p_PyObject = {"_p_p_PyObject", "PyObject **", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_reference = {"_p_reference", "reference *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_singa__BlobT_float_t = {"_p_singa__BlobT_float_t", "singa::Blob< float > *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_singa__Driver = {"_p_singa__Driver", "singa::Driver *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_singa__DummyInputLayer = {"_p_singa__DummyInputLayer", "singa::DummyInputLayer *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_singa__Layer = {"_p_singa__Layer", "std::vector< singa::Layer * >::value_type|singa::Layer *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_singa__NeuralNet = {"_p_singa__NeuralNet", "singa::NeuralNet *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_size_type = {"_p_size_type", "size_type *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_float_t = {"_p_std__allocatorT_float_t", "std::vector< float >::allocator_type *|std::allocator< float > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_int_t = {"_p_std__allocatorT_int_t", "std::vector< int >::allocator_type *|std::allocator< int > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_singa__Layer_p_t = {"_p_std__allocatorT_singa__Layer_p_t", "std::vector< singa::Layer * >::allocator_type *|std::allocator< singa::Layer * > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__allocatorT_std__string_t = {"_p_std__allocatorT_std__string_t", "std::vector< std::string >::allocator_type *|std::allocator< std::string > *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_std__invalid_argument = {"_p_std__invalid_argument", "std::invalid_argument *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT__Tp__Alloc_t = {"_p_std__vectorT__Tp__Alloc_t", "std::vector< _Tp,_Alloc > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT__Tp_p__Alloc_t = {"_p_std__vectorT__Tp_p__Alloc_t", "std::vector< _Tp *,_Alloc > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_float_std__allocatorT_float_t_t = {"_p_std__vectorT_float_std__allocatorT_float_t_t", "std::vector< float > *|std::vector< float,std::allocator< float > > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_int_std__allocatorT_int_t_t = {"_p_std__vectorT_int_std__allocatorT_int_t_t", "std::vector< int,std::allocator< int > > *|std::vector< int > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t = {"_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t", "std::vector< singa::Layer *,std::allocator< singa::Layer * > > *|std::vector< singa::Layer * > *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t = {"_p_std__vectorT_std__string_std__allocatorT_std__string_t_t", "std::vector< std::string,std::allocator< std::string > > *|std::vector< std::string > *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_swig__SwigPyIterator = {"_p_swig__SwigPyIterator", "swig::SwigPyIterator *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { + &_swigt__p_allocator_type, &_swigt__p_char, + &_swigt__p_const_reference, + &_swigt__p_difference_type, + &_swigt__p_float, + &_swigt__p_floatArray, + &_swigt__p_p_PyObject, &_swigt__p_p_char, + &_swigt__p_reference, + &_swigt__p_singa__BlobT_float_t, &_swigt__p_singa__Driver, + &_swigt__p_singa__DummyInputLayer, + &_swigt__p_singa__Layer, + &_swigt__p_singa__NeuralNet, + &_swigt__p_size_type, + &_swigt__p_std__allocatorT_float_t, + &_swigt__p_std__allocatorT_int_t, + &_swigt__p_std__allocatorT_singa__Layer_p_t, + &_swigt__p_std__allocatorT_std__string_t, &_swigt__p_std__invalid_argument, + &_swigt__p_std__vectorT__Tp__Alloc_t, + &_swigt__p_std__vectorT__Tp_p__Alloc_t, + &_swigt__p_std__vectorT_float_std__allocatorT_float_t_t, + &_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, + &_swigt__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, + &_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, &_swigt__p_swig__SwigPyIterator, + &_swigt__p_value_type, }; +static swig_cast_info _swigc__p_allocator_type[] = { {&_swigt__p_allocator_type, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_const_reference[] = { {&_swigt__p_const_reference, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_difference_type[] = { {&_swigt__p_difference_type, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_float[] = { {&_swigt__p_float, 0, 0, 0}, {&_swigt__p_floatArray, _p_floatArrayTo_p_float, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_floatArray[] = { {&_swigt__p_floatArray, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_p_PyObject[] = { {&_swigt__p_p_PyObject, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_reference[] = { {&_swigt__p_reference, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_singa__BlobT_float_t[] = { {&_swigt__p_singa__BlobT_float_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_singa__Driver[] = { {&_swigt__p_singa__Driver, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_singa__DummyInputLayer[] = { {&_swigt__p_singa__DummyInputLayer, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_singa__Layer[] = { {&_swigt__p_singa__Layer, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_singa__NeuralNet[] = { {&_swigt__p_singa__NeuralNet, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_size_type[] = { {&_swigt__p_size_type, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_float_t[] = { {&_swigt__p_std__allocatorT_float_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_int_t[] = { {&_swigt__p_std__allocatorT_int_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_singa__Layer_p_t[] = { {&_swigt__p_std__allocatorT_singa__Layer_p_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__allocatorT_std__string_t[] = { {&_swigt__p_std__allocatorT_std__string_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_std__invalid_argument[] = { {&_swigt__p_std__invalid_argument, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT__Tp__Alloc_t[] = { {&_swigt__p_std__vectorT__Tp__Alloc_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT__Tp_p__Alloc_t[] = { {&_swigt__p_std__vectorT__Tp_p__Alloc_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_float_std__allocatorT_float_t_t[] = { {&_swigt__p_std__vectorT_float_std__allocatorT_float_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_int_std__allocatorT_int_t_t[] = { {&_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t[] = { {&_swigt__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t[] = { {&_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_swig__SwigPyIterator[] = { {&_swigt__p_swig__SwigPyIterator, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_value_type[] = { {&_swigt__p_value_type, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { + _swigc__p_allocator_type, _swigc__p_char, + _swigc__p_const_reference, + _swigc__p_difference_type, + _swigc__p_float, + _swigc__p_floatArray, + _swigc__p_p_PyObject, _swigc__p_p_char, + _swigc__p_reference, + _swigc__p_singa__BlobT_float_t, _swigc__p_singa__Driver, + _swigc__p_singa__DummyInputLayer, + _swigc__p_singa__Layer, + _swigc__p_singa__NeuralNet, + _swigc__p_size_type, + _swigc__p_std__allocatorT_float_t, + _swigc__p_std__allocatorT_int_t, + _swigc__p_std__allocatorT_singa__Layer_p_t, + _swigc__p_std__allocatorT_std__string_t, _swigc__p_std__invalid_argument, + _swigc__p_std__vectorT__Tp__Alloc_t, + _swigc__p_std__vectorT__Tp_p__Alloc_t, + _swigc__p_std__vectorT_float_std__allocatorT_float_t_t, + _swigc__p_std__vectorT_int_std__allocatorT_int_t_t, + _swigc__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, + _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, _swigc__p_swig__SwigPyIterator, + _swigc__p_value_type, }; From b619459ce5cc381162182e0647db4e0a263ea30b Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Sat, 23 Jan 2016 14:22:13 +0800 Subject: [PATCH 02/26] add kvstore .. --- examples/cifar10_py/main.py | 9 +- examples/cifar10_py/main_bak.py | 332 ----------------------------- src/neuralnet/input_layer/dummy.cc | 45 ++++ tool/python/singa/utils/imgtool.py | 221 +++++++++++++++++++ tool/python/singa/utils/kvstore.py | 90 ++++++++ 5 files changed, 361 insertions(+), 336 deletions(-) delete mode 100755 examples/cifar10_py/main_bak.py create mode 100644 src/neuralnet/input_layer/dummy.cc create mode 100644 tool/python/singa/utils/imgtool.py create mode 100644 tool/python/singa/utils/kvstore.py diff --git a/examples/cifar10_py/main.py b/examples/cifar10_py/main.py index 198f62cfc7..7ceed9df9a 100755 --- a/examples/cifar10_py/main.py +++ b/examples/cifar10_py/main.py @@ -168,7 +168,8 @@ def predict(): if request.method == 'POST': file = request.files['image'] if file and allowed_file(file.filename): - im = Image.open(file) + im = Image.open(file).convert("RGB") + im = imgtool.resize_to_center(im,size_) pixel = floatVector(pixel_length_) byteArray = imgtool.toBin(im,size_) for i in range(pixel_length_): @@ -250,10 +251,10 @@ def product(model): if __name__=='__main__': - print "please use -transfer -data -test -product to specify different task" + print "please use -transform -data -test -product to specify different task" - if "-transfer" in sys.argv: - total_record_num_=imgtool.transfer_img(input_folder_,temp_folder_,size_) + if "-transform" in sys.argv: + total_record_num_=imgtool.transform_img(input_folder_,temp_folder_,size_) if "-data" in sys.argv: label_list_=imgtool.generate_kvrecord_data(temp_folder_, output_folder_, diff --git a/examples/cifar10_py/main_bak.py b/examples/cifar10_py/main_bak.py deleted file mode 100755 index dee42474b2..0000000000 --- a/examples/cifar10_py/main_bak.py +++ /dev/null @@ -1,332 +0,0 @@ -#!/usr/bin/env python -#/************************************************************ -#* -#* Licensed to the Apache Software Foundation (ASF) under one -#* or more contributor license agreements. See the NOTICE file -#* distributed with this work for additional information -#* regarding copyright ownership. The ASF licenses this file -#* to you under the Apache License, Version 2.0 (the -#* "License"); you may not use this file except in compliance -#* with the License. You may obtain a copy of the License at -#* -#* http://www.apache.org/licenses/LICENSE-2.0 -#* -#* Unless required by applicable law or agreed to in writing, -#* software distributed under the License is distributed on an -#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -#* KIND, either express or implied. See the License for the -#* specific language governing permissions and limitations -#* under the License. -#* -#*************************************************************/ - - -from PIL import Image -import sys, glob, os, random, shutil, time -from flask import Flask, request, redirect, url_for -#all the settings -current_path_ = os.path.dirname(__file__) - -singa_root_=os.path.abspath(os.path.join(current_path_,'../..')) - -#data prepare settings -input_folder_=os.path.abspath(os.path.join(current_path_,"data/raw")) -output_folder_=os.path.abspath(os.path.join(current_path_,"data/out")) -temp_folder_=os.path.abspath(os.path.join(current_path_,"data/temp")) - -meta_file_name_="meta.txt" -train_bin_file_name_="train.bin" -test_bin_file_name_="test.bin" -validate_bin_file_name_="validate.bin" -mean_bin_file_name_="mean.bin" -label_list_=[(0,"airplane"), - (1,"truck"), - (2,"ship"), - (3,"dog"), - (4,"cat"), - (5,"deer"), - (6,"bird"), - (7,"automobile"), - (8,"horse"), - (9,"frog")] - -#image size -size_=(32,32) - -#final label numbers -total_record_num_=60000 -label_num_=10 - -#data partial -train_rate_=5.0/6 -test_rate_=1.0/6 -validate_rate_=0.0 - -#training settings -model_name_="cifar10-cnn" -workspace_="examples/cifar10_py" -batch_size_=64 -check_point_path_=workspace_+"/checkpoint/step1000-worker0" - - -allowd_extensions_ = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) - -#singa python libs -sys.path.append(os.path.join(singa_root_,'tool','python')) -from singa.driver import NeuralNet,Driver,strVector,layerVector,intVector,floatVector,DummyInputLayer,Layer,floatArray_frompointer -from singa.model import * -from singa.utils import kvstore, imgtool -from pb2.common_pb2 import RecordProto -app = Flask(__name__) - -mean_record_="" -dummy_="" -net_="" -pixel_length_=0 - - -def buildModel(argv): - model = Sequential(model_name_,argv) - - model.add(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) - model.add(MaxPooling2D(pool_size=(3,3), stride=2)) - model.add(Activation('relu')) - model.add(LRN2D(3, alpha=0.00005, beta=0.75)) - - model.add(Convolution2D(32, 5, 1, 2, b_lr=2)) - model.add(Activation('relu')) - model.add(AvgPooling2D(pool_size=(3,3), stride=2)) - model.add(LRN2D(3, alpha=0.00005, beta=0.75)) - - model.add(Convolution2D(64, 5, 1, 2)) - model.add(Activation('relu')) - model.add(AvgPooling2D(pool_size=(3,3), stride=2)) - - #label_num_ should be the same with input data label num - model.add(Dense(label_num_, w_wd=250, b_lr=2, b_wd=0, activation='softmax')) - - sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) - - topo = Cluster(workspace_) - model.compile(loss='categorical_crossentropy', optimizer=sgd, cluster=topo) - - return model - - - -def generate_data_conf( - backend = 'kvfile', - batchsize = 64, - random = 5000, - shape = (3, 32, 32), - std = 127.5, - mean = 127.5 - ): - - # using cifar10 dataset - path_train =os.path.join(output_folder_ ,train_bin_file_name_) - path_test =os.path.join(output_folder_ ,test_bin_file_name_) - path_mean =os.path.join(output_folder_ ,mean_bin_file_name_) - - - store = Store(path=path_train, mean_file=path_mean, backend=backend, - random_skip=random, batchsize=batchsize, - shape=shape) - - data_train = Data(load='recordinput', phase='train', conf=store) - - store = Store(path=path_test, mean_file=path_mean, backend=backend, - batchsize=batchsize, - shape=shape) - - data_test = Data(load='recordinput', phase='test', conf=store) - - return data_train, data_test - - -def train(model): - - X_train, X_test= generate_data_conf() - model.fit(X_train, nb_epoch=1000, with_test=True) - result = model.evaluate(X_test, test_steps=100, test_freq=300) - -def test(model): - pass - - -@app.route("/") -def index(): - return "Hello World! This is SINGA DLAAS! Please send post request with image=file to '/predict' " - -def allowed_file(filename): - return '.' in filename and \ - filename.rsplit('.', 1)[1] in allowd_extensions_ - -@app.route('/predict', methods=['POST']) -def predict(): - global pixel_length_,mean_record_,net_,dummy_ - if request.method == 'POST': - file = request.files['image'] - if file and allowed_file(file.filename): - im = Image.open(file) - pixel = floatVector(pixel_length_) - byteArray = imgtool.toBin(im,size_) - for i in range(pixel_length_): - pixel[i]= byteArray[i]-mean_record_.data[i] - - #dummy data Layer - - shape = intVector(3) - shape[0]=3 - shape[1]=size_[0] - shape[2]=size_[1] - dummy_.Feed(1,shape,pixel) - - #checkpoint_paths =getattr(m.jobconf, 'checkpoint_path') - checkpoint_paths = strVector(1) - checkpoint_paths[0]=check_point_path_ - net_.Load(checkpoint_paths) - - print "1" - dummyVector=layerVector(1) - dummyVector[0]=dummy_.ToLayer() - print len(net_.layers()) - for i,layer in enumerate(net_.layers()): - #skip data layer - if i==0: - continue - elif i==1: - try: - layer.ComputeFeature(4,dummyVector) - except: - print "oh" - else: - layer.ComputeFeature(4,net_.srclayers(layer)) - - #get result - lastLayer=net_.layers()[-1] - data = lastLayer.data(dummy_.ToLayer()) - prop =floatArray_frompointer(data.mutable_cpu_data()) - print "2" - result=[] - for i in range(label_num_): - result.append((i,prop[i])) - - result.sort(key=lambda tup: tup[1], reverse=True) - - label_map=dict() - for item in label_list_: - label_map[item[0]]=item[1] - - result="" - for r in result: - result+=str(label_map[r[0]])+str(r[1]) - - return result - return "error" - -def product(model): - #global pixel_length_,mean_record_,net_,dummy_ - #fake data layer - X_train, X_test= generate_data_conf() - - model.layers.insert(0,X_test) - model.build() - #register layers - d = Driver() - d.Init(sys.argv) - net_ = NeuralNet.CreateForTest(model.jobconf.neuralnet.SerializeToString()) - - - pixel_length_ = 3*size_[0]*size_[1] - - #minus mean and feed data - key,mean_str = kvstore.FileStore().open(os.path.join(output_folder_,mean_bin_file_name_),"read").read() - mean_record_ = RecordProto() - mean_record_.ParseFromString(mean_str) - assert len(mean_record_.data)==pixel_length_ - - dummy_ = DummyInputLayer() - - - im = Image.open(os.path.join(current_path_,"data/dog.jpg")).convert("RGB") - pixel = floatVector(pixel_length_) - byteArray = imgtool.toBin(im,size_) - for i in range(pixel_length_): - pixel[i]= byteArray[i]-mean_record_.data[i] - - shape = intVector(3) - shape[0]=3 - shape[1]=size_[0] - shape[2]=size_[1] - dummy_.Feed(1,shape,pixel) - - #checkpoint_paths =getattr(m.jobconf, 'checkpoint_path') - checkpoint_paths = strVector(1) - checkpoint_paths[0]=check_point_path_ - net_.Load(checkpoint_paths) - - dummyVector=layerVector(1) - dummyVector[0]=dummy_.ToLayer() - print len(net_.layers()) - for i,layer in enumerate(net_.layers()): - #skip data layer - if i==0: - continue - elif i==1: - layer.ComputeFeature(4,dummyVector) - else: - layer.ComputeFeature(4,net_.srclayers(layer)) - - #get result - lastLayer=net_.layers()[-1] - data = lastLayer.data(dummy_.ToLayer()) - prop =floatArray_frompointer(data.mutable_cpu_data()) - print "2" - result=[] - for i in range(label_num_): - result.append((i,prop[i])) - - result.sort(key=lambda tup: tup[1], reverse=True) - - label_map=dict() - for item in label_list_: - label_map[item[0]]=item[1] - - result="" - for r in result: - result+=str(label_map[r[0]])+str(r[1]) - print result - - - # app.debug = True - # app.run() - - -if __name__=='__main__': - - print "please use -transfer -data -test -product to specify different task" - - if "-transfer" in sys.argv: - total_record_num_=imgtool.transfer_img(input_folder_,temp_folder_,size_) - if "-data" in sys.argv: - label_list_=imgtool.generate_kvrecord_data(temp_folder_, - output_folder_, - size_, - train_num=int(total_record_num_*train_rate_), - test_num=int(total_record_num_*test_rate_), - validate_num=int(total_record_num_*validate_rate_), - meta_file_name=meta_file_name_, - train_bin_file_name=train_bin_file_name_, - test_bin_file_name=test_bin_file_name_, - validate_bin_file_name=validate_bin_file_name_, - mean_bin_file_name=mean_bin_file_name_ - ) - label_num_=len(label_list_) - model=buildModel(sys.argv) - if "-train" in sys.argv: - train(model) - elif "-test" in sys.argv: - test(model) - elif "-product" in sys.argv: - product(model) \ No newline at end of file diff --git a/src/neuralnet/input_layer/dummy.cc b/src/neuralnet/input_layer/dummy.cc new file mode 100644 index 0000000000..e64a295859 --- /dev/null +++ b/src/neuralnet/input_layer/dummy.cc @@ -0,0 +1,45 @@ +/************************************************************ +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#include "singa/neuralnet/input_layer.h" +namespace singa { + +using std::vector; + +DummyInputLayer::DummyInputLayer(){ + +} +void DummyInputLayer::Feed(int batchsize, vector shape, vector* data){ + + batchsize_ = batchsize; + shape.insert(shape.begin(),batchsize); + data_.Reshape(shape); + + int size = data_.count() / batchsize_; + CHECK_EQ(size, data->size()); + float* ptr = data_.mutable_cpu_data(); + for (int i = 0; i< size; i++) + ptr[i] = data->at(i); + + return; +} + +} // namespace singa diff --git a/tool/python/singa/utils/imgtool.py b/tool/python/singa/utils/imgtool.py new file mode 100644 index 0000000000..9265beee00 --- /dev/null +++ b/tool/python/singa/utils/imgtool.py @@ -0,0 +1,221 @@ +''' +Created on Jan 8, 2016 +@author: aaron +''' +from PIL import Image +import sys, glob, os, random, shutil, time +from . import kvstore + +sys.path.append(os.path.join(os.path.dirname(__file__), '../../pb2')) +from common_pb2 import RecordProto + +#bytearray to image object +def toImg(byteArray,size): + img = Image.new("RGB",size) + pix = img.load() + area = size[0]*size[1] + red = byteArray[:area] + green = byteArray[area:area*2] + blue = byteArray[area*2:] + index=0 + for x in range(0,size[0]): + for y in range(0,size[1]): + img.putpixel((x,y), (red[index],green[index],blue[index])) + index+=1 + return img + +# image object to bytearray +def toBin(im,size): + red = [] + green = [] + blue = [] + pix = im.load() + for x in range(0,size[0]): + for y in range(0,size[1]): + pixel = pix[x,y] + red.append(pixel[0]) + green.append(pixel[1]) + blue.append(pixel[2]) + fileByteArray = bytearray(red+green+blue) + return fileByteArray + +def resize_to_center(im,size): + oldSize = im.size + #bigest center cube + data=(0,0,0,0) + if oldSize[0] < oldSize[1]: + data= (0,(oldSize[1]-oldSize[0])/2,oldSize[0],(oldSize[1]+oldSize[0])/2) + else : + data= ((oldSize[0]-oldSize[1])/2,0,(oldSize[0]+oldSize[1])/2,oldSize[1]) + newIm = im.transform(size,Image.EXTENT,data) + return newIm +#transfer, resize img. only deal with .jpg file +def transform_img( + input_folder, + output_folder, + size + ): + print "Transfer images begin at:"+time.strftime('%X %x %Z') + + #if output_folder exists, empty it, otherwise create a dir + try: + os.stat(output_folder) + for root, dirs, files in os.walk(output_folder): + for f in files: + os.unlink(os.path.join(root, f)) + for d in dirs: + shutil.rmtree(os.path.join(root, d)) + except: + os.makedirs(output_folder) + + count=0 + for root, dirs, files in os.walk(input_folder): + for d in dirs: + print "find dir:", d + os.makedirs(os.path.join(output_folder,d)) + for infile in glob.glob(os.path.join(input_folder,d,"*.jpg")): + fileName = os.path.split(infile)[-1] + name,ext = os.path.splitext(fileName) + im = Image.open(infile).convert("RGB") + newIm=resize_to_center(im,size) + newIm.save(os.path.join(output_folder,d,name+".center.jpg"), "JPEG") + count+=1 + + print "transfer end at:"+time.strftime('%X %x %Z') + print "total file number: ", count + + return count + + + + +def generate_kvrecord_data( + input_folder, + output_folder, + size , + train_num, + test_num, + validate_num, + meta_file_name="meta.txt", + train_bin_file_name="train.bin", + test_bin_file_name="test.bin", + validate_bin_file_name="validate.bin", + mean_bin_file_name="mean.bin", + + ): + try: + os.stat(output_folder) + except: + os.makedirs(output_folder) + + print "Generate kvrecord start at: "+time.strftime('%X %x %Z') + meta_file = open(os.path.join(output_folder,meta_file_name), "w") + + fileList=[] + labelList= [] + label=0 #label begin from 1 + + #get all img file, the folder name is the label name + for d in os.listdir(input_folder): + if os.path.isdir(os.path.join(input_folder,d)): + labelList.append((label,d)) + for f in glob.glob(os.path.join(input_folder,d,"*.jpg")): + fileList.append((label,f)) + label += 1 + + # disorder all the files + random.shuffle(fileList) + + total = len(fileList) + print total,train_num,test_num,validate_num + assert total >= train_num+test_num+validate_num + + + trainStore = kvstore.FileStore() + trainStore.open(os.path.join(output_folder,train_bin_file_name), "create") + validateStore = kvstore.FileStore() + validateStore.open(os.path.join(output_folder,validate_bin_file_name), "create") + testStore = kvstore.FileStore() + testStore.open(os.path.join(output_folder,test_bin_file_name), "create") + + meanStore = kvstore.FileStore() + meanStore.open(os.path.join(output_folder,mean_bin_file_name), "create") + + + count=0 + trainCount=0 + validateCount=0 + testCount=0 + + # the expected image binary length + binaryLength=3*size[0]*size[1] + + meanRecord = RecordProto() + meanRecord.shape.extend([3,size[0],size[1]]) + for i in range(binaryLength): + meanRecord.data.append(0.0) + + for (label,f) in fileList: + + im =Image.open(f) + #the image size should be equal + assert im.size==size + + binaryContent=str(toBin(im,size)) + + count +=1 + record = RecordProto() + record.shape.extend([3,size[0],size[1]]) + record.label=label + record.pixel=binaryContent + + value = record.SerializeToString() + + if count <= train_num : + key = "%05d" % trainCount + trainCount+=1 + trainStore.write(key,value) + #only caculate train data's mean + for i in range(binaryLength): + meanRecord.data[i]+=ord(binaryContent[i]) + elif count <= train_num+validate_num : + key = "%05d" % validateCount + validateCount+=1 + validateStore.write(key,value) + elif count <= train_num+validate_num+test_num: + key = "%05d" % testCount + testCount+=1 + testStore.write(key,value) + else: + break + + for i in range(binaryLength): + meanRecord.data[i]/=trainCount + + meanStore.write("mean", meanRecord.SerializeToString()) + meanStore.flush() + meanStore.close() + + trainStore.flush() + trainStore.close() + validateStore.flush() + validateStore.close() + testStore.flush() + testStore.close() + + meta_file.write("image size: "+str(size[0])+"*"+str(size[1])+"\n") + meta_file.write("total file num: "+str(count)+"\n") + meta_file.write("train file num: "+str(trainCount)+"\n") + meta_file.write("validate file num: "+str(validateCount)+"\n") + meta_file.write("test file num: "+str(testCount)+"\n") + meta_file.write("label list:[\n") + + for item in labelList: + meta_file.write("("+str(item[0])+",\""+item[1]+"\"),\n") + meta_file.write("]") + meta_file.flush() + meta_file.close() + + print "end at: "+time.strftime('%X %x %Z') + + return labelList \ No newline at end of file diff --git a/tool/python/singa/utils/kvstore.py b/tool/python/singa/utils/kvstore.py new file mode 100644 index 0000000000..7fe16e019d --- /dev/null +++ b/tool/python/singa/utils/kvstore.py @@ -0,0 +1,90 @@ +''' +Created on Jan 8, 2016 + +@author: aaron +''' +import struct, os + +INT_LEN=8 + +class FileStore(): + ''' + kv file store + ''' + def open(self,src_path,mode): + if mode == "create": + self._file = open(src_path,"wb") + if mode == "append": + self._file = open(src_path,"ab") + if mode == "read": + self._file = open(src_path,"rb") + return self + + def close(self): + self._file.close() + return + + def read(self): + keyLen=b2i(self._file.read(INT_LEN)) + key=str(self._file.read(keyLen)) + valueLen=b2i(self._file.read(INT_LEN)) + value=str(self._file.read(valueLen)) + return key,value + + def seekToFirst(self): + self._file.seek(0) + return + + #Don't do this + def seek(self,offset): + self._file.seek(offset) + return + + def write(self,key,value): + key_len = len(key) + value_len = len(value) + self._file.write(i2b(key_len)+key+i2b(value_len)+value) + return + + def flush(self): + self._file.flush() + return + + def __init__(self ): + + return +#integer to binary Q means long long, 8 bytes +def i2b(i): + return struct.pack(" Date: Thu, 17 Mar 2016 13:04:40 +0800 Subject: [PATCH 03/26] SINGA-126 Python Binding for Interactive Training - Update tool/python/singa/driver.i for wrapper - Add DummyInputLayer . kDummyInput in job.proto . register this layer in driver.cc - Revise python codes . layer.py, model.py, utility.py . In layer.py . add methods: ComputeFeature, ComputeGradient, GetParams, GetData - Add example . train_mnist.py . train_cifar10.py --- Makefile.am | 1 + include/singa/neuralnet/input_layer.h | 23 +++ include/singa/neuralnet/layer.h | 12 ++ include/singa/neuralnet/neuralnet.h | 7 + include/singa/utils/param.h | 2 + include/singa/utils/updater.h | 9 ++ src/driver.cc | 2 + src/neuralnet/input_layer/dummy.cc | 77 ++++++++++ src/neuralnet/layer.cc | 18 +++ src/neuralnet/loss_layer/softmax.cc | 1 + src/neuralnet/neuralnet.cc | 6 + src/neuralnet/neuron_layer/inner_product.cc | 4 + src/proto/job.proto | 2 + src/utils/updater.cc | 21 ++- tool/python/examples/train_cifar10.py | 133 ++++++++++++++++++ tool/python/examples/train_mnist.py | 126 +++++++++++++++++ tool/python/singa/driver.i | 89 ++++++++++-- tool/python/singa/layer.py | 147 ++++++++++++++++++-- tool/python/singa/model.py | 20 ++- tool/python/singa/utils/utility.py | 7 + 20 files changed, 680 insertions(+), 27 deletions(-) create mode 100644 src/neuralnet/input_layer/dummy.cc create mode 100755 tool/python/examples/train_cifar10.py create mode 100755 tool/python/examples/train_mnist.py diff --git a/Makefile.am b/Makefile.am index 55c45e1424..88118f3eec 100644 --- a/Makefile.am +++ b/Makefile.am @@ -64,6 +64,7 @@ SINGA_SRCS := src/driver.cc \ src/neuralnet/input_layer/record.cc \ src/neuralnet/input_layer/deprecated.cc \ src/neuralnet/input_layer/store.cc \ + src/neuralnet/input_layer/dummy.cc \ src/neuralnet/input_layer/rnn_label.cc \ src/neuralnet/output_layer/accuracy.cc \ src/neuralnet/output_layer/argsort.cc \ diff --git a/include/singa/neuralnet/input_layer.h b/include/singa/neuralnet/input_layer.h index e701eecd46..c7e0df5518 100644 --- a/include/singa/neuralnet/input_layer.h +++ b/include/singa/neuralnet/input_layer.h @@ -200,6 +200,29 @@ class RNNLabelLayer : public InputLayer { void Setup(const LayerProto& proto, const vector& srclayers); void ComputeFeature(int flag, const vector& srclayers); }; + +/** + * Dummy class for loading data from anywhere. + */ +class DummyInputLayer : virtual public InputLayer { + public: + DummyInputLayer(); + void Setup(const LayerProto& proto, const vector& srclayers); + void ComputeFeature(int flag, const vector& srclayers) override {}; + + /** + * Feed data to Layer + */ + void Feed(int batchsize, vector shape, vector* data, int op); + + Layer* ToLayer(){ + return this; + } + protected: + int batchsize_ = 1; +}; + + /****************Deprecated layers******************/ /** * @deprecated please use the StoreInputLayer. diff --git a/include/singa/neuralnet/layer.h b/include/singa/neuralnet/layer.h index c1612a2885..a24ba5656e 100644 --- a/include/singa/neuralnet/layer.h +++ b/include/singa/neuralnet/layer.h @@ -57,6 +57,7 @@ inline const string AddPrefixSuffix(int unroll_idx, int partition_idx, * Layer::ComputeFeature() and Layer::ComputGradient() * functions in accordance with the NeuralNet::TrainOneBatch function. */ + class Layer { public: /** @@ -69,6 +70,15 @@ class Layer { Layer() {} virtual ~Layer() {} + + /** + * Create for python binding, production test mode + * + */ + static Layer* CreateLayer(const string str); + static void SetupLayer(Layer* layer, const string str, const vector& srclayers); + virtual void Feed(int batchsize, vector shape, vector* data, int op) {} + /** * Setup layer properties. * @@ -84,6 +94,8 @@ class Layer { datavec_.push_back(&data_); gradvec_.push_back(&grad_); } + + /** * Compute features of this layer based on connected layers. * diff --git a/include/singa/neuralnet/neuralnet.h b/include/singa/neuralnet/neuralnet.h index 33ad38cb1c..80c4a09517 100644 --- a/include/singa/neuralnet/neuralnet.h +++ b/include/singa/neuralnet/neuralnet.h @@ -58,6 +58,13 @@ class NeuralNet { static NeuralNet* Create(const NetProto& net_conf, Phase phase, int npartitions); + /** + * Create for python binding, production test mode + * + */ + static NeuralNet* CreateForTest(const string str); + NeuralNet() {}; + static const NetProto Unrolling(const NetProto& net_conf); /** * construct the net structure from protocol buffer. diff --git a/include/singa/utils/param.h b/include/singa/utils/param.h index fcaaeb76df..4d5683f7eb 100644 --- a/include/singa/utils/param.h +++ b/include/singa/utils/param.h @@ -211,6 +211,8 @@ class Param { /** * @return num of parameters in this Param obj. */ + inline const std::vector& shape() const { return data_.shape(); } + //inline const std::vector& shape() const { return std::vector data_.shape()[0], data_.shape()[1]}; } inline int size() const { return data_.count(); } inline const Blob& data() const { return data_; } inline Blob* mutable_data() { return &data_; } diff --git a/include/singa/utils/updater.h b/include/singa/utils/updater.h index b14f72b7a4..b34d404575 100644 --- a/include/singa/utils/updater.h +++ b/include/singa/utils/updater.h @@ -22,10 +22,13 @@ #ifndef SINGA_UTILS_UPDATER_H_ #define SINGA_UTILS_UPDATER_H_ +#include #include "singa/proto/job.pb.h" #include "singa/utils/param.h" +#include "singa/neuralnet/layer.h" namespace singa { +using std::string; /** * Base learning rate generator. * @@ -87,6 +90,12 @@ class InvTLRGen : public LRGenerator { */ class Updater { public: + + /* added for python binding */ + static Updater* CreateUpdater(const string str); + static void UpdateParams(Updater* updater, Layer* layer, int step); + /* ------------------------ */ + static Updater* Create(const UpdaterProto& proto); virtual ~Updater() {} diff --git a/src/driver.cc b/src/driver.cc index 6163865620..d58e4d6948 100644 --- a/src/driver.cc +++ b/src/driver.cc @@ -75,6 +75,7 @@ void Driver::Init(int argc, char **argv) { RegisterLayer(kRNNLabel); RegisterLayer(kOneHot); RegisterLayer(kCharRNNOutput); + RegisterLayer(kDummyInput); // connection layers RegisterLayer(kBridgeDst); @@ -90,6 +91,7 @@ void Driver::Init(int argc, char **argv) { RegisterLayer(kCConvolution); RegisterLayer(kCPooling); RegisterLayer(kEmbedding); + RegisterLayer(kActivation); #ifdef USE_CUDNN RegisterLayer(kCudnnActivation); diff --git a/src/neuralnet/input_layer/dummy.cc b/src/neuralnet/input_layer/dummy.cc new file mode 100644 index 0000000000..8c342c11f6 --- /dev/null +++ b/src/neuralnet/input_layer/dummy.cc @@ -0,0 +1,77 @@ +/************************************************************ +* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +* +*************************************************************/ + +#include "singa/neuralnet/input_layer.h" + +namespace singa { +using std::vector; + +DummyInputLayer::DummyInputLayer(){ + +} + +void DummyInputLayer::Setup(const LayerProto& conf, const vector& srclayers) { + Layer::Setup(conf, srclayers); +} + +void DummyInputLayer::Feed(int batchsize, vector shape, vector* data, int op){ + + batchsize_ = batchsize; + // dataset + if (op == 0) { + size_t hdim = 1; + for (size_t i = 0; i < shape.size(); ++i) + hdim *= shape[i]; + //data_.Reshape({batchsize, (int)hdim}); + shape.insert(shape.begin(),batchsize); + data_.Reshape(shape); + int size = data->size(); + float* ptr = data_.mutable_cpu_data(); + for (int i = 0; i< size; i++) { + ptr[i] = data->at(i); + } + } + // label + else { + aux_data_.resize(batchsize); + for (int i = 0; i< batchsize; i++) { + aux_data_[i] = static_cast(data->at(i)); + } + } + + return; + + /* Wenfeng's input + batchsize_ = batchsize; + shape.insert(shape.begin(),batchsize); + data_.Reshape(shape); + + int size = data_.count() / batchsize_; + CHECK_EQ(size, data->size()); + float* ptr = data_.mutable_cpu_data(); + for (int i = 0; i< size; i++) + ptr[i] = data->at(i); + + return; + */ +} + +} // namespace singa diff --git a/src/neuralnet/layer.cc b/src/neuralnet/layer.cc index cb1f3b8b78..ef1629fc8e 100644 --- a/src/neuralnet/layer.cc +++ b/src/neuralnet/layer.cc @@ -19,7 +19,11 @@ * *************************************************************/ +#include "singa/worker.h" #include "singa/neuralnet/layer.h" +#include "singa/neuralnet/input_layer.h" +#include "singa/neuralnet/neuron_layer.h" +#include "singa/neuralnet/loss_layer.h" #include #include @@ -33,6 +37,20 @@ namespace singa { using std::string; +void Layer::SetupLayer(Layer* layer, const string str, const vector& srclayers) { + LayerProto layer_conf; + layer_conf.ParseFromString(str); + layer->Setup(layer_conf, srclayers); + for (auto param : layer->GetParams()) + param->InitValues(); +} + +Layer* Layer::CreateLayer(const string str) { + LayerProto layer_conf; + layer_conf.ParseFromString(str); + return Layer::Create(layer_conf); +} + Layer* Layer::Create(const LayerProto& proto) { auto* factory = Singleton>::Instance(); Layer* layer = nullptr; diff --git a/src/neuralnet/loss_layer/softmax.cc b/src/neuralnet/loss_layer/softmax.cc index 79564706ec..9d0cb1dda5 100644 --- a/src/neuralnet/loss_layer/softmax.cc +++ b/src/neuralnet/loss_layer/softmax.cc @@ -98,6 +98,7 @@ void SoftmaxLossLayer::ComputeGradient(int flag, Tensor gsrc(gsrcptr, Shape1(gsrcblob->count())); gsrc *= scale_ / (1.0f * batchsize_); } + const std::string SoftmaxLossLayer::ToString(bool debug, int flag) { if (debug) return Layer::ToString(debug, flag); diff --git a/src/neuralnet/neuralnet.cc b/src/neuralnet/neuralnet.cc index b045e0600c..5ee81c1b8f 100644 --- a/src/neuralnet/neuralnet.cc +++ b/src/neuralnet/neuralnet.cc @@ -58,6 +58,12 @@ const NetProto NetConfPreprocess(const NetProto& conf) { return proto; } +NeuralNet* NeuralNet::CreateForTest(const string str) { + NetProto net_conf; + net_conf.ParseFromString(str); + return NeuralNet::Create(net_conf,singa::kTest,1); +} + NeuralNet* NeuralNet::Create(const NetProto& net_conf, Phase phase, int npartitions) { const NetProto& full_net_conf = NetConfPreprocess(net_conf); diff --git a/src/neuralnet/neuron_layer/inner_product.cc b/src/neuralnet/neuron_layer/inner_product.cc index 1e5e93e97b..96943eabd1 100644 --- a/src/neuralnet/neuron_layer/inner_product.cc +++ b/src/neuralnet/neuron_layer/inner_product.cc @@ -57,6 +57,8 @@ void InnerProductLayer::Setup(const LayerProto& conf, void InnerProductLayer::ComputeFeature(int flag, const vector& srclayers) { + //auto w = weight_->mutable_cpu_data(); + //LOG(ERROR) << srclayers[0]->name() << " " << w[0]; if (transpose_) MMDot(srclayers[0]->data(this), weight_->data(), &data_); else @@ -83,5 +85,7 @@ void InnerProductLayer::ComputeGradient(int flag, else MMDot(grad_, weight_->data(), srclayers[0]->mutable_grad(this)); } + //clee auto w = weight_->mutable_cpu_data(); + //LOG(ERROR) << srclayers[0]->name() << " " << w[0]; } } // namespace singa diff --git a/src/proto/job.proto b/src/proto/job.proto index 7bc0ea3b9b..1c5b79d13b 100644 --- a/src/proto/job.proto +++ b/src/proto/job.proto @@ -647,6 +647,7 @@ enum LayerType { kImagePreprocess = 101; kPrefetch = 102; kRecordInput = 103; + kDummyInput = 104; kLMDBData = 190; // deprecated kLabel = 191; // deprecated kMnist = 192; // deprecated @@ -676,6 +677,7 @@ enum LayerType { kSoftmax = 214; kGRU = 215; kEmbedding = 216; + kActivation = 217; // cudnn v3 kCudnnConv = 250; diff --git a/src/utils/updater.cc b/src/utils/updater.cc index fa051b11e4..3ce120f2df 100644 --- a/src/utils/updater.cc +++ b/src/utils/updater.cc @@ -60,8 +60,8 @@ float StepLRGen::Get(int step) { // do not cast int to float int freq = proto_.step_conf().change_freq(); float lr = proto_.base_lr() * pow(proto_.step_conf().gamma(), step / freq); - LOG_IF(INFO, step % freq == 0) << "Update learning rate to " << lr - << " @ step " << step; + // LOG_IF(INFO, step % freq == 0) << "Update learning rate to " << lr + // << " @ step " << step; return lr; } @@ -96,6 +96,23 @@ Updater* Updater::Create(const UpdaterProto& proto) { return updater; } +/**************** added for Python Binding ***************************/ +Updater* Updater::CreateUpdater(const string str) { + UpdaterProto conf; + conf.ParseFromString(str); + return Updater::Create(conf); +} + +void Updater::UpdateParams(Updater* updater, Layer* layer, int step) { + float grad_scale = 1.0; + for (auto param : layer->GetParams()) { + updater->Update(step, param, grad_scale); + param->set_version(param->version() + 1); + } +} +/***********************Python Binding end**************************/ + + /***********************SGD with momentum******************************/ void Updater::Init(const UpdaterProto& proto) { momentum_ = proto.momentum(); diff --git a/tool/python/examples/train_cifar10.py b/tool/python/examples/train_cifar10.py new file mode 100755 index 0000000000..e1ad25d3c4 --- /dev/null +++ b/tool/python/examples/train_cifar10.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys, string +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.driver import Driver +from singa.layer import * +from singa.model import * +from singa.utils.utility import swap32 +from google.protobuf.text_format import Merge + +''' +Example of CNN with cifar10 dataset +''' + +def load_dataset(did=1): + ''' + 5 binary dataset, each contains 10000 images + 1 row (1 image) includes 1 label & 3072 pixels + 3072 pixels are 3 channels of a 32x32 image + ''' + print '[Loading CIFAR10 dataset]', did + dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" + fname_train_data = dataset_dir_ + "/data_batch_{}.bin".format(did) + + nb_samples = 10000 + nb_pixels = 3 * 1024 + d = np.fromfile(fname_train_data, dtype=np.uint8) + d = d.reshape(nb_samples, nb_pixels + 1) # +1 for label + x = d[:, 1:] + x = x - x.mean(axis=0) + print ' data x:', x.shape + y = d[:, 0] + y = y.reshape(nb_samples, 1) + print ' label y:', y.shape + return x, y + +def get_labellist(): + dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" + fname_label_list = dataset_dir_ + "/batches.meta.txt" + label_list_ = np.genfromtxt(fname_label_list, dtype=str) + return label_list_ + +#------------------------------------------------------------------- +print '[Layer registration/declaration]' +d = Driver() +d.Init(sys.argv) + +input = Dummy() +label = Dummy() + +conv1 = Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2) +pool1 = MaxPooling2D(pool_size=(3,3), stride=2) +act1 = Activation('relu') +lrn1 = LRN2D(3, alpha=0.00005, beta=0.75) + +conv2 = Convolution2D(32, 5, 1, 2, b_lr=2) +act2 = Activation('relu') +pool2 = AvgPooling2D(pool_size=(3,3), stride=2) +lrn2 = LRN2D(3, alpha=0.00005, beta=0.75) + +conv3 = Convolution2D(64, 5, 1, 2) +act3 = Activation('relu') +pool3 = AvgPooling2D(pool_size=(3,3), stride=2) + +inner1 = Dense(10, w_wd=250, b_lr=2, b_wd=0) +#act4 = Activation('softmax') +loss = Loss('softmaxloss') + +sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) + +#------------------------------------------------------------------- +print '[Start training]' +batchsize = 100 +disp_freq = 50 +train_step = 1000 + +for dataset_id in range(train_step / batchsize): + + x, y = load_dataset(dataset_id%5+1) + + for i in range(x.shape[0] / batchsize): + + xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] + input.SetData(xb, 3, 0) + label.SetData(yb, 1, 1) + + conv1.ComputeFeature(input) + pool1.ComputeFeature(conv1) + act1.ComputeFeature(pool1) + lrn1.ComputeFeature(act1) + + conv2.ComputeFeature(lrn1) + act2.ComputeFeature(conv2) + pool2.ComputeFeature(act2) + lrn2.ComputeFeature(pool2) + + conv3.ComputeFeature(lrn2) + act3.ComputeFeature(conv3) + pool3.ComputeFeature(act3) + + inner1.ComputeFeature(pool3) + loss.ComputeFeature(inner1, label) + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), + loss.display() + + loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/train_mnist.py b/tool/python/examples/train_mnist.py new file mode 100755 index 0000000000..dc8949aea3 --- /dev/null +++ b/tool/python/examples/train_mnist.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys, string +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.driver import Driver +from singa.layer import * +from singa.model import * +from singa.utils.utility import swap32 +from google.protobuf.text_format import Merge + +''' +Example of MLP with MNIST dataset +''' + +def load_dataset(): + ''' + train-images: 4 int32 headers & int8 pixels + train-labels: 2 int32 headers & int8 labels + ''' + print '[Loading MNIST dataset]' + fname_train_data = "examples/mnist/train-images-idx3-ubyte" + fname_train_label = "examples/mnist/train-labels-idx1-ubyte" + info = swap32(np.fromfile(fname_train_data, dtype=np.uint32, count=4)) + nb_samples = info[1] + shape = (info[2],info[3]) + + x = np.fromfile(fname_train_data, dtype=np.uint8) + x = x[4*4:] # skip header + x = x.reshape(nb_samples, shape[0]*shape[1]) + print ' data x:', x.shape + y = np.fromfile(fname_train_label, dtype=np.uint8) + y = y[4*2:] # skip header + y = y.reshape(nb_samples, 1) + print ' label y:', y.shape + return x, y + +#------------------------------------------------------------------- +print '[Layer registration/declaration]' +d = Driver() +d.Init(sys.argv) + +input = Dummy() +label = Dummy() +''' +(TODO) clee: need to think ... +inner1 = Dense(2500, init='uniform', activation='stanh') +inner2 = Dense(2000, init='uniform', activation='stanh') +inner3 = Dense(1000, init='uniform', activation='stanh') +inner4 = Dense(500, init='uniform', activation='stanh') +inner5 = Dense(10, init='uniform', activation='softmax') +''' +inner1 = Dense(2500, init='uniform') +inner2 = Dense(2000, init='uniform') +inner3 = Dense(1500, init='uniform') +inner4 = Dense(1000, init='uniform') +inner5 = Dense(500, init='uniform') +inner6 = Dense(10, init='uniform') +act1 = Activation('stanh') +act2 = Activation('stanh') +act3 = Activation('stanh') +act4 = Activation('stanh') +act5 = Activation('stanh') +loss = Loss('softmaxloss') + +sgd = SGD(lr=0.001, lr_type='step') + +#------------------------------------------------------------------- +x, y = load_dataset() + +print '[Start training]' +batchsize = 64 +disp_freq = 10 + +#for i in range(x.shape[0] / batchsize): +for i in range(100): + xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] + input.SetData(xb) + label.SetData(yb, is_label=1) + inner1.ComputeFeature(input) + act1.ComputeFeature(inner1) + inner2.ComputeFeature(act1) + act2.ComputeFeature(inner2) + inner3.ComputeFeature(act2) + act3.ComputeFeature(inner3) + inner4.ComputeFeature(act3) + act4.ComputeFeature(inner4) + inner5.ComputeFeature(act4) + act5.ComputeFeature(inner5) + inner6.ComputeFeature(act5) + #w6, b6 = inner6.GetParams() + #d6 = inner6.GetData() + loss.ComputeFeature(inner6, label) + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1), + loss.display() + + + loss.ComputeGradient(i+1, sgd) + + diff --git a/tool/python/singa/driver.i b/tool/python/singa/driver.i index f756d574f4..7f1ab50a44 100644 --- a/tool/python/singa/driver.i +++ b/tool/python/singa/driver.i @@ -25,19 +25,90 @@ %include "std_vector.i" %include "std_string.i" %include "argcargv.i" +%include "carrays.i" +%array_class(float, floatArray); + %apply (int ARGC, char **ARGV) { (int argc, char **argv) } %{ #include "singa/driver.h" +#include "singa/neuralnet/neuralnet.h" +#include "singa/neuralnet/layer.h" +#include "singa/neuralnet/input_layer.h" +#include "singa/neuralnet/loss_layer.h" +#include "singa/utils/blob.h" +#include "singa/utils/param.h" +#include "singa/utils/updater.h" +#include "singa/proto/job.pb.h" %} -namespace singa{ -using std::vector; -class Driver{ -public: -void Train(bool resume, const std::string job_conf); -void Init(int argc, char **argv); -void InitLog(char* arg); -void Test(const std::string job_conf); -}; +namespace std { + %template(strVector) vector; + %template(intVector) vector; + %template(floatVector) vector; + %template(layerVector) vector; + %template(paramVector) vector; } +namespace singa{ + class Driver{ + public: + void Train(bool resume, const std::string job_conf); + void Init(int argc, char **argv); + void InitLog(char* arg); + void Test(const std::string job_conf); + }; + + /* + class NeuralNet{ + public: + static NeuralNet* CreateForTest(const std::string str); + void Load(const std::vector& paths); + inline const std::vector& layers(); + inline const std::vector& srclayers(const singa::Layer* layer); + }; + */ + + class DummyInputLayer{ + public: + void Feed(int batchsize, std::vector shape, std::vector* data, int op); + singa::Layer* ToLayer(); + }; + + %nodefault Layer; + class Layer{ + public: + static singa::Layer* CreateLayer(const std::string str); + static void SetupLayer(singa::Layer* layer, const std::string str, const std::vector& srclayers); + virtual void Feed(int batchsize, std::vector shape, std::vector* data, int op); + virtual void ComputeFeature(int flag, const std::vector& srclayers); + virtual void ComputeGradient(int flag, const std::vector& srclayers); + virtual const singa::Blob& data(const singa::Layer* from); + virtual const std::vector GetParams(); + virtual const std::string ToString(bool debug, int flag); + }; + + %nodefault Updater; + class Updater{ + public: + static singa::Updater* CreateUpdater(const std::string str); + static void UpdateParams(singa::Updater* updater, singa::Layer* layer, int step); + }; + + template + class Blob{ + public: + inline int count(); + inline const std::vector& shape(); + inline Dtype* mutable_cpu_data(); + inline const Dtype* cpu_data(); + }; + + class Param{ + public: + inline int size(); + inline const std::vector& shape(); + inline float* mutable_cpu_data(); + }; + + %template(floatBlob) Blob; +} diff --git a/tool/python/singa/layer.py b/tool/python/singa/layer.py index f838e45852..e377c0aa3e 100644 --- a/tool/python/singa/layer.py +++ b/tool/python/singa/layer.py @@ -25,15 +25,19 @@ This script includes Layer class and its subclasses that users can configure different types of layers for their model. ''' - +import numpy from singa.parameter import Parameter, set_param_field from singa.initializations import get_init_values from singa.utils.utility import setval, generate_name from singa.utils.message import * from google.protobuf import text_format +from singa.driver import Layer as SingaLayer, Updater as SingaUpdater, DummyInputLayer, intVector, floatVector, layerVector, paramVector, floatArray_frompointer + class Layer(object): + singaupdater = None + def __init__(self, **kwargs): ''' **kwargs (KEY=VALUE) @@ -41,13 +45,110 @@ def __init__(self, **kwargs): ''' self.layer = Message('Layer', **kwargs).proto - # required + # required field if not 'name' in kwargs: setval(self.layer, name=generate_name('layer', 1)) - # srclayers are set in Model.build() + # layer connectivity is set in Model.build() self.is_datalayer = False + self.singalayer = None + self.srclayers = [] + + def ComputeFeature(self, *srclys): + #print ' >> CompFeature()', self.layer.name, '# of srcs:', len(srclys) + + # create singa::Layer and store srclayers + if self.singalayer == None: + self.singalayer = SingaLayer.CreateLayer(self.layer.SerializeToString()) + self.singaSrclayerVector = layerVector(len(srclys)) + for i in range(len(srclys)): + self.srclayers.append(srclys[i]) + self.singaSrclayerVector[i] = srclys[i].get_singalayer() + + #print ' >> Setup', self.layer.name + SingaLayer.SetupLayer(self.singalayer, self.layer.SerializeToString(), self.singaSrclayerVector) + + self.singalayer.ComputeFeature(1, self.singaSrclayerVector) + + + def ComputeGradient(self, step, upd=None): + #print ' >> CompGradient()', self.layer.name, '# of srcs', len(self.srclayers) + + # create singa::Updater + assert upd != None, 'required Updater (see model.py)' + if Layer.singaupdater == None: + Layer.singaupdater = SingaUpdater.CreateUpdater(upd.proto.SerializeToString()) + + # call ComputeGradient of Singa + self.singalayer.ComputeGradient(1, self.singaSrclayerVector) + SingaUpdater.UpdateParams(Layer.singaupdater, self.singalayer, step) + + # recursively call ComputeGradient of srclayers + for sly in self.srclayers: + if sly.srclayers != None: + sly.ComputeGradient(step, upd) + + def GetParams(self): + params = self.singalayer.GetParams() + assert len(params) == 2, 'weight and bias' + + weight_array = floatArray_frompointer(params[0].mutable_cpu_data()) + weight = [ weight_array[i] for i in range(params[0].size()) ] + weight = numpy.array(weight).reshape(params[0].shape()) + + bias_array = floatArray_frompointer(params[1].mutable_cpu_data()) + bias = [ bias_array[i] for i in range(params[1].size()) ] + bias = numpy.array(bias).reshape(1, params[1].shape()[0]) + + return weight, bias + + def GetData(self): + blobptr = self.singalayer.data(self.singalayer) + data_array = floatArray_frompointer(blobptr.mutable_cpu_data()) + data = [ data_array[i] for i in range(blobptr.count()) ] + return data + + def display(self): + debug, flag = 0, 0 + print self.singalayer.ToString(debug, flag) + + def get_singalayer(self): + return self.singalayer + + +class Dummy(object): + + def __init__(self): + self.srclayers = None + + kwargs = {'name':'dummy', 'type':kDummyInput} + self.layer = Message('Layer', **kwargs).proto + self.singalayer = SingaLayer.CreateLayer(self.layer.SerializeToString()) + SingaLayer.SetupLayer(self.singalayer, self.layer.SerializeToString(), layerVector(0)) + + def SetData(self, data, nb_channel=1, is_label=0): + #print ' >> SetData', data.shape + batchsize, hdim = data.shape + datasize = batchsize * hdim + data = data.astype(numpy.float) + dummyData = floatVector(datasize) + k = 0 + for i in range(batchsize): + for j in range(hdim): + dummyData[k] = data[i,j] + k += 1 + + shape = intVector(3) + shape[0] = nb_channel + shape[1] = int(numpy.sqrt(hdim/nb_channel)) + shape[2] = shape[1] + self.singalayer.Feed(batchsize, shape, dummyData, is_label) + + def get_singalayer(self): + return self.singalayer + + class Data(Layer): def __init__(self, load, phase='train', checkpoint=None, @@ -155,6 +256,7 @@ def __init__(self, nb_filter=0, kernel=0, stride=1, pad=0, if activation: self.mask = Activation(activation=activation).layer + class MaxPooling2D(Layer): def __init__(self, pool_size=None, @@ -225,24 +327,47 @@ def __init__(self, size=0, **kwargs): init_values = get_init_values('lrn2d', **kwargs) setval(self.layer.lrn_conf, **init_values) +class Loss(Layer): + + def __init__(self, lossname, topk=1): + ''' + required + lossname = (string) // softmaxloss, euclideanloss + ''' + self.layer_type = enumLayerType(lossname) + super(Loss, self).__init__(name=generate_name(lossname), + type=self.layer_type) + if lossname == 'softmaxloss': + self.layer.softmaxloss_conf.topk = topk class Activation(Layer): - def __init__(self, activation='stanh', topk=1): + def __init__(self, activation='stanh'): ''' required - activation = (string) - optional - topk = (int) // the number of results + activation = (string) // relu, sigmoid, tanh, stanh, softmax. ''' + if activation == 'tanh': + print 'Warning: Tanh layer is not supported for CPU' self.name = activation - if activation == 'tanh': activation = 'stanh' # <-- better way to set? - self.layer_type = enumLayerType(activation) + self.layer_type = kActivation + if activation == 'stanh': + self.layer_type = kSTanh + elif activation == 'softmax': + self.layer_type = kSoftmax super(Activation, self).__init__(name=generate_name(self.name), type=self.layer_type) - if activation == 'softmaxloss': - self.layer.softmaxloss_conf.topk = topk + if activation == 'relu': + self.layer.activation_conf.type = RELU + elif activation == 'sigmoid': + self.layer.activation_conf.type = SIGMOID + elif activation == 'tanh': + self.layer.activation_conf.type = TANH # for GPU + #elif activation == 'stanh': + # self.layer.activation_conf.type = STANH + + class Dropout(Layer): diff --git a/tool/python/singa/model.py b/tool/python/singa/model.py index f652f86eed..991b1ab40f 100644 --- a/tool/python/singa/model.py +++ b/tool/python/singa/model.py @@ -107,9 +107,9 @@ def compile(self, optimizer=None, cluster=None, else: # add new layer if loss == 'categorical_crossentropy': - self.add(Activation('softmaxloss', topk=topk)) + self.add(Loss('softmaxloss', topk=topk)) elif loss == 'mean_squared_error': - self.add(Activation('euclideanloss')) + self.add(Loss('euclideanloss')) elif loss == 'user_loss_rnnlm': # user-defined loss layer self.add(UserLossRNNLM(nclass=kwargs['nclass'], vocab_size=kwargs['in_dim'])) @@ -323,15 +323,25 @@ def set_cudnn_layer_type(self, net): elif ly_type == kLRN: cudnn_ly_type = kCudnnLRN elif ly_type == kSoftmax: cudnn_ly_type = kCudnnSoftmax elif ly_type == kSoftmaxLoss: cudnn_ly_type = kCudnnSoftmaxLoss + elif ly_type == kActivation: + cudnn_ly_type = kCudnnActivation elif ly_type == kSTanh: + print 'Error report: STanh layer is not supported for GPU' + ''' + elif ly_type == kReLU: cudnn_ly_type = kCudnnActivation - net.layer[i].activation_conf.type = STANH + net.layer[i].activation_conf.type = RELU elif ly_type == kSigmoid: cudnn_ly_type = kCudnnActivation net.layer[i].activation_conf.type = SIGMOID - elif ly_type == kReLU: + elif ly_type == kTanh: cudnn_ly_type = kCudnnActivation - net.layer[i].activation_conf.type = RELU + net.layer[i].activation_conf.type = TANH + ''' + #elif ly_type == kSTanh: + # print 'Error report: STanh layer is not supported for GPU' + #cudnn_ly_type = kCudnnActivation + #net.layer[i].activation_conf.type = STANH net.layer[i].type = cudnn_ly_type class Energy(Model): diff --git a/tool/python/singa/utils/utility.py b/tool/python/singa/utils/utility.py index 8c6c455dbc..bea784de28 100644 --- a/tool/python/singa/utils/utility.py +++ b/tool/python/singa/utils/utility.py @@ -25,6 +25,7 @@ This script includes methods to (1) generate name of layer, parameter, etc. (2) set field values for proto. +(3) swap bits ''' LAYERID = 0 @@ -82,3 +83,9 @@ def setval(proto, **kwargs): fattr.MergeFrom(val) else: setattr(proto, key, val) + +def swap32(x): + return (((x << 24) & 0xFF000000) | + ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | + ((x >> 24) & 0x000000FF)) From e3325051011664045fcce73d8a17b24a8ecc83c6 Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Tue, 22 Mar 2016 18:49:39 +0800 Subject: [PATCH 04/26] add mesos example --- examples/cifar10/job.conf | 18 +- examples/cifar10_mesos/automobile.jpg | Bin 0 -> 966 bytes examples/cifar10_mesos/bird.jpg | Bin 0 -> 925 bytes .../cifar10_mesos/checkpoint/step0-worker0 | Bin 0 -> 340535 bytes .../cifar10_mesos/checkpoint/step1000-worker0 | Bin 0 -> 340543 bytes examples/cifar10_mesos/cifarBin2img.py | 67 +++++ examples/cifar10_mesos/dog.jpg | Bin 0 -> 997 bytes examples/cifar10_mesos/executor.py | 127 +++++++++ examples/cifar10_mesos/framework.py | 168 +++++++++++ examples/cifar10_mesos/main.py | 263 ++++++++++++++++++ examples/cifar10_mesos/main.pyc | Bin 0 -> 8959 bytes examples/cifar10_mesos/singa.conf | 7 + examples/cifar10_mesos/test_executor.py | 66 +++++ examples/cifar10_mesos/test_framework.py | 216 ++++++++++++++ examples/cifar10_py/cifarBin2img.py | 42 +-- examples/cifar10_py/main.py | 6 + include/singa/neuralnet/neuron_layer.h | 2 +- src/neuralnet/neuron_layer/pooling.cc | 22 +- src/proto/job.proto | 10 +- thirdparty/install.sh | 8 +- tool/mesos/Makefile | 6 +- tool/mesos/scheduler.conf | 6 +- tool/mesos/singa_scheduler.cc | 8 +- tool/python/singa/layer.py | 6 +- tool/python/singa/utils/message.py | 35 ++- tool/python/singa/utils/utility.py | 5 + 26 files changed, 1020 insertions(+), 68 deletions(-) create mode 100644 examples/cifar10_mesos/automobile.jpg create mode 100644 examples/cifar10_mesos/bird.jpg create mode 100644 examples/cifar10_mesos/checkpoint/step0-worker0 create mode 100644 examples/cifar10_mesos/checkpoint/step1000-worker0 create mode 100644 examples/cifar10_mesos/cifarBin2img.py create mode 100644 examples/cifar10_mesos/dog.jpg create mode 100755 examples/cifar10_mesos/executor.py create mode 100755 examples/cifar10_mesos/framework.py create mode 100755 examples/cifar10_mesos/main.py create mode 100644 examples/cifar10_mesos/main.pyc create mode 100644 examples/cifar10_mesos/singa.conf create mode 100755 examples/cifar10_mesos/test_executor.py create mode 100755 examples/cifar10_mesos/test_framework.py diff --git a/examples/cifar10/job.conf b/examples/cifar10/job.conf index d20b452e34..e5990fbf16 100644 --- a/examples/cifar10/job.conf +++ b/examples/cifar10/job.conf @@ -1,10 +1,10 @@ name: "cifar10-convnet" -train_steps: 1000 -test_steps: 100 -test_freq: 200 +train_steps: 50000 +test_steps: 1000 +test_freq: 2000 #validate_steps: 100 #validate_freq: 300 -disp_freq: 50 +disp_freq: 1000 #checkpoint_path: "examples/cifar10/checkpoint/step1000-worker0" train_one_batch { alg: kBP @@ -31,8 +31,8 @@ neuralnet { type: kRecordInput store_conf { backend: "kvfile" - path: "examples/cifar10/train_data.bin" - mean_file: "examples/cifar10/image_mean.bin" + path: "/home/aaron/Projects/incubator-singa/examples/cifar10/train_data.bin" + mean_file: "/home/aaron/Projects/incubator-singa/examples/cifar10/image_mean.bin" batchsize: 100 #random_skip: 5000 shape: 3 @@ -61,8 +61,8 @@ neuralnet { type: kRecordInput store_conf { backend: "kvfile" - path: "examples/cifar10/test_data.bin" - mean_file: "examples/cifar10/image_mean.bin" + path: "/home/aaron/Projects/incubator-singa/examples/cifar10/test_data.bin" + mean_file: "/home/aaron/Projects/incubator-singa/examples/cifar10/image_mean.bin" batchsize: 100 shape: 3 shape: 32 @@ -275,5 +275,5 @@ cluster { nserver_groups: 1 nworkers_per_group: 1 nworkers_per_procs: 1 - workspace: "examples/cifar10" + workspace: "/home/aaron/Projects/incubator-singa/examples/cifar10" } diff --git a/examples/cifar10_mesos/automobile.jpg b/examples/cifar10_mesos/automobile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f71fa7138d78bc06e928a46d15ad8696eb703ba GIT binary patch literal 966 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Dv=tXG!=S8{J@VR?1<#$%Dw4|7vBcg%WL zac2Dn6_4ohry*bF+6Qd7e#3Ni!^SC-i%Noz)$S@?TkCbpev``S9jD~^tdlpcx7&Vf z;+G0-ua@WP*>=}|pIEcD^sdzd|J;0=Z`<7qyCT`%uloEeJTP~~!V*vC<9dcqPnd0& zt=sxs{E)%hrqEqYYx|$ZeAyoCyyCExui6vKrza1tQEzK?FI{XB`YI^AEaPk2)u3F% zckj0RT(qN1E_gv2&+--Ozocdd&Tw4ZS}GTFqMXSx$>N~h@vWg3O3(WHG?{PS9jW_R zE@j*O8Vj3*70-K~t;^bZCF#l{57j%;XFdLG5|R61e`(jN%QdS!9v!&Wl{e>GI%8$I z$mdl{_XJMs&SuytBe(d%bz=+uGN;dwYa?X-m+D~Yi@aa|8xI;69D_KfxZ9$ literal 0 HcmV?d00001 diff --git a/examples/cifar10_mesos/bird.jpg b/examples/cifar10_mesos/bird.jpg new file mode 100644 index 0000000000000000000000000000000000000000..241e69d15db9c86111d8426e801dc1235bf7191f GIT binary patch literal 925 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⁡eyG3j=m4Ai_c5J;%zsK`7)ocj&R`x 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

*9X*-$%Q4*`t}&Mr4`9W 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

N2+z_ZRvgkat4U62Rpz6+bNGsSv-x9WC@{18H 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 literal 0 HcmV?d00001 diff --git a/examples/cifar10_mesos/executor.py b/examples/cifar10_mesos/executor.py new file mode 100755 index 0000000000..ba2adcc03d --- /dev/null +++ b/examples/cifar10_mesos/executor.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +import threading +import time +import glob +from multiprocessing import Process + +MESOS_ROOT="/home/aaron/Softs/mesos-0.27.0/build" +for egg in glob.glob(os.path.join(MESOS_ROOT,'src','python','dist','*.egg')): + sys.path.append(os.path.abspath(egg)) + + +import mesos.interface +from mesos.interface import mesos_pb2 +import mesos.native + +import main + +class MyExecutor(mesos.interface.Executor): + def launchTask(self, driver, task): + # Create a thread to run the task. Tasks should always be run in new + # threads or processes, rather than inside launchTask itself. + + def runTask(driver,task): + # We are in the child. + # This is where one would perform the requested task. + + try: + print "test" + sys.argv.append("-singa_conf") + sys.argv.append("/home/aaron/Projects/incubator-singa/conf/singa.conf") + model = main.buildModel(1) + main.product(model) + except Exception as e: + print str(e) + print "Sending status failed..." + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_FAILED + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + print "Sent status failed" + sys.exit(1) + print "Sending status finished..." + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_FINISHED + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + print "Sent status finished" + print "Running task %s" % task.task_id.value + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_RUNNING + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + time.sleep(20) + p = Process(target=runTask, args=(driver,task)) + p.start() + p.join() + ''' + pid = os.fork() + if pid == 0: + # We are in the child. + # This is where one would perform the requested task. + + try: + model = main.buildModel(1) + print "test" + sys.argv.append("-singa_conf") + sys.argv.append("/home/aaron/Projects/incubator-singa/conf/singa.conf") + main.product(model) + except Exception as e: + print str(e) + print "Sending status failed..." + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_FAILED + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + print "Sent status failed" + sys.exit(1) + print "Sending status finished..." + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_FINISHED + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + print "Sent status finished" + sys.exit(0) + else: + # in parent + print "Running task %s" % task.task_id.value + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_RUNNING + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + time.sleep(20) + ''' + def frameworkMessage(self, driver, message): + # Send it back to the scheduler. + print "send message" + driver.sendFrameworkMessage(message) + +if __name__ == "__main__": + print "Starting executor on slave" + driver = mesos.native.MesosExecutorDriver(MyExecutor()) + sys.exit(0 if driver.run() == mesos_pb2.DRIVER_STOPPED else 1) diff --git a/examples/cifar10_mesos/framework.py b/examples/cifar10_mesos/framework.py new file mode 100755 index 0000000000..15eaabde10 --- /dev/null +++ b/examples/cifar10_mesos/framework.py @@ -0,0 +1,168 @@ +#!/usr/bin/env python + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +import time +import glob + +MESOS_ROOT="/home/aaron/Softs/mesos-0.27.0/build" +for egg in glob.glob(os.path.join(MESOS_ROOT,'src','python','dist','*.egg')): + sys.path.append(os.path.abspath(egg)) + +import mesos.interface +from mesos.interface import mesos_pb2 +import mesos.native + +TOTAL_TASKS = 1 + +TASK_CPUS = 1 +TASK_MEM = 128 + +class TestScheduler(mesos.interface.Scheduler): + def __init__(self): + self.taskData = {} + self.tasksLaunched = 0 + self.tasksFinished = 0 + self.messagesSent = 0 + self.messagesReceived = 0 + + def registered(self, driver, frameworkId, masterInfo): + print "Registered with framework ID %s" % frameworkId.value + + def resourceOffers(self, driver, offers): + for offer in offers: + tasks = [] + offerCpus = 0 + offerMem = 0 + for resource in offer.resources: + if resource.name == "cpus": + offerCpus += resource.scalar.value + elif resource.name == "mem": + offerMem += resource.scalar.value + + print "Received offer %s with cpus: %s and mem: %s" \ + % (offer.id.value, offerCpus, offerMem) + + remainingCpus = offerCpus + remainingMem = offerMem + # no more tasks + if self.tasksLaunched == TOTAL_TASKS: + return + print "launch tasks" + while self.tasksLaunched < TOTAL_TASKS and \ + remainingCpus >= TASK_CPUS and \ + remainingMem >= TASK_MEM: + tid = self.tasksLaunched + self.tasksLaunched += 1 + + print "Launching task %d using offer %s" \ + % (tid, offer.id.value) + + task = mesos_pb2.TaskInfo() + task.task_id.value = str(tid) + task.slave_id.value = offer.slave_id.value + task.name = "task %d" % tid + task.command.value = os.path.abspath("./main.py") + + cpus = task.resources.add() + cpus.name = "cpus" + cpus.type = mesos_pb2.Value.SCALAR + cpus.scalar.value = TASK_CPUS + + mem = task.resources.add() + mem.name = "mem" + mem.type = mesos_pb2.Value.SCALAR + mem.scalar.value = TASK_MEM + + tasks.append(task) + self.taskData[task.task_id.value] = ( + offer.slave_id, task.executor.executor_id) + + remainingCpus -= TASK_CPUS + remainingMem -= TASK_MEM + + operation = mesos_pb2.Offer.Operation() + operation.type = mesos_pb2.Offer.Operation.LAUNCH + operation.launch.task_infos.extend(tasks) + + driver.acceptOffers([offer.id], [operation]) + + def statusUpdate(self, driver, update): + print "Task %s is in state %s" % \ + (update.task_id.value, mesos_pb2.TaskState.Name(update.state)) + + if update.state == mesos_pb2.TASK_FINISHED: + self.tasksFinished += 1 + if self.tasksFinished == TOTAL_TASKS: + print "All tasks done, waiting for final framework message" + + slave_id, executor_id = self.taskData[update.task_id.value] + + self.messagesSent += 1 + driver.sendFrameworkMessage( + executor_id, + slave_id, + 'data with a \0 byte') + + if update.state == mesos_pb2.TASK_LOST or \ + update.state == mesos_pb2.TASK_KILLED or \ + update.state == mesos_pb2.TASK_FAILED: + print "Aborting because task %s is in unexpected state %s with message '%s'" \ + % (update.task_id.value, mesos_pb2.TaskState.Name(update.state), update.message) + driver.abort() + + + def frameworkMessage(self, driver, executorId, slaveId, message): + self.messagesReceived += 1 + + print "Received message:", repr(str(message)) + + if self.messagesReceived == TOTAL_TASKS: + if self.messagesReceived != self.messagesSent: + print "Sent", self.messagesSent, + print "but received", self.messagesReceived + sys.exit(1) + print "All tasks done, and all messages received, exiting" + driver.stop() + +if __name__ == "__main__": + if len(sys.argv) != 2: + print "Usage: %s master" % sys.argv[0] + sys.exit(1) + master_uri=sys.argv[1] + + framework = mesos_pb2.FrameworkInfo() + framework.user = "" # Have Mesos fill in the current user. + framework.name = "SINGA product (Python)" + framework.checkpoint = True + + framework.principal = "SINGA-product-python" + + driver = mesos.native.MesosSchedulerDriver( + TestScheduler(), + framework, + master_uri + ) + + status = 0 if driver.run() == mesos_pb2.DRIVER_STOPPED else 1 + + # Ensure that the driver process terminates. + driver.stop(); + + sys.exit(status) diff --git a/examples/cifar10_mesos/main.py b/examples/cifar10_mesos/main.py new file mode 100755 index 0000000000..9292550530 --- /dev/null +++ b/examples/cifar10_mesos/main.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +#************** +#*sudo apt-get install libjpeg-dev +#*sudo pip install +#* flask pillow protobuf + + + +from PIL import Image +import sys, glob, os, random, shutil, time +from flask import Flask, request, redirect, url_for +#all the settings +current_path_ = os.path.dirname(__file__) + +singa_root_=os.path.abspath(os.path.join(current_path_,'../..')) + +#data prepare settings +input_folder_=os.path.abspath(os.path.join(current_path_,"data/raw")) +output_folder_=os.path.abspath(os.path.join(current_path_,"data/out")) +temp_folder_=os.path.abspath(os.path.join(current_path_,"data/temp")) + +meta_file_name_="meta.txt" +train_bin_file_name_="train.bin" +test_bin_file_name_="test.bin" +validate_bin_file_name_="validate.bin" +mean_bin_file_name_="mean.bin" +label_list_=[(0,"airplane"), + (1,"truck"), + (2,"ship"), + (3,"dog"), + (4,"cat"), + (5,"deer"), + (6,"bird"), + (7,"automobile"), + (8,"horse"), + (9,"frog")] + +#image size +size_=(32,32) + +#final label numbers +total_record_num_=60000 +label_num_=10 + +#data partial +train_rate_=5.0/6 +test_rate_=1.0/6 +validate_rate_=0.0 + +#training settings +model_name_="cifar10-cnn" +workspace_="/home/aaron/Projects/incubator-singa/examples/cifar10_mesos" +batch_size_=64 +check_point_path_=workspace_+"/checkpoint/step1000-worker0" + + +allowd_extensions_ = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) + +#singa python libs +sys.path.append(os.path.join(singa_root_,'tool','python')) +from singa.driver import NeuralNet,Driver,strVector,layerVector,intVector,floatVector,DummyInputLayer,Layer,floatArray_frompointer +from singa.model import * +from singa.utils import kvstore, imgtool +from pb2.common_pb2 import RecordProto +app = Flask(__name__) + +mean_record_="" +dummy_="" +net_="" +pixel_length_=0 + + +def buildModel(argv): + model = Sequential(model_name_,argv) + + model.add(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) + model.add(MaxPooling2D(pool_size=(3,3), stride=2)) + model.add(Activation('relu')) + model.add(LRN2D(3, alpha=0.00005, beta=0.75)) + + model.add(Convolution2D(32, 5, 1, 2, b_lr=2)) + model.add(Activation('relu')) + model.add(AvgPooling2D(pool_size=(3,3), stride=2)) + model.add(LRN2D(3, alpha=0.00005, beta=0.75)) + + model.add(Convolution2D(64, 5, 1, 2)) + model.add(Activation('relu')) + model.add(AvgPooling2D(pool_size=(3,3), stride=2)) + + #label_num_ should be the same with input data label num + model.add(Dense(label_num_, w_wd=250, b_lr=2, b_wd=0, activation='softmax')) + + sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) + + topo = Cluster(workspace_) + model.compile(loss='categorical_crossentropy', optimizer=sgd, cluster=topo) + + return model + + + +def generate_data_conf( + backend = 'kvfile', + batchsize = 1, + random = 5000, + shape = (3, 32, 32), + std = 127.5, + mean = 127.5 + ): + + # using cifar10 dataset + path_train =os.path.join(output_folder_ ,train_bin_file_name_) + path_test =os.path.join(output_folder_ ,test_bin_file_name_) + path_mean =os.path.join(output_folder_ ,mean_bin_file_name_) + + + store = Store(path=path_train, mean_file=path_mean, backend=backend, + random_skip=random, batchsize=batchsize, + shape=shape) + + data_train = Data(load='recordinput', phase='train', conf=store) + + store = Store(path=path_test, mean_file=path_mean, backend=backend, + batchsize=batchsize, + shape=shape) + + data_test = Data(load='recordinput', phase='test', conf=store) + + return data_train, data_test + + +def train(model): + + X_train, X_test= generate_data_conf(batchsize=batch_size_) + model.fit(X_train, nb_epoch=1000, with_test=True) + result = model.evaluate(X_test, test_steps=100, test_freq=300) + +def test(model): + pass + + +@app.route("/") +def index(): + return "Hello World! This is SINGA DLAAS! Please send post request with image=file to '/predict' " + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1] in allowd_extensions_ + +@app.route('/predict', methods=['POST']) +def predict(): + global pixel_length_,mean_record_,net_,dummy_ + if request.method == 'POST': + file = request.files['image'] + if file and allowed_file(file.filename): + im = Image.open(file).convert("RGB") + im = imgtool.resize_to_center(im,size_) + pixel = floatVector(pixel_length_) + byteArray = imgtool.toBin(im,size_) + for i in range(pixel_length_): + pixel[i]= byteArray[i]-mean_record_.data[i] + + #dummy data Layer + + shape = intVector(3) + shape[0]=3 + shape[1]=size_[0] + shape[2]=size_[1] + dummy_.Feed(1,shape,pixel) + + #checkpoint_paths =getattr(m.jobconf, 'checkpoint_path') + checkpoint_paths = strVector(1) + checkpoint_paths[0]=check_point_path_ + net_.Load(checkpoint_paths) + + print "1" + dummyVector=layerVector(1) + dummyVector[0]=dummy_.ToLayer() + print len(net_.layers()) + for i,layer in enumerate(net_.layers()): + #skip data layer + if i==0: + continue + elif i==1: + layer.ComputeFeature(4,dummyVector) + else: + layer.ComputeFeature(4,net_.srclayers(layer)) + + #get result + lastLayer=net_.layers()[-1] + data = lastLayer.data(dummy_.ToLayer()) + prop =floatArray_frompointer(data.mutable_cpu_data()) + result=[] + for i in range(label_num_): + result.append((i,prop[i])) + + result.sort(key=lambda tup: tup[1], reverse=True) + + label_map=dict() + for item in label_list_: + label_map[item[0]]=item[1] + response="" + for r in result: + response+=str(label_map[r[0]])+str(r[1]) + + return response + return "error" + +def product(model): + global pixel_length_,mean_record_,net_,dummy_ + #fake data layer + X_train, X_test= generate_data_conf() + + model.layers.insert(0,X_test) + model.build() + #register layers + d = Driver() + d.Init(sys.argv) + net_ = NeuralNet.CreateForTest(model.jobconf.neuralnet.SerializeToString()) + + + pixel_length_ = 3*size_[0]*size_[1] + + #minus mean and feed data + key,mean_str = kvstore.FileStore().open(os.path.join(output_folder_,mean_bin_file_name_),"read").read() + mean_record_ = RecordProto() + mean_record_.ParseFromString(mean_str) + assert len(mean_record_.data)==pixel_length_ + + dummy_ = DummyInputLayer() + + + app.debug = True + app.run() + + +if __name__=='__main__': + + sys.argv.append("-singa_conf") + sys.argv.append("/home/aaron/Projects/incubator-singa/conf/singa.conf") + model=buildModel(sys.argv) + product(model) diff --git a/examples/cifar10_mesos/main.pyc b/examples/cifar10_mesos/main.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a796657b9b1c50e881fe458036aea091bd25345 GIT binary patch literal 8959 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 literal 0 HcmV?d00001 diff --git a/examples/cifar10_mesos/singa.conf b/examples/cifar10_mesos/singa.conf new file mode 100644 index 0000000000..20cff98d71 --- /dev/null +++ b/examples/cifar10_mesos/singa.conf @@ -0,0 +1,7 @@ +# point to your active zookeeper service +# this is comma separated host:port pairs, each corresponding to a zk server +# e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002" +zookeeper_host: "localhost:2181" + +# set if you want to change log directory +log_dir: "/tmp/singa-log/" diff --git a/examples/cifar10_mesos/test_executor.py b/examples/cifar10_mesos/test_executor.py new file mode 100755 index 0000000000..c5a2615a56 --- /dev/null +++ b/examples/cifar10_mesos/test_executor.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +import threading +import time +import glob + +MESOS_ROOT="/home/aaron/Softs/mesos-0.27.0/build" +for egg in glob.glob(os.path.join(MESOS_ROOT,'src','python','dist','*.egg')): + sys.path.append(os.path.abspath(egg)) + + +import mesos.interface +from mesos.interface import mesos_pb2 +import mesos.native + +class MyExecutor(mesos.interface.Executor): + def launchTask(self, driver, task): + # Create a thread to run the task. Tasks should always be run in new + # threads or processes, rather than inside launchTask itself. + def run_task(): + print "Running task %s" % task.task_id.value + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_RUNNING + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + + # This is where one would perform the requested task. + + print "Sending status update..." + update = mesos_pb2.TaskStatus() + update.task_id.value = task.task_id.value + update.state = mesos_pb2.TASK_FINISHED + update.data = 'data with a \0 byte' + driver.sendStatusUpdate(update) + print "Sent status update" + + thread = threading.Thread(target=run_task) + thread.start() + + def frameworkMessage(self, driver, message): + # Send it back to the scheduler. + driver.sendFrameworkMessage(message) + +if __name__ == "__main__": + print "Starting executor" + driver = mesos.native.MesosExecutorDriver(MyExecutor()) + sys.exit(0 if driver.run() == mesos_pb2.DRIVER_STOPPED else 1) diff --git a/examples/cifar10_mesos/test_framework.py b/examples/cifar10_mesos/test_framework.py new file mode 100755 index 0000000000..f2efed9320 --- /dev/null +++ b/examples/cifar10_mesos/test_framework.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +import time +import glob + +MESOS_ROOT="/home/aaron/Softs/mesos-0.27.0/build" +for egg in glob.glob(os.path.join(MESOS_ROOT,'src','python','dist','*.egg')): + sys.path.append(os.path.abspath(egg)) + +import mesos.interface +from mesos.interface import mesos_pb2 +import mesos.native + +TOTAL_TASKS = 5 + +TASK_CPUS = 1 +TASK_MEM = 128 + +class TestScheduler(mesos.interface.Scheduler): + def __init__(self, implicitAcknowledgements, executor): + self.implicitAcknowledgements = implicitAcknowledgements + self.executor = executor + self.taskData = {} + self.tasksLaunched = 0 + self.tasksFinished = 0 + self.messagesSent = 0 + self.messagesReceived = 0 + + def registered(self, driver, frameworkId, masterInfo): + print "Registered with framework ID %s" % frameworkId.value + + def resourceOffers(self, driver, offers): + for offer in offers: + tasks = [] + offerCpus = 0 + offerMem = 0 + for resource in offer.resources: + if resource.name == "cpus": + offerCpus += resource.scalar.value + elif resource.name == "mem": + offerMem += resource.scalar.value + + print "Received offer %s with cpus: %s and mem: %s" \ + % (offer.id.value, offerCpus, offerMem) + + remainingCpus = offerCpus + remainingMem = offerMem + + while self.tasksLaunched < TOTAL_TASKS and \ + remainingCpus >= TASK_CPUS and \ + remainingMem >= TASK_MEM: + tid = self.tasksLaunched + self.tasksLaunched += 1 + + print "Launching task %d using offer %s" \ + % (tid, offer.id.value) + + task = mesos_pb2.TaskInfo() + task.task_id.value = str(tid) + task.slave_id.value = offer.slave_id.value + task.name = "task %d" % tid + task.executor.MergeFrom(self.executor) + + cpus = task.resources.add() + cpus.name = "cpus" + cpus.type = mesos_pb2.Value.SCALAR + cpus.scalar.value = TASK_CPUS + + mem = task.resources.add() + mem.name = "mem" + mem.type = mesos_pb2.Value.SCALAR + mem.scalar.value = TASK_MEM + + tasks.append(task) + self.taskData[task.task_id.value] = ( + offer.slave_id, task.executor.executor_id) + + remainingCpus -= TASK_CPUS + remainingMem -= TASK_MEM + + operation = mesos_pb2.Offer.Operation() + operation.type = mesos_pb2.Offer.Operation.LAUNCH + operation.launch.task_infos.extend(tasks) + + driver.acceptOffers([offer.id], [operation]) + + def statusUpdate(self, driver, update): + print "Task %s is in state %s" % \ + (update.task_id.value, mesos_pb2.TaskState.Name(update.state)) + + # Ensure the binary data came through. + if update.data != "data with a \0 byte": + print "The update data did not match!" + print " Expected: 'data with a \\x00 byte'" + print " Actual: ", repr(str(update.data)) + sys.exit(1) + + if update.state == mesos_pb2.TASK_FINISHED: + self.tasksFinished += 1 + if self.tasksFinished == TOTAL_TASKS: + print "All tasks done, waiting for final framework message" + + slave_id, executor_id = self.taskData[update.task_id.value] + + self.messagesSent += 1 + driver.sendFrameworkMessage( + executor_id, + slave_id, + 'data with a \0 byte') + + if update.state == mesos_pb2.TASK_LOST or \ + update.state == mesos_pb2.TASK_KILLED or \ + update.state == mesos_pb2.TASK_FAILED: + print "Aborting because task %s is in unexpected state %s with message '%s'" \ + % (update.task_id.value, mesos_pb2.TaskState.Name(update.state), update.message) + driver.abort() + + # Explicitly acknowledge the update if implicit acknowledgements + # are not being used. + if not self.implicitAcknowledgements: + driver.acknowledgeStatusUpdate(update) + + def frameworkMessage(self, driver, executorId, slaveId, message): + self.messagesReceived += 1 + + # The message bounced back as expected. + if message != "data with a \0 byte": + print "The returned message data did not match!" + print " Expected: 'data with a \\x00 byte'" + print " Actual: ", repr(str(message)) + sys.exit(1) + print "Received message:", repr(str(message)) + + if self.messagesReceived == TOTAL_TASKS: + if self.messagesReceived != self.messagesSent: + print "Sent", self.messagesSent, + print "but received", self.messagesReceived + sys.exit(1) + print "All tasks done, and all messages received, exiting" + driver.stop() + +if __name__ == "__main__": + if len(sys.argv) != 2: + print "Usage: %s master" % sys.argv[0] + sys.exit(1) + + executor = mesos_pb2.ExecutorInfo() + executor.executor_id.value = "default" + executor.command.value = os.path.abspath("./test_executor.py") + executor.name = "Test Executor (Python)" + executor.source = "python_test" + + framework = mesos_pb2.FrameworkInfo() + framework.user = "" # Have Mesos fill in the current user. + framework.name = "Test Framework (Python)" + framework.checkpoint = True + + implicitAcknowledgements = 1 + if os.getenv("MESOS_EXPLICIT_ACKNOWLEDGEMENTS"): + print "Enabling explicit status update acknowledgements" + implicitAcknowledgements = 0 + + if os.getenv("MESOS_AUTHENTICATE"): + print "Enabling authentication for the framework" + + if not os.getenv("DEFAULT_PRINCIPAL"): + print "Expecting authentication principal in the environment" + sys.exit(1); + + credential = mesos_pb2.Credential() + credential.principal = os.getenv("DEFAULT_PRINCIPAL") + + if os.getenv("DEFAULT_SECRET"): + credential.secret = os.getenv("DEFAULT_SECRET") + + framework.principal = os.getenv("DEFAULT_PRINCIPAL") + + driver = mesos.native.MesosSchedulerDriver( + TestScheduler(implicitAcknowledgements, executor), + framework, + sys.argv[1], + implicitAcknowledgements, + credential) + else: + framework.principal = "test-framework-python" + + driver = mesos.native.MesosSchedulerDriver( + TestScheduler(implicitAcknowledgements, executor), + framework, + sys.argv[1], + implicitAcknowledgements) + + status = 0 if driver.run() == mesos_pb2.DRIVER_STOPPED else 1 + + # Ensure that the driver process terminates. + driver.stop(); + + sys.exit(status) diff --git a/examples/cifar10_py/cifarBin2img.py b/examples/cifar10_py/cifarBin2img.py index eae4f8d068..8a552ff242 100644 --- a/examples/cifar10_py/cifarBin2img.py +++ b/examples/cifar10_py/cifarBin2img.py @@ -1,24 +1,24 @@ import sys, os - -#all the settings +from numpy.core.test_rational import numerator SINGA_ROOT=os.path.join(os.path.dirname(__file__),'../','../') sys.path.append(os.path.join(SINGA_ROOT,'tool','python')) from singa.model import * from singa.utils import imgtool from PIL import Image - -label_map=dict() +import cPickle def unpickle(file): - import cPickle fo = open(file, 'rb') dict = cPickle.load(fo) fo.close() return dict def test(): + ''' + test imgtool toBin and toImg + ''' im = Image.open("dog.jpg").convert("RGB") byteArray=imgtool.toBin(im,(32,32)) @@ -29,19 +29,17 @@ def test(): def getLabelMap(path): d = unpickle(path) - index=0 - for line in d["label_names"]: + label_map=dict() + for index,line in numerator(d["label_names"]): print index,line label_map[index]=line - index+=1 - return + return label_map -def generateImage(input_path,output_path,random): +def generateImage(input_path,output_path,label_map,random): dict=unpickle(input_path) data=dict["data"] labels=dict["labels"] - index=0 - for d in data: + for index,d in numerator(data): im = imgtool.toImg(data[index],(32,32)) temp_folder=os.path.join(output_path,label_map[labels[index]]) try: @@ -49,17 +47,19 @@ def generateImage(input_path,output_path,random): except: os.makedirs(temp_folder) im.save(os.path.join(temp_folder,random+"_"+str(index)+".jpg"),"JPEG") - index+=1 #print labels -getLabelMap("data/batches.meta") -#generateImage("data/data_batch_1", "data/output","1") -#generateImage("data/data_batch_2", "data/output","2") -#generateImage("data/data_batch_3", "data/output","3") -#generateImage("data/data_batch_4", "data/output","4") -#generateImage("data/data_batch_5", "data/output","5") -#generateImage("data/test_batch", "data/output","6") - +def main(): + label_map=getLabelMap("data/batches.meta") + generateImage("data/data_batch_1", "data/output",label_map,"1") + generateImage("data/data_batch_2", "data/output",label_map,"2") + generateImage("data/data_batch_3", "data/output",label_map,"3") + generateImage("data/data_batch_4", "data/output",label_map,"4") + generateImage("data/data_batch_5", "data/output",label_map,"5") + generateImage("data/test_batch", "data/output",label_map,"6") + +if __name__=='__main__': + main() diff --git a/examples/cifar10_py/main.py b/examples/cifar10_py/main.py index 7ceed9df9a..f52ea4b541 100755 --- a/examples/cifar10_py/main.py +++ b/examples/cifar10_py/main.py @@ -20,6 +20,12 @@ #* #*************************************************************/ +#************** +#*sudo apt-get install libjpeg-dev +#*sudo pip install +#* flask pillow protobuf + + from PIL import Image import sys, glob, os, random, shutil, time diff --git a/include/singa/neuralnet/neuron_layer.h b/include/singa/neuralnet/neuron_layer.h index f03e91bdb6..d494d81ca0 100644 --- a/include/singa/neuralnet/neuron_layer.h +++ b/include/singa/neuralnet/neuron_layer.h @@ -269,7 +269,7 @@ class PoolingLayer : public NeuronLayer { int kernel_x_, pad_x_, stride_x_; int kernel_y_, pad_y_, stride_y_; int batchsize_, channels_, height_, width_, pooled_height_, pooled_width_; - PoolingProto_PoolMethod pool_; + PoolMethod pool_; }; /** * Use book-keeping for BP following Caffe's pooling implementation diff --git a/src/neuralnet/neuron_layer/pooling.cc b/src/neuralnet/neuron_layer/pooling.cc index 4eda2e4097..d20b862a0f 100644 --- a/src/neuralnet/neuron_layer/pooling.cc +++ b/src/neuralnet/neuron_layer/pooling.cc @@ -58,8 +58,8 @@ void PoolingLayer::Setup(const LayerProto& conf, } pool_ = conf.pooling_conf().pool(); - CHECK(pool_ == PoolingProto_PoolMethod_AVG - || pool_ == PoolingProto_PoolMethod_MAX) + CHECK(pool_ == AVG + || pool_ == MAX) << "Padding implemented only for average and max pooling."; const auto& srcshape = srclayers[0]->data(this).shape(); int dim = srcshape.size(); @@ -83,9 +83,9 @@ void PoolingLayer::Setup(const LayerProto& conf, void PoolingLayer::ComputeFeature(int flag, const vector& srclayers) { auto src = Tensor4(srclayers[0]->mutable_data(this)); auto data = Tensor4(&data_); - if (pool_ == PoolingProto_PoolMethod_MAX) + if (pool_ == MAX) data = expr::pool(src, kernel_x_, stride_x_); - else if (pool_ == PoolingProto_PoolMethod_AVG) + else if (pool_ == AVG) data = expr::pool(src, kernel_x_, stride_x_) * (1.0f / (kernel_x_ * kernel_x_)); } @@ -99,9 +99,9 @@ void PoolingLayer::ComputeGradient(int flag, const vector& srclayers) { auto gsrc = Tensor4(srclayers[0]->mutable_grad(this)); auto data = Tensor4(&data_); auto grad = Tensor4(&grad_); - if (pool_ == PoolingProto_PoolMethod_MAX) + if (pool_ == MAX) gsrc = expr::unpool(src, data, grad, kernel_x_, stride_x_); - else if (pool_ == PoolingProto_PoolMethod_AVG) + else if (pool_ == AVG) gsrc = expr::unpool(src, data, grad, kernel_x_, stride_x_) * (1.0f / (kernel_x_ * kernel_x_)); } @@ -111,16 +111,16 @@ void PoolingLayer::ComputeGradient(int flag, const vector& srclayers) { void CPoolingLayer::Setup(const LayerProto& conf, const vector& srclayers) { PoolingLayer::Setup(conf, srclayers); - if (pool_ == PoolingProto_PoolMethod_MAX) + if (pool_ == MAX) mask_.ReshapeLike(data_); } void CPoolingLayer::ComputeFeature(int flag, const vector& srclayers) { - if (pool_ == PoolingProto_PoolMethod_MAX) + if (pool_ == MAX) ForwardMaxPooling(srclayers[0]->mutable_data(this)->mutable_cpu_data(), batchsize_, channels_, height_, width_, kernel_y_, kernel_x_, pad_y_, pad_y_, stride_y_, stride_x_, data_.mutable_cpu_data(), mask_.mutable_cpu_data()); - else if (pool_ == PoolingProto_PoolMethod_AVG) + else if (pool_ == AVG) ForwardAvgPooling(srclayers[0]->mutable_data(this)->mutable_cpu_data(), batchsize_, channels_, height_, width_, kernel_y_, kernel_x_, pad_y_, pad_x_, stride_y_, stride_y_, data_.mutable_cpu_data()); @@ -129,12 +129,12 @@ void CPoolingLayer::ComputeFeature(int flag, const vector& srclayers) { } void CPoolingLayer::ComputeGradient(int flag, const vector& srclayers) { - if (pool_ == PoolingProto_PoolMethod_MAX) + if (pool_ == MAX) BackwardMaxPooling(grad_.cpu_data(), mask_.cpu_data(), batchsize_, channels_, height_, width_, kernel_y_, kernel_x_, pad_y_, pad_x_, stride_y_, stride_y_, srclayers[0]->mutable_grad(this)->mutable_cpu_data()); - else if (pool_ == PoolingProto_PoolMethod_AVG) + else if (pool_ == AVG) BackwardAvgPooling(grad_.cpu_data(), batchsize_, channels_, height_, width_, kernel_y_, kernel_x_, pad_y_, pad_x_, stride_y_, stride_x_, diff --git a/src/proto/job.proto b/src/proto/job.proto index da52ea99ce..00a18de806 100644 --- a/src/proto/job.proto +++ b/src/proto/job.proto @@ -518,10 +518,6 @@ message LRNProto { message PoolingProto { // The kernel size (square) optional int32 kernel= 1 [default = 3]; - enum PoolMethod { - MAX = 0; - AVG = 1; - } // The pooling method optional PoolMethod pool = 30 [default = MAX]; // The padding size @@ -788,3 +784,9 @@ enum UnrollConnType { // customized connection type defined by src_conn kUnrollCustomized = 4; } + +enum PoolMethod { + MAX = 0; + AVG = 1; +} + diff --git a/thirdparty/install.sh b/thirdparty/install.sh index 99403b9cae..c75e467cbb 100755 --- a/thirdparty/install.sh +++ b/thirdparty/install.sh @@ -245,13 +245,13 @@ function install_opencv() function install_protobuf() { - if [ ! -e "protobuf-2.6.0.tar.gz" ] + if [ ! -e "protobuf-2.5.0.tar.gz" ] then - wget http://www.comp.nus.edu.sg/~dbsystem/singa/assets/file/thirdparty/protobuf-2.6.0.tar.gz; + wget http://www.comp.nus.edu.sg/~dbsystem/singa/assets/file/thirdparty/protobuf-2.5.0.tar.gz; fi - rm -rf protobuf-2.6.0; - tar zxvf protobuf-2.6.0.tar.gz && cd protobuf-2.6.0; + rm -rf protobuf-2.5.0; + tar zxvf protobuf-2.5.0.tar.gz && cd protobuf-2.5.0; if [ $# == 1 ] then diff --git a/tool/mesos/Makefile b/tool/mesos/Makefile index d64fb5b2bc..f8abd697f6 100644 --- a/tool/mesos/Makefile +++ b/tool/mesos/Makefile @@ -1,5 +1,5 @@ -CXX_FLAGS=-I ../include -std=c++11 -I /usr/local/include/hdfs -I ../../include -LD_FLAGS=-lmesos -lsinga -lhdfs3 +CXX_FLAGS=-I/home/aaron/.local/include -std=c++11 -I /home/aaron/Softs/hadoop-2.7.2/include -I /home/aaron/Softs/mesos-0.26.0/include -I /home/aaron/Softs/mesos-0.26.0/build/include -I ../../include +LD_FLAGS=-L/home/aaron/.local/lib -L /home/aaron/Projects/incubator-singa/.libs -L/home/aaron/Softs/mesos-0.26.0/build/lib -L/home/aaron/Softs/hadoop-2.7.2/lib/native $(JAVA_HOME)/jre/lib/amd64/server/libjvm.so -lmesos -lsinga -lhdfs -lprotobuf -lglog EXE=scheduler OBJS=singa_scheduler.o scheduler.pb.o PROTOS=scheduler.proto @@ -11,7 +11,7 @@ CXX=g++ all: $(PROTO_HDRS) $(EXE) $(PROTO_SRCS) $(PROTO_HDRS): $(PROTOS) - protoc --cpp_out=. $(PROTOS) + /home/aaron/.local/bin/protoc --cpp_out=. $(PROTOS) $(EXE): $(OBJS) $(CXX) -o $@ $(OBJS) $(LD_FLAGS) diff --git a/tool/mesos/scheduler.conf b/tool/mesos/scheduler.conf index 1ab5fbac4b..aa6096b568 100644 --- a/tool/mesos/scheduler.conf +++ b/tool/mesos/scheduler.conf @@ -1,3 +1,3 @@ -namenode: "node0:9000" -master: "node0:5050" -job_counter: 5 +namenode: "localhost:9000" +master: "localhost:5050" +job_counter: 41 diff --git a/tool/mesos/singa_scheduler.cc b/tool/mesos/singa_scheduler.cc index 408b6096c9..f6ef97e451 100644 --- a/tool/mesos/singa_scheduler.cc +++ b/tool/mesos/singa_scheduler.cc @@ -93,7 +93,7 @@ class SingaScheduler: public mesos::Scheduler { if (hdfsExists(hdfs_handle_, SINGA_CONFIG) != 0) LOG(ERROR) << SINGA_CONFIG << " is not found on HDFS. Please use -singa_conf flag to upload the file"; } else { - LOG(ERROR) << "Failed to connect to HDFS"; + LOG(ERROR) << "Failed to connect to HDFS"<< namenode; } ReadProtoFromTextFile(job_conf_file_.c_str(), &job_conf_); } @@ -110,7 +110,7 @@ class SingaScheduler: public mesos::Scheduler { : job_conf_file_(job_conf_file), nhosts_(0), namenode_(namenode), is_running_(false), job_counter_(jc), task_counter_(0) { hdfs_handle_ = hdfs_connect(namenode); if (!hdfs_handle_ || !hdfs_overwrite(hdfs_handle_, SINGA_CONFIG, singa_conf)) - LOG(ERROR) << "Failed to connect to HDFS"; + LOG(ERROR) << "Failed to connect to HDFS"<< namenode; ReadProtoFromTextFile(job_conf_file_.c_str(), &job_conf_); } @@ -192,6 +192,7 @@ class SingaScheduler: public mesos::Scheduler { // write job_conf_file_ to /singa/job_id/job.conf char path[512]; snprintf(path, 512, "/singa/%d/job.conf", job_counter_); + LOG(INFO) << path < Date: Wed, 23 Mar 2016 20:41:21 +0800 Subject: [PATCH 05/26] fix message.py bug. compatable with protobuf 2.5 --- tool/python/singa/utils/message.py | 41 ++++++++++-------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/tool/python/singa/utils/message.py b/tool/python/singa/utils/message.py index be89e3012b..b417f8a095 100644 --- a/tool/python/singa/utils/message.py +++ b/tool/python/singa/utils/message.py @@ -23,7 +23,8 @@ import sys, os from utility import * -from google.protobuf import descriptor +from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper + sys.path.append(os.path.join(os.path.dirname(__file__), '../../pb2')) ''' @@ -61,26 +62,15 @@ def __init__(self, protoname, **kwargs): enumDict_ = dict() -#protobuf 2.5.0 get enum names -def get_pb2_enum_list(module_obj): - enum_list=[] - for v in module_obj.__dict__.values(): - if isinstance(v,descriptor.EnumDescriptor): - enum_list.append(v.name) - return enum_list - - #get all enum type list in the modules for module_obj in MODULE_LIST: - if module_obj.DESCRIPTOR.enum_types_by_name: - for enumtype in module_obj.DESCRIPTOR.enum_types_by_name: - tempDict = enumDict_[enumtype] = dict() - for name in getattr(module_obj, enumtype).DESCRIPTOR.values_by_name: - tempDict[name[1:].lower()] = getattr(module_obj, name) - else: - for enumtype in get_pb2_enum_list(module_obj): - tempDict = enumDict_[enumtype] = dict() - for name in getattr(module_obj, enumtype).DESCRIPTOR.values_by_name: + #find all enumtype + for attrs in module_obj.__dict__.items(): + if isinstance(attrs[1],EnumTypeWrapper): + enumTypeName=attrs[0] + enumType=attrs[1] + tempDict = enumDict_[enumTypeName] = dict() + for name in enumType.DESCRIPTOR.values_by_name: tempDict[name[1:].lower()] = getattr(module_obj, name) def make_function(enumtype): @@ -92,12 +82,7 @@ def _function(key): #def all the enumtypes for module_obj in MODULE_LIST: - #protobuf 2.6.0 - if module_obj.DESCRIPTOR.enum_types_by_name: - for enumtype in module_obj.DESCRIPTOR.enum_types_by_name: - setattr(current_module, "enum"+enumtype, make_function(enumtype)) - #protobuf 2.5.0 - else: - for enumtype in get_pb2_enum_list(module_obj): - setattr(current_module, "enum"+enumtype, make_function(enumtype)) - + for attrs in module_obj.__dict__.items(): + if isinstance(attrs[1],EnumTypeWrapper): + enumTypeName=attrs[0] + setattr(current_module, "enum"+enumTypeName, make_function(enumTypeName)) From c4138182f4f8e48955ce773d7a3415b0b4521b46 Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Thu, 24 Mar 2016 11:22:20 +0800 Subject: [PATCH 06/26] install protobuf python --- thirdparty/install.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/thirdparty/install.sh b/thirdparty/install.sh index c75e467cbb..1def4de00b 100755 --- a/thirdparty/install.sh +++ b/thirdparty/install.sh @@ -258,19 +258,19 @@ function install_protobuf() echo "install protobuf in $1"; ./configure --prefix=$1; make && make install; - #cd python; - #python setup.py build; - #python setup.py install --prefix=$1; - #cd ..; + cd python; + python setup.py build; + python setup.py install --prefix=$1; + cd ..; elif [ $# == 0 ] then echo "install protobuf in default path"; ./configure; make && sudo make install; - #cd python; - #python setup.py build; - #sudo python setup.py install; - #cd ..; + cd python; + python setup.py build; + sudo python setup.py install; + cd ..; else echo "wrong commands"; fi From fb2c652cf3263f30537a85be7223751c805a65ae Mon Sep 17 00:00:00 2001 From: ijingo Date: Thu, 24 Mar 2016 14:47:13 +0800 Subject: [PATCH 07/26] entry.sh --- examples/cifar10_mesos/entry.sh | 6 ++++++ examples/cifar10_mesos/main.py | 14 +++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 examples/cifar10_mesos/entry.sh diff --git a/examples/cifar10_mesos/entry.sh b/examples/cifar10_mesos/entry.sh new file mode 100644 index 0000000000..d46c75c606 --- /dev/null +++ b/examples/cifar10_mesos/entry.sh @@ -0,0 +1,6 @@ +#!/bin/bash +cd /workspace +wget $1 +tar zxf *.tar.gz +cd /usr/src/incubator-singa/examples/cifar10_mesos/ +python main.py diff --git a/examples/cifar10_mesos/main.py b/examples/cifar10_mesos/main.py index 9292550530..4b9326aefd 100755 --- a/examples/cifar10_mesos/main.py +++ b/examples/cifar10_mesos/main.py @@ -36,9 +36,13 @@ singa_root_=os.path.abspath(os.path.join(current_path_,'../..')) #data prepare settings -input_folder_=os.path.abspath(os.path.join(current_path_,"data/raw")) -output_folder_=os.path.abspath(os.path.join(current_path_,"data/out")) -temp_folder_=os.path.abspath(os.path.join(current_path_,"data/temp")) +#input_folder_=os.path.abspath(os.path.join(current_path_,"data/raw")) +#output_folder_=os.path.abspath(os.path.join(current_path_,"data/out")) +#temp_folder_=os.path.abspath(os.path.join(current_path_,"data/temp")) + +input_folder_ = "/workspace/raw" +output_folder_ = "/workspace/out" +temp_folder_ = "/workspace/temp" meta_file_name_="meta.txt" train_bin_file_name_="train.bin" @@ -70,7 +74,7 @@ #training settings model_name_="cifar10-cnn" -workspace_="/home/aaron/Projects/incubator-singa/examples/cifar10_mesos" +workspace_="/workspace" batch_size_=64 check_point_path_=workspace_+"/checkpoint/step1000-worker0" @@ -258,6 +262,6 @@ def product(model): if __name__=='__main__': sys.argv.append("-singa_conf") - sys.argv.append("/home/aaron/Projects/incubator-singa/conf/singa.conf") + sys.argv.append("/usr/src/incubator-singa/conf/singa.conf") model=buildModel(sys.argv) product(model) From 90ba67c451b5821551aa44a4ce231d07295398d5 Mon Sep 17 00:00:00 2001 From: ijingo Date: Fri, 25 Mar 2016 14:58:02 +0800 Subject: [PATCH 08/26] change Flask port to 80 --- examples/cifar10_mesos/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/cifar10_mesos/main.py b/examples/cifar10_mesos/main.py index 4b9326aefd..b9665b983a 100755 --- a/examples/cifar10_mesos/main.py +++ b/examples/cifar10_mesos/main.py @@ -260,6 +260,8 @@ def product(model): if __name__=='__main__': + + app.run(host='0.0.0.0', port=80) sys.argv.append("-singa_conf") sys.argv.append("/usr/src/incubator-singa/conf/singa.conf") From f0a790bfd7df3a8c97937b2cfa1fce7ab8c1ba0c Mon Sep 17 00:00:00 2001 From: chonho Date: Tue, 22 Mar 2016 16:15:08 +0800 Subject: [PATCH 09/26] SINGA-126 Python Binding for Interactive Training - Revise methods in layer.py . GetParams . SetParams - Add cifar10_mean_image - Add examples train_mnist_2.py and train_cifar10_2.py . these examples have a list of hidden layers --- Makefile.am | 1 - include/singa/neuralnet/input_layer.h | 21 --- include/singa/neuralnet/layer.h | 2 +- include/singa/neuralnet/neuralnet.h | 2 +- include/singa/neuralnet/neuron_layer.h | 9 ++ include/singa/utils/param.h | 2 +- include/singa/utils/updater.h | 1 - src/driver.cc | 1 - src/neuralnet/input_layer/dummy.cc | 77 ----------- src/neuralnet/neuralnet.cc | 2 +- src/neuralnet/neuron_layer/dummy.cc | 52 ++++++++ src/neuralnet/neuron_layer/inner_product.cc | 2 - src/utils/param.cc | 6 + src/utils/updater.cc | 8 -- .../examples/datasets/cifar10_mean_image | Bin 0 -> 24576 bytes tool/python/examples/train_cifar10.py | 5 +- tool/python/examples/train_cifar10_2.py | 123 ++++++++++++++++++ tool/python/examples/train_mnist.py | 8 +- tool/python/examples/train_mnist_2.py | 107 +++++++++++++++ tool/python/singa/driver.i | 19 +-- tool/python/singa/layer.py | 104 ++++++++++----- tool/python/singa/model.py | 13 ++ 22 files changed, 406 insertions(+), 159 deletions(-) delete mode 100644 src/neuralnet/input_layer/dummy.cc create mode 100644 tool/python/examples/datasets/cifar10_mean_image create mode 100755 tool/python/examples/train_cifar10_2.py create mode 100755 tool/python/examples/train_mnist_2.py diff --git a/Makefile.am b/Makefile.am index 88118f3eec..55c45e1424 100644 --- a/Makefile.am +++ b/Makefile.am @@ -64,7 +64,6 @@ SINGA_SRCS := src/driver.cc \ src/neuralnet/input_layer/record.cc \ src/neuralnet/input_layer/deprecated.cc \ src/neuralnet/input_layer/store.cc \ - src/neuralnet/input_layer/dummy.cc \ src/neuralnet/input_layer/rnn_label.cc \ src/neuralnet/output_layer/accuracy.cc \ src/neuralnet/output_layer/argsort.cc \ diff --git a/include/singa/neuralnet/input_layer.h b/include/singa/neuralnet/input_layer.h index c7e0df5518..73d509bc75 100644 --- a/include/singa/neuralnet/input_layer.h +++ b/include/singa/neuralnet/input_layer.h @@ -201,27 +201,6 @@ class RNNLabelLayer : public InputLayer { void ComputeFeature(int flag, const vector& srclayers); }; -/** - * Dummy class for loading data from anywhere. - */ -class DummyInputLayer : virtual public InputLayer { - public: - DummyInputLayer(); - void Setup(const LayerProto& proto, const vector& srclayers); - void ComputeFeature(int flag, const vector& srclayers) override {}; - - /** - * Feed data to Layer - */ - void Feed(int batchsize, vector shape, vector* data, int op); - - Layer* ToLayer(){ - return this; - } - protected: - int batchsize_ = 1; -}; - /****************Deprecated layers******************/ /** diff --git a/include/singa/neuralnet/layer.h b/include/singa/neuralnet/layer.h index a24ba5656e..ce47b47c5a 100644 --- a/include/singa/neuralnet/layer.h +++ b/include/singa/neuralnet/layer.h @@ -77,7 +77,6 @@ class Layer { */ static Layer* CreateLayer(const string str); static void SetupLayer(Layer* layer, const string str, const vector& srclayers); - virtual void Feed(int batchsize, vector shape, vector* data, int op) {} /** * Setup layer properties. @@ -120,6 +119,7 @@ class Layer { virtual const std::vector GetParams() const { return std::vector {}; } + virtual void SetParams(std::vector) {} /** * Return the connection type between one neuron of this layer and its source * layer. diff --git a/include/singa/neuralnet/neuralnet.h b/include/singa/neuralnet/neuralnet.h index 80c4a09517..771a7ee9e9 100644 --- a/include/singa/neuralnet/neuralnet.h +++ b/include/singa/neuralnet/neuralnet.h @@ -62,7 +62,7 @@ class NeuralNet { * Create for python binding, production test mode * */ - static NeuralNet* CreateForTest(const string str); + static NeuralNet* CreateFromStr(const string str); NeuralNet() {}; static const NetProto Unrolling(const NetProto& net_conf); diff --git a/include/singa/neuralnet/neuron_layer.h b/include/singa/neuralnet/neuron_layer.h index f03e91bdb6..161b68c589 100644 --- a/include/singa/neuralnet/neuron_layer.h +++ b/include/singa/neuralnet/neuron_layer.h @@ -122,13 +122,17 @@ class DropoutLayer : public NeuronLayer { */ class DummyLayer: public NeuronLayer { public: + void Setup(const std::string str, const vector& srclayers); void Setup(const LayerProto& proto, const vector& srclayers) override; void ComputeFeature(int flag, const vector& srclayers) override; void ComputeGradient(int flag, const vector& srclayers) override; + void Feed(vector shape, vector* data, int op); + Layer* ToLayer() { return this;} private: bool input_ = false; // use as input layer bool output_ = false; // use as output layer + int batchsize_ = 1; // use for input layer }; /** @@ -224,6 +228,11 @@ class InnerProductLayer : public NeuronLayer { return params; } + void SetParams(std::vector params) { + weight_ = params.at(0); + bias_ = params.at(1); + } + private: int batchsize_; int vdim_, hdim_; diff --git a/include/singa/utils/param.h b/include/singa/utils/param.h index 4d5683f7eb..319f2b4300 100644 --- a/include/singa/utils/param.h +++ b/include/singa/utils/param.h @@ -155,6 +155,7 @@ class Param { * Init param values from checkpoint blob. */ void FromProto(const BlobProto& blob); + void FromProto(const std::string str); /** * Dump param values to blob. */ @@ -212,7 +213,6 @@ class Param { * @return num of parameters in this Param obj. */ inline const std::vector& shape() const { return data_.shape(); } - //inline const std::vector& shape() const { return std::vector data_.shape()[0], data_.shape()[1]}; } inline int size() const { return data_.count(); } inline const Blob& data() const { return data_; } inline Blob* mutable_data() { return &data_; } diff --git a/include/singa/utils/updater.h b/include/singa/utils/updater.h index b34d404575..33ad8a7ec2 100644 --- a/include/singa/utils/updater.h +++ b/include/singa/utils/updater.h @@ -93,7 +93,6 @@ class Updater { /* added for python binding */ static Updater* CreateUpdater(const string str); - static void UpdateParams(Updater* updater, Layer* layer, int step); /* ------------------------ */ static Updater* Create(const UpdaterProto& proto); diff --git a/src/driver.cc b/src/driver.cc index d58e4d6948..1c8f36665b 100644 --- a/src/driver.cc +++ b/src/driver.cc @@ -75,7 +75,6 @@ void Driver::Init(int argc, char **argv) { RegisterLayer(kRNNLabel); RegisterLayer(kOneHot); RegisterLayer(kCharRNNOutput); - RegisterLayer(kDummyInput); // connection layers RegisterLayer(kBridgeDst); diff --git a/src/neuralnet/input_layer/dummy.cc b/src/neuralnet/input_layer/dummy.cc deleted file mode 100644 index 8c342c11f6..0000000000 --- a/src/neuralnet/input_layer/dummy.cc +++ /dev/null @@ -1,77 +0,0 @@ -/************************************************************ -* -* Licensed to the Apache Software Foundation (ASF) under one -* or more contributor license agreements. See the NOTICE file -* distributed with this work for additional information -* regarding copyright ownership. The ASF licenses this file -* to you under the Apache License, Version 2.0 (the -* "License"); you may not use this file except in compliance -* with the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, -* software distributed under the License is distributed on an -* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -* KIND, either express or implied. See the License for the -* specific language governing permissions and limitations -* under the License. -* -*************************************************************/ - -#include "singa/neuralnet/input_layer.h" - -namespace singa { -using std::vector; - -DummyInputLayer::DummyInputLayer(){ - -} - -void DummyInputLayer::Setup(const LayerProto& conf, const vector& srclayers) { - Layer::Setup(conf, srclayers); -} - -void DummyInputLayer::Feed(int batchsize, vector shape, vector* data, int op){ - - batchsize_ = batchsize; - // dataset - if (op == 0) { - size_t hdim = 1; - for (size_t i = 0; i < shape.size(); ++i) - hdim *= shape[i]; - //data_.Reshape({batchsize, (int)hdim}); - shape.insert(shape.begin(),batchsize); - data_.Reshape(shape); - int size = data->size(); - float* ptr = data_.mutable_cpu_data(); - for (int i = 0; i< size; i++) { - ptr[i] = data->at(i); - } - } - // label - else { - aux_data_.resize(batchsize); - for (int i = 0; i< batchsize; i++) { - aux_data_[i] = static_cast(data->at(i)); - } - } - - return; - - /* Wenfeng's input - batchsize_ = batchsize; - shape.insert(shape.begin(),batchsize); - data_.Reshape(shape); - - int size = data_.count() / batchsize_; - CHECK_EQ(size, data->size()); - float* ptr = data_.mutable_cpu_data(); - for (int i = 0; i< size; i++) - ptr[i] = data->at(i); - - return; - */ -} - -} // namespace singa diff --git a/src/neuralnet/neuralnet.cc b/src/neuralnet/neuralnet.cc index 5ee81c1b8f..44d642a375 100644 --- a/src/neuralnet/neuralnet.cc +++ b/src/neuralnet/neuralnet.cc @@ -58,7 +58,7 @@ const NetProto NetConfPreprocess(const NetProto& conf) { return proto; } -NeuralNet* NeuralNet::CreateForTest(const string str) { +NeuralNet* NeuralNet::CreateFromStr(const string str) { NetProto net_conf; net_conf.ParseFromString(str); return NeuralNet::Create(net_conf,singa::kTest,1); diff --git a/src/neuralnet/neuron_layer/dummy.cc b/src/neuralnet/neuron_layer/dummy.cc index 936bb5ed83..db595658ca 100644 --- a/src/neuralnet/neuron_layer/dummy.cc +++ b/src/neuralnet/neuron_layer/dummy.cc @@ -27,6 +27,13 @@ namespace singa { +void DummyLayer::Setup(const std::string str, + const vector& srclayers) { + LayerProto conf; + conf.ParseFromString(str); + DummyLayer::Setup(conf, srclayers); +} + void DummyLayer::Setup(const LayerProto& proto, const vector& srclayers) { NeuronLayer::Setup(proto, srclayers); @@ -71,4 +78,49 @@ void DummyLayer::ComputeGradient(int flag, const vector& srclayers) { Copy(grad_, srclayers[0]->mutable_grad(this)); } +void DummyLayer::Feed(vector shape, vector* data, int op){ + + //batchsize_ = batchsize; + batchsize_ = shape[0]; + // dataset + if (op == 0) { + /* + size_t hdim = 1; + for (size_t i = 1; i < shape.size(); ++i) + hdim *= shape[i]; + //data_.Reshape({batchsize, (int)hdim}); + //shape.insert(shape.begin(),batchsize); + data_.Reshape(shape); + */ + int size = data->size(); + float* ptr = data_.mutable_cpu_data(); + for (int i = 0; i< size; i++) { + ptr[i] = data->at(i); + } + } + // label + else { + aux_data_.resize(batchsize_); + for (int i = 0; i< batchsize_; i++) { + aux_data_[i] = static_cast(data->at(i)); + } + } + + return; + + /* Wenfeng's input + batchsize_ = batchsize; + shape.insert(shape.begin(),batchsize); + data_.Reshape(shape); + + int size = data_.count() / batchsize_; + CHECK_EQ(size, data->size()); + float* ptr = data_.mutable_cpu_data(); + for (int i = 0; i< size; i++) + ptr[i] = data->at(i); + + return; + */ +} + } // namespace singa diff --git a/src/neuralnet/neuron_layer/inner_product.cc b/src/neuralnet/neuron_layer/inner_product.cc index 96943eabd1..a7378a2a0b 100644 --- a/src/neuralnet/neuron_layer/inner_product.cc +++ b/src/neuralnet/neuron_layer/inner_product.cc @@ -57,8 +57,6 @@ void InnerProductLayer::Setup(const LayerProto& conf, void InnerProductLayer::ComputeFeature(int flag, const vector& srclayers) { - //auto w = weight_->mutable_cpu_data(); - //LOG(ERROR) << srclayers[0]->name() << " " << w[0]; if (transpose_) MMDot(srclayers[0]->data(this), weight_->data(), &data_); else diff --git a/src/utils/param.cc b/src/utils/param.cc index 158c77735d..5510f16312 100644 --- a/src/utils/param.cc +++ b/src/utils/param.cc @@ -199,6 +199,12 @@ void Param::ShareFrom(Param* other) { grad_.ShareData(&(other->grad_), false); } +void Param::FromProto(const string str) { + BlobProto blob; + blob.ParseFromString(str); + data_.FromProto(blob); +} + void Param::FromProto(const BlobProto& blob) { data_.FromProto(blob); } diff --git a/src/utils/updater.cc b/src/utils/updater.cc index 3ce120f2df..a2180d380b 100644 --- a/src/utils/updater.cc +++ b/src/utils/updater.cc @@ -102,14 +102,6 @@ Updater* Updater::CreateUpdater(const string str) { conf.ParseFromString(str); return Updater::Create(conf); } - -void Updater::UpdateParams(Updater* updater, Layer* layer, int step) { - float grad_scale = 1.0; - for (auto param : layer->GetParams()) { - updater->Update(step, param, grad_scale); - param->set_version(param->version() + 1); - } -} /***********************Python Binding end**************************/ diff --git a/tool/python/examples/datasets/cifar10_mean_image b/tool/python/examples/datasets/cifar10_mean_image new file mode 100644 index 0000000000000000000000000000000000000000..a4ea8a57a4aed210ff312d4f609a56d707453732 GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/tool/python/examples/train_cifar10.py b/tool/python/examples/train_cifar10.py index e1ad25d3c4..f04b4ac90b 100755 --- a/tool/python/examples/train_cifar10.py +++ b/tool/python/examples/train_cifar10.py @@ -38,6 +38,9 @@ Example of CNN with cifar10 dataset ''' +fname_mean_image = 'tool/python/examples/datasets/cifar10_mean_image' +mean_image = np.fromfile(fname_mean_image) + def load_dataset(did=1): ''' 5 binary dataset, each contains 10000 images @@ -53,7 +56,7 @@ def load_dataset(did=1): d = np.fromfile(fname_train_data, dtype=np.uint8) d = d.reshape(nb_samples, nb_pixels + 1) # +1 for label x = d[:, 1:] - x = x - x.mean(axis=0) + x = x - mean_image print ' data x:', x.shape y = d[:, 0] y = y.reshape(nb_samples, 1) diff --git a/tool/python/examples/train_cifar10_2.py b/tool/python/examples/train_cifar10_2.py new file mode 100755 index 0000000000..15cae0a1c3 --- /dev/null +++ b/tool/python/examples/train_cifar10_2.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys, string +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.driver import Driver +from singa.layer import * +from singa.model import * +from singa.utils.utility import swap32 +from google.protobuf.text_format import Merge + +''' +Example of CNN with cifar10 dataset +''' + +fname_mean_image = 'tool/python/examples/datasets/cifar10_mean_image' +mean_image = np.fromfile(fname_mean_image) + +def load_dataset(did=1): + ''' + 5 binary dataset, each contains 10000 images + 1 row (1 image) includes 1 label & 3072 pixels + 3072 pixels are 3 channels of a 32x32 image + ''' + print '[Loading CIFAR10 dataset]', did + dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" + fname_train_data = dataset_dir_ + "/data_batch_{}.bin".format(did) + + nb_samples = 10000 + nb_pixels = 3 * 1024 + d = np.fromfile(fname_train_data, dtype=np.uint8) + d = d.reshape(nb_samples, nb_pixels + 1) # +1 for label + x = d[:, 1:] + x = x - mean_image + print ' data x:', x.shape + y = d[:, 0] + y = y.reshape(nb_samples, 1) + print ' label y:', y.shape + return x, y + +def get_labellist(): + dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" + fname_label_list = dataset_dir_ + "/batches.meta.txt" + label_list_ = np.genfromtxt(fname_label_list, dtype=str) + return label_list_ + +#------------------------------------------------------------------- +print '[Layer registration/declaration]' +d = Driver() +d.Init(sys.argv) + +input = Dummy() +label = Dummy() + +nn = [] # neural net (hidden layers) +nn.append(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) +nn.append(MaxPooling2D(pool_size=(3,3), stride=2)) +nn.append(Activation('relu')) +nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) +nn.append(Convolution2D(32, 5, 1, 2, b_lr=2)) +nn.append(Activation('relu')) +nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) +nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) +nn.append(Convolution2D(64, 5, 1, 2)) +nn.append(Activation('relu')) +nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) +nn.append(Dense(10, w_wd=250, b_lr=2, b_wd=0)) + +loss = Loss('softmaxloss') +sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) + +#------------------------------------------------------------------- +print '[Start training]' +batchsize = 100 +disp_freq = 50 +train_step = 1000 + +for dataset_id in range(train_step / batchsize): + + x, y = load_dataset(dataset_id%5+1) + + for i in range(x.shape[0] / batchsize): + + xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] + input.SetData(xb, 3, 0) + label.SetData(yb, 1, 1) + + for h in range(len(nn)): + if h == 0: + nn[h].ComputeFeature(input) + else: + nn[h].ComputeFeature(nn[h-1]) + loss.ComputeFeature(nn[-1], label) + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), + loss.display() + + loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/train_mnist.py b/tool/python/examples/train_mnist.py index dc8949aea3..c1350e127a 100755 --- a/tool/python/examples/train_mnist.py +++ b/tool/python/examples/train_mnist.py @@ -68,7 +68,7 @@ def load_dataset(): input = Dummy() label = Dummy() ''' -(TODO) clee: need to think ... +(TODO) clee: need to think ... can we do this??? inner1 = Dense(2500, init='uniform', activation='stanh') inner2 = Dense(2000, init='uniform', activation='stanh') inner3 = Dense(1000, init='uniform', activation='stanh') @@ -97,8 +97,7 @@ def load_dataset(): batchsize = 64 disp_freq = 10 -#for i in range(x.shape[0] / batchsize): -for i in range(100): +for i in range(x.shape[0] / batchsize): xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] input.SetData(xb) label.SetData(yb, is_label=1) @@ -120,7 +119,4 @@ def load_dataset(): print ' Step {:>3}: '.format(i+1), loss.display() - loss.ComputeGradient(i+1, sgd) - - diff --git a/tool/python/examples/train_mnist_2.py b/tool/python/examples/train_mnist_2.py new file mode 100755 index 0000000000..3ed1563fce --- /dev/null +++ b/tool/python/examples/train_mnist_2.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys, string +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.driver import Driver +from singa.layer import * +from singa.model import * +from singa.utils.utility import swap32 +from google.protobuf.text_format import Merge + +''' +Example of MLP with MNIST dataset +''' + +def load_dataset(): + ''' + train-images: 4 int32 headers & int8 pixels + train-labels: 2 int32 headers & int8 labels + ''' + print '[Loading MNIST dataset]' + fname_train_data = "examples/mnist/train-images-idx3-ubyte" + fname_train_label = "examples/mnist/train-labels-idx1-ubyte" + info = swap32(np.fromfile(fname_train_data, dtype=np.uint32, count=4)) + nb_samples = info[1] + shape = (info[2],info[3]) + + x = np.fromfile(fname_train_data, dtype=np.uint8) + x = x[4*4:] # skip header + x = x.reshape(nb_samples, shape[0]*shape[1]) + print ' data x:', x.shape + y = np.fromfile(fname_train_label, dtype=np.uint8) + y = y[4*2:] # skip header + y = y.reshape(nb_samples, 1) + print ' label y:', y.shape + return x, y + +#------------------------------------------------------------------- +print '[Layer registration/declaration]' +d = Driver() +d.Init(sys.argv) + +input = Dummy() +label = Dummy() + +nn = [] # neural net (hidden layers) +nn.append(Dense(2500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(2000, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(1500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(1000, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(10, init='uniform')) +loss = Loss('softmaxloss') + +sgd = SGD(lr=0.001, lr_type='step') + +#------------------------------------------------------------------- +print '[Start training]' +batchsize = 64 +disp_freq = 10 + +x, y = load_dataset() + +for i in range(x.shape[0] / batchsize): + xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] + input.SetData(xb) + label.SetData(yb, is_label=1) + for h in range(len(nn)): + if h == 0: + nn[h].ComputeFeature(input) + else: + nn[h].ComputeFeature(nn[h-1]) + loss.ComputeFeature(nn[-1], label) + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1), + loss.display() + loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/singa/driver.i b/tool/python/singa/driver.i index 7f1ab50a44..5dc3fc9547 100644 --- a/tool/python/singa/driver.i +++ b/tool/python/singa/driver.i @@ -33,12 +33,13 @@ #include "singa/driver.h" #include "singa/neuralnet/neuralnet.h" #include "singa/neuralnet/layer.h" -#include "singa/neuralnet/input_layer.h" +#include "singa/neuralnet/neuron_layer.h" #include "singa/neuralnet/loss_layer.h" #include "singa/utils/blob.h" #include "singa/utils/param.h" #include "singa/utils/updater.h" #include "singa/proto/job.pb.h" +#include "singa/proto/common.pb.h" %} namespace std { @@ -58,19 +59,20 @@ namespace singa{ void Test(const std::string job_conf); }; - /* class NeuralNet{ public: - static NeuralNet* CreateForTest(const std::string str); + static NeuralNet* CreateFromStr(const std::string str); void Load(const std::vector& paths); inline const std::vector& layers(); inline const std::vector& srclayers(const singa::Layer* layer); }; - */ - class DummyInputLayer{ + class DummyLayer{ public: - void Feed(int batchsize, std::vector shape, std::vector* data, int op); + /* void Setup(const singa::LayerProto& proto, const std::vector& srclayers); + */ + void Setup(const std::string str, const std::vector& srclayers); + void Feed(std::vector shape, std::vector* data, int op); singa::Layer* ToLayer(); }; @@ -79,19 +81,19 @@ namespace singa{ public: static singa::Layer* CreateLayer(const std::string str); static void SetupLayer(singa::Layer* layer, const std::string str, const std::vector& srclayers); - virtual void Feed(int batchsize, std::vector shape, std::vector* data, int op); virtual void ComputeFeature(int flag, const std::vector& srclayers); virtual void ComputeGradient(int flag, const std::vector& srclayers); virtual const singa::Blob& data(const singa::Layer* from); virtual const std::vector GetParams(); virtual const std::string ToString(bool debug, int flag); + void SetParams(std::vector params); }; %nodefault Updater; class Updater{ public: static singa::Updater* CreateUpdater(const std::string str); - static void UpdateParams(singa::Updater* updater, singa::Layer* layer, int step); + virtual void Update(int step, singa::Param* param, float grad_scale); }; template @@ -108,6 +110,7 @@ namespace singa{ inline int size(); inline const std::vector& shape(); inline float* mutable_cpu_data(); + void FromProto(const std::string str); }; %template(floatBlob) Blob; diff --git a/tool/python/singa/layer.py b/tool/python/singa/layer.py index e377c0aa3e..6f5ef4f1b4 100644 --- a/tool/python/singa/layer.py +++ b/tool/python/singa/layer.py @@ -32,7 +32,9 @@ from singa.utils.message import * from google.protobuf import text_format -from singa.driver import Layer as SingaLayer, Updater as SingaUpdater, DummyInputLayer, intVector, floatVector, layerVector, paramVector, floatArray_frompointer +from singa.driver import Layer as SingaLayer, Updater as SingaUpdater,\ + intVector, floatVector, layerVector,\ + paramVector, floatArray_frompointer, DummyLayer class Layer(object): @@ -56,7 +58,12 @@ def __init__(self, **kwargs): self.srclayers = [] def ComputeFeature(self, *srclys): - #print ' >> CompFeature()', self.layer.name, '# of srcs:', len(srclys) + ''' The method creates and sets up singa::Layer + and maintains its source layers + then call ComputeFeature for data transformation. + + *srclys = (list) // a list of source layers + ''' # create singa::Layer and store srclayers if self.singalayer == None: @@ -65,15 +72,20 @@ def ComputeFeature(self, *srclys): for i in range(len(srclys)): self.srclayers.append(srclys[i]) self.singaSrclayerVector[i] = srclys[i].get_singalayer() - - #print ' >> Setup', self.layer.name + # set up the layer SingaLayer.SetupLayer(self.singalayer, self.layer.SerializeToString(), self.singaSrclayerVector) self.singalayer.ComputeFeature(1, self.singaSrclayerVector) def ComputeGradient(self, step, upd=None): - #print ' >> CompGradient()', self.layer.name, '# of srcs', len(self.srclayers) + ''' The method creates singa::Updater + and calls ComputeGradient for gradient computation + then updates the parameters. + + step = (int) // a training step + upd = (object) // Updater object + ''' # create singa::Updater assert upd != None, 'required Updater (see model.py)' @@ -82,27 +94,52 @@ def ComputeGradient(self, step, upd=None): # call ComputeGradient of Singa self.singalayer.ComputeGradient(1, self.singaSrclayerVector) - SingaUpdater.UpdateParams(Layer.singaupdater, self.singalayer, step) + + # update parameters + singaParams = self.singalayer.GetParams() + for p in singaParams: + Layer.singaupdater.Update(step, p, 1.0) # recursively call ComputeGradient of srclayers + #(TODO) what if there are multiple source layers??? for sly in self.srclayers: if sly.srclayers != None: sly.ComputeGradient(step, upd) def GetParams(self): - params = self.singalayer.GetParams() - assert len(params) == 2, 'weight and bias' - - weight_array = floatArray_frompointer(params[0].mutable_cpu_data()) - weight = [ weight_array[i] for i in range(params[0].size()) ] - weight = numpy.array(weight).reshape(params[0].shape()) - - bias_array = floatArray_frompointer(params[1].mutable_cpu_data()) - bias = [ bias_array[i] for i in range(params[1].size()) ] - bias = numpy.array(bias).reshape(1, params[1].shape()[0]) + ''' The method gets parameter values + singaParams[0] for weight + singaParams[1] for bias + ''' + singaParams = self.singalayer.GetParams() + assert len(singaParams) == 2, 'weight and bias' + # for weight + weight_array = floatArray_frompointer(singaParams[0].mutable_cpu_data()) + weight = [ weight_array[i] for i in range(singaParams[0].size()) ] + weight = numpy.array(weight).reshape(singaParams[0].shape()) + # for bias + bias_array = floatArray_frompointer(singaParams[1].mutable_cpu_data()) + bias = [ bias_array[i] for i in range(singaParams[1].size()) ] + bias = numpy.array(bias).reshape(singaParams[1].shape()[0], 1) return weight, bias + def SetParams(self, *params): + ''' The method sets parameter values + params[0] for weight + params[1] for bias + ''' + singaParams = self.singalayer.GetParams() + import pb2.common_pb2 as cm + for k in range(len(params)): + bp = cm.BlobProto() + bp.shape.append(int(params[k].shape[0])) + bp.shape.append(int(params[k].shape[1])) + for i in range(params[k].shape[0]): + for j in range(params[k].shape[1]): + bp.data.append(params[k][i,j]) + singaParams[k].FromProto(bp.SerializeToString()) + def GetData(self): blobptr = self.singalayer.data(self.singalayer) data_array = floatArray_frompointer(blobptr.mutable_cpu_data()) @@ -120,33 +157,42 @@ def get_singalayer(self): class Dummy(object): def __init__(self): + self.is_datalayer = True self.srclayers = None + self.singalayer = None - kwargs = {'name':'dummy', 'type':kDummyInput} + kwargs = {'name':'dummy', 'type':kDummy} self.layer = Message('Layer', **kwargs).proto - self.singalayer = SingaLayer.CreateLayer(self.layer.SerializeToString()) - SingaLayer.SetupLayer(self.singalayer, self.layer.SerializeToString(), layerVector(0)) def SetData(self, data, nb_channel=1, is_label=0): - #print ' >> SetData', data.shape + ''' Create and Setup singa::DummyLayer for input data + Insert data using Feed() + ''' + batchsize, hdim = data.shape datasize = batchsize * hdim + imgsize = int(numpy.sqrt(hdim/nb_channel)) + shapeVector = [batchsize, nb_channel, imgsize, imgsize] + + # create and setup the layer + if self.singalayer == None: + setval(self.layer.dummy_conf, input=True) + setval(self.layer.dummy_conf, shape=shapeVector) + self.singalayer = DummyLayer() + self.singalayer.Setup(self.layer.SerializeToString(), layerVector(0)) + + # feed input data data = data.astype(numpy.float) - dummyData = floatVector(datasize) + dataVector = floatVector(datasize) k = 0 for i in range(batchsize): for j in range(hdim): - dummyData[k] = data[i,j] + dataVector[k] = data[i,j] k += 1 - - shape = intVector(3) - shape[0] = nb_channel - shape[1] = int(numpy.sqrt(hdim/nb_channel)) - shape[2] = shape[1] - self.singalayer.Feed(batchsize, shape, dummyData, is_label) + self.singalayer.Feed(shapeVector, dataVector, is_label) def get_singalayer(self): - return self.singalayer + return self.singalayer.ToLayer() class Data(Layer): diff --git a/tool/python/singa/model.py b/tool/python/singa/model.py index 991b1ab40f..0054bb35c9 100644 --- a/tool/python/singa/model.py +++ b/tool/python/singa/model.py @@ -344,6 +344,19 @@ def set_cudnn_layer_type(self, net): #net.layer[i].activation_conf.type = STANH net.layer[i].type = cudnn_ly_type + def show(self): + for ly in self.jobconf.neuralnet.layer: + print layer(ly.name) + + def layer_by_id(self, k): + return self.jobconf.neuralnet.layer[k] + + def layer_by_name(self, name): + return self.layers[k] + + def size(self): + return len(self.jobconf.neuralnet.layer) + class Energy(Model): ''' energy model ''' From ed07c08039b980b4b4bf3d28151e97a804920097 Mon Sep 17 00:00:00 2001 From: ijingo Date: Mon, 28 Mar 2016 13:51:29 +0800 Subject: [PATCH 10/26] message.py --- thirdparty/install.sh | 24 ++++++++++++------------ tool/python/singa/utils/message.py | 21 +++++++++++++++------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/thirdparty/install.sh b/thirdparty/install.sh index 99403b9cae..1def4de00b 100755 --- a/thirdparty/install.sh +++ b/thirdparty/install.sh @@ -245,32 +245,32 @@ function install_opencv() function install_protobuf() { - if [ ! -e "protobuf-2.6.0.tar.gz" ] + if [ ! -e "protobuf-2.5.0.tar.gz" ] then - wget http://www.comp.nus.edu.sg/~dbsystem/singa/assets/file/thirdparty/protobuf-2.6.0.tar.gz; + wget http://www.comp.nus.edu.sg/~dbsystem/singa/assets/file/thirdparty/protobuf-2.5.0.tar.gz; fi - rm -rf protobuf-2.6.0; - tar zxvf protobuf-2.6.0.tar.gz && cd protobuf-2.6.0; + rm -rf protobuf-2.5.0; + tar zxvf protobuf-2.5.0.tar.gz && cd protobuf-2.5.0; if [ $# == 1 ] then echo "install protobuf in $1"; ./configure --prefix=$1; make && make install; - #cd python; - #python setup.py build; - #python setup.py install --prefix=$1; - #cd ..; + cd python; + python setup.py build; + python setup.py install --prefix=$1; + cd ..; elif [ $# == 0 ] then echo "install protobuf in default path"; ./configure; make && sudo make install; - #cd python; - #python setup.py build; - #sudo python setup.py install; - #cd ..; + cd python; + python setup.py build; + sudo python setup.py install; + cd ..; else echo "wrong commands"; fi diff --git a/tool/python/singa/utils/message.py b/tool/python/singa/utils/message.py index bfa9ef2bbf..6c7d2637c4 100644 --- a/tool/python/singa/utils/message.py +++ b/tool/python/singa/utils/message.py @@ -23,6 +23,8 @@ import sys, os from utility import * +from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper + sys.path.append(os.path.join(os.path.dirname(__file__), '../../pb2')) ''' @@ -62,10 +64,14 @@ def __init__(self, protoname, **kwargs): #get all enum type list in the modules for module_obj in MODULE_LIST: - for enumtype in module_obj.DESCRIPTOR.enum_types_by_name: - tempDict = enumDict_[enumtype] = dict() - for name in getattr(module_obj, enumtype).DESCRIPTOR.values_by_name: - tempDict[name[1:].lower()] = getattr(module_obj, name) + #find all enumtype + for attrs in module_obj.__dict__.items(): + if isinstance(attrs[1],EnumTypeWrapper): + enumTypeName=attrs[0] + enumType=attrs[1] + tempDict = enumDict_[enumTypeName] = dict() + for name in enumType.DESCRIPTOR.values_by_name: + tempDict[name[1:].lower()] = getattr(module_obj, name) def make_function(enumtype): def _function(key): @@ -76,5 +82,8 @@ def _function(key): #def all the enumtypes for module_obj in MODULE_LIST: - for enumtype in module_obj.DESCRIPTOR.enum_types_by_name: - setattr(current_module, "enum"+enumtype, make_function(enumtype)) + for attrs in module_obj.__dict__.items(): + if isinstance(attrs[1],EnumTypeWrapper): + enumTypeName=attrs[0] + setattr(current_module, "enum"+enumTypeName, make_function(enumTypeName)) + From 813512d93f215970821a22c52e96a249c4ca1a74 Mon Sep 17 00:00:00 2001 From: ijingo Date: Mon, 28 Mar 2016 14:15:27 +0800 Subject: [PATCH 11/26] ready for push --- Makefile.am | 1 - include/singa/neuralnet/neuralnet.h | 1 - src/neuralnet/input_layer/dummy.cc | 45 ----------------------------- 3 files changed, 47 deletions(-) delete mode 100644 src/neuralnet/input_layer/dummy.cc diff --git a/Makefile.am b/Makefile.am index 0256930742..cd70f4bcda 100644 --- a/Makefile.am +++ b/Makefile.am @@ -63,7 +63,6 @@ SINGA_SRCS := src/driver.cc \ src/neuralnet/input_layer/record.cc \ src/neuralnet/input_layer/deprecated.cc \ src/neuralnet/input_layer/store.cc \ - src/neuralnet/input_layer/dummy.cc \ src/neuralnet/input_layer/rnn_label.cc \ src/neuralnet/output_layer/accuracy.cc \ src/neuralnet/output_layer/argsort.cc \ diff --git a/include/singa/neuralnet/neuralnet.h b/include/singa/neuralnet/neuralnet.h index ff8e1126c8..711c207d98 100644 --- a/include/singa/neuralnet/neuralnet.h +++ b/include/singa/neuralnet/neuralnet.h @@ -74,7 +74,6 @@ class NeuralNet { NeuralNet(NetProto net_conf, int num_partitions); ~NeuralNet(); - NeuralNet(){} /** * Load net params from checkpoint fiels. * @param path checkpoint files diff --git a/src/neuralnet/input_layer/dummy.cc b/src/neuralnet/input_layer/dummy.cc deleted file mode 100644 index e64a295859..0000000000 --- a/src/neuralnet/input_layer/dummy.cc +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************************ -* -* Licensed to the Apache Software Foundation (ASF) under one -* or more contributor license agreements. See the NOTICE file -* distributed with this work for additional information -* regarding copyright ownership. The ASF licenses this file -* to you under the Apache License, Version 2.0 (the -* "License"); you may not use this file except in compliance -* with the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, -* software distributed under the License is distributed on an -* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -* KIND, either express or implied. See the License for the -* specific language governing permissions and limitations -* under the License. -* -*************************************************************/ - -#include "singa/neuralnet/input_layer.h" -namespace singa { - -using std::vector; - -DummyInputLayer::DummyInputLayer(){ - -} -void DummyInputLayer::Feed(int batchsize, vector shape, vector* data){ - - batchsize_ = batchsize; - shape.insert(shape.begin(),batchsize); - data_.Reshape(shape); - - int size = data_.count() / batchsize_; - CHECK_EQ(size, data->size()); - float* ptr = data_.mutable_cpu_data(); - for (int i = 0; i< size; i++) - ptr[i] = data->at(i); - - return; -} - -} // namespace singa From 2fad68a1e742d8f9b3dab18894b36879a7d38eeb Mon Sep 17 00:00:00 2001 From: ijingo Date: Mon, 28 Mar 2016 14:35:44 +0800 Subject: [PATCH 12/26] push for mesos_slave by adding two mode in entry.sh --- examples/cifar10_mesos/entry.sh | 7 ++++++- examples/cifar10_mesos/main.py | 4 +--- tool/python/examples/train_cifar10.py | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/cifar10_mesos/entry.sh b/examples/cifar10_mesos/entry.sh index d46c75c606..170e997123 100644 --- a/examples/cifar10_mesos/entry.sh +++ b/examples/cifar10_mesos/entry.sh @@ -3,4 +3,9 @@ cd /workspace wget $1 tar zxf *.tar.gz cd /usr/src/incubator-singa/examples/cifar10_mesos/ -python main.py +if [$2 -eq '2' ]; then + python main.py +else + cd /usr/src/incubator-singa/ + python tool/python/examples/train_cifar10.py +fi diff --git a/examples/cifar10_mesos/main.py b/examples/cifar10_mesos/main.py index 7990125aa9..cdbd1481b4 100755 --- a/examples/cifar10_mesos/main.py +++ b/examples/cifar10_mesos/main.py @@ -256,13 +256,11 @@ def product(model): app.debug = True - app.run() + app.run(host='0.0.0.0', port=80) if __name__=='__main__': - app.run(host='0.0.0.0', port=80) - sys.argv.append("-singa_conf") sys.argv.append("/usr/src/incubator-singa/conf/singa.conf") model=buildModel(sys.argv) diff --git a/tool/python/examples/train_cifar10.py b/tool/python/examples/train_cifar10.py index f04b4ac90b..929aa7a9e0 100755 --- a/tool/python/examples/train_cifar10.py +++ b/tool/python/examples/train_cifar10.py @@ -48,7 +48,7 @@ def load_dataset(did=1): 3072 pixels are 3 channels of a 32x32 image ''' print '[Loading CIFAR10 dataset]', did - dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" + dataset_dir_ = "/workspace/cifar-10-batches-bin" fname_train_data = dataset_dir_ + "/data_batch_{}.bin".format(did) nb_samples = 10000 @@ -64,7 +64,7 @@ def load_dataset(did=1): return x, y def get_labellist(): - dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" + dataset_dir_ = "/workspace/cifar-10-batches-bin" fname_label_list = dataset_dir_ + "/batches.meta.txt" label_list_ = np.genfromtxt(fname_label_list, dtype=str) return label_list_ From f1da49d5cf2c839d2a041265104de2dfc0c70785 Mon Sep 17 00:00:00 2001 From: ijingo Date: Mon, 28 Mar 2016 15:50:36 +0800 Subject: [PATCH 13/26] update entry.sh --- examples/cifar10_mesos/entry.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/cifar10_mesos/entry.sh b/examples/cifar10_mesos/entry.sh index 170e997123..f06c1124a9 100644 --- a/examples/cifar10_mesos/entry.sh +++ b/examples/cifar10_mesos/entry.sh @@ -3,7 +3,7 @@ cd /workspace wget $1 tar zxf *.tar.gz cd /usr/src/incubator-singa/examples/cifar10_mesos/ -if [$2 -eq '2' ]; then +if [ $2 -eq '2' ]; then python main.py else cd /usr/src/incubator-singa/ From 21abd2c187be5ae1c8650df76e6d4786f78bc45c Mon Sep 17 00:00:00 2001 From: ijingo Date: Mon, 28 Mar 2016 16:24:11 +0800 Subject: [PATCH 14/26] wait process to exit --- examples/cifar10_mesos/entry.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/cifar10_mesos/entry.sh b/examples/cifar10_mesos/entry.sh index f06c1124a9..defce56811 100644 --- a/examples/cifar10_mesos/entry.sh +++ b/examples/cifar10_mesos/entry.sh @@ -8,4 +8,5 @@ if [ $2 -eq '2' ]; then else cd /usr/src/incubator-singa/ python tool/python/examples/train_cifar10.py + wait fi From 29649d4bb6943268ad0aa367636e608a634cc900 Mon Sep 17 00:00:00 2001 From: ijingo Date: Mon, 28 Mar 2016 16:25:13 +0800 Subject: [PATCH 15/26] wait process to exit --- examples/cifar10_mesos/entry.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/cifar10_mesos/entry.sh b/examples/cifar10_mesos/entry.sh index defce56811..1f0558752d 100644 --- a/examples/cifar10_mesos/entry.sh +++ b/examples/cifar10_mesos/entry.sh @@ -5,6 +5,7 @@ tar zxf *.tar.gz cd /usr/src/incubator-singa/examples/cifar10_mesos/ if [ $2 -eq '2' ]; then python main.py + wait else cd /usr/src/incubator-singa/ python tool/python/examples/train_cifar10.py From 4ce23a0fd53f389ab580f3ed79db6769286351e4 Mon Sep 17 00:00:00 2001 From: ijingo Date: Mon, 28 Mar 2016 16:39:58 +0800 Subject: [PATCH 16/26] update main.py reset entry.sh --- examples/cifar10_mesos/entry.sh | 2 -- examples/cifar10_mesos/main.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/cifar10_mesos/entry.sh b/examples/cifar10_mesos/entry.sh index 1f0558752d..f06c1124a9 100644 --- a/examples/cifar10_mesos/entry.sh +++ b/examples/cifar10_mesos/entry.sh @@ -5,9 +5,7 @@ tar zxf *.tar.gz cd /usr/src/incubator-singa/examples/cifar10_mesos/ if [ $2 -eq '2' ]; then python main.py - wait else cd /usr/src/incubator-singa/ python tool/python/examples/train_cifar10.py - wait fi diff --git a/examples/cifar10_mesos/main.py b/examples/cifar10_mesos/main.py index cdbd1481b4..bf0fe9c54f 100755 --- a/examples/cifar10_mesos/main.py +++ b/examples/cifar10_mesos/main.py @@ -241,7 +241,7 @@ def product(model): #register layers d = Driver() d.Init(sys.argv) - net_ = NeuralNet.CreateForTest(model.jobconf.neuralnet.SerializeToString()) + net_ = NeuralNet.CreateFromStr(model.jobconf.neuralnet.SerializeToString()) pixel_length_ = 3*size_[0]*size_[1] From 17bdf5986e117ed3edfae39ba2242747b3d25052 Mon Sep 17 00:00:00 2001 From: wuwf Date: Mon, 28 Mar 2016 12:48:33 +0000 Subject: [PATCH 17/26] fix dummy input layer feed bug --- examples/cifar10_mesos/main.py | 11 ++++++----- src/neuralnet/neuron_layer/dummy.cc | 4 ++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/examples/cifar10_mesos/main.py b/examples/cifar10_mesos/main.py index bf0fe9c54f..8705822068 100755 --- a/examples/cifar10_mesos/main.py +++ b/examples/cifar10_mesos/main.py @@ -187,11 +187,12 @@ def predict(): #dummy data Layer - shape = intVector(3) - shape[0]=3 - shape[1]=size_[0] - shape[2]=size_[1] - dummy_.Feed(1,shape,pixel) + shape = intVector(4) + shape[0]=1 + shape[1]=3 + shape[2]=size_[0] + shape[3]=size_[1] + dummy_.Feed(shape,pixel,0) #checkpoint_paths =getattr(m.jobconf, 'checkpoint_path') checkpoint_paths = strVector(1) diff --git a/src/neuralnet/neuron_layer/dummy.cc b/src/neuralnet/neuron_layer/dummy.cc index db595658ca..a3bec97b38 100644 --- a/src/neuralnet/neuron_layer/dummy.cc +++ b/src/neuralnet/neuron_layer/dummy.cc @@ -92,6 +92,10 @@ void DummyLayer::Feed(vector shape, vector* data, int op){ //shape.insert(shape.begin(),batchsize); data_.Reshape(shape); */ + //reshape data + data_.Reshape(shape); + CHECK_EQ(data_.count(), data->size()); + int size = data->size(); float* ptr = data_.mutable_cpu_data(); for (int i = 0; i< size; i++) { From 50610d33a4e0919cc20f5b24f29758599a3dda4c Mon Sep 17 00:00:00 2001 From: chonho Date: Wed, 30 Mar 2016 00:17:04 +0800 Subject: [PATCH 18/26] SINGA-126 Python Binding for Interactive Training - Add methods in singa/model.py . save_model_parameter . load_model_parameter - Add functions in src/worker.cc, revise driver.i . Checkpoint . InitNetParams - Add setup() method in singa/layer.py - Revise exampels . train_mnist.py, train_cifar10.py - Examples for Rafiki . create user workspace, e.g., user1-cifar10 and user2-mnist . in the workspace - neuralnet (model) in model.py - training in main.py --- include/singa/neuralnet/neuralnet.h | 2 +- include/singa/worker.h | 3 + src/neuralnet/neuralnet.cc | 2 +- src/worker.cc | 44 ++++++++++ tool/python/examples/train_cifar10.py | 57 +++++-------- tool/python/examples/train_mnist.py | 60 +++++--------- .../main.py} | 78 ++++++++++-------- tool/python/examples/user1-cifar10/model.py | 54 +++++++++++++ .../{train_mnist_2.py => user2-mnist/main.py} | 81 +++++++++++-------- tool/python/examples/user2-mnist/model.py | 51 ++++++++++++ tool/python/singa/driver.i | 13 ++- tool/python/singa/layer.py | 28 ++++++- tool/python/singa/model.py | 21 +++++ 13 files changed, 345 insertions(+), 149 deletions(-) rename tool/python/examples/{train_cifar10_2.py => user1-cifar10/main.py} (67%) create mode 100755 tool/python/examples/user1-cifar10/model.py rename tool/python/examples/{train_mnist_2.py => user2-mnist/main.py} (65%) create mode 100755 tool/python/examples/user2-mnist/model.py diff --git a/include/singa/neuralnet/neuralnet.h b/include/singa/neuralnet/neuralnet.h index 771a7ee9e9..60887e0d71 100644 --- a/include/singa/neuralnet/neuralnet.h +++ b/include/singa/neuralnet/neuralnet.h @@ -62,7 +62,7 @@ class NeuralNet { * Create for python binding, production test mode * */ - static NeuralNet* CreateFromStr(const string str); + static NeuralNet* CreateNeuralNet(const string str); NeuralNet() {}; static const NetProto Unrolling(const NetProto& net_conf); diff --git a/include/singa/worker.h b/include/singa/worker.h index 34c8000371..d53e54ba41 100644 --- a/include/singa/worker.h +++ b/include/singa/worker.h @@ -61,6 +61,7 @@ class Worker { * * @return a pointer to the instance of the Worker subclass. */ + static Worker* CreateWorker(const std::string str); static Worker* Create(const AlgProto& conf); virtual ~Worker(); /** @@ -129,6 +130,7 @@ class Worker { * initialized. */ void InitNetParams(const JobProto& job_conf, NeuralNet* net); + void InitNetParams(const std::string& folder, vector net); /** * Checkpoint all Param objects owned by the worker onto disk. * The serialization is done using BlobProtos which includes the name, version @@ -140,6 +142,7 @@ class Worker { * @param net the training net whose Param objects will be dumped. */ void Checkpoint(int step, const std::string& folder, NeuralNet* net); + void Checkpoint(int step, const std::string& folder, vector net); /** * Train one mini-batch. * Test/Validation is done before training. diff --git a/src/neuralnet/neuralnet.cc b/src/neuralnet/neuralnet.cc index 44d642a375..226d8d97a8 100644 --- a/src/neuralnet/neuralnet.cc +++ b/src/neuralnet/neuralnet.cc @@ -58,7 +58,7 @@ const NetProto NetConfPreprocess(const NetProto& conf) { return proto; } -NeuralNet* NeuralNet::CreateFromStr(const string str) { +NeuralNet* NeuralNet::CreateNeuralNet(const string str) { NetProto net_conf; net_conf.ParseFromString(str); return NeuralNet::Create(net_conf,singa::kTest,1); diff --git a/src/worker.cc b/src/worker.cc index 2afa8b06fe..a6f1bbe3a8 100644 --- a/src/worker.cc +++ b/src/worker.cc @@ -35,6 +35,12 @@ namespace singa { using std::string; +Worker* Worker::CreateWorker(const string str) { + AlgProto alg_proto; + alg_proto.ParseFromString(str); + return Worker::Create(alg_proto); +} + Worker* Worker::Create(const AlgProto& conf) { auto factory = Singleton>::Instance(); Worker* worker = nullptr; @@ -160,6 +166,23 @@ void Worker::InitSockets(const NeuralNet* net) { } } +void Worker::InitNetParams(const std::string& folder, vector net) { + + std::unordered_map name2param; + for (auto layer : net) { + for (auto param : layer->GetParams()) { + // only owners fill the memory of parameter values. + //if (param->owner() == param->id()) { + CHECK(name2param.find(param->name()) == name2param.end()); + name2param[param->name()] = param; + //} + } + } + vector paths; + paths.push_back(folder); + NeuralNet::Load(paths, name2param); +} + void Worker::InitNetParams(const JobProto& job_conf, NeuralNet* net) { // for each server grp, its first subscriber worker grp does the param init if (grp_id_ % Cluster::Get()->nworker_groups_per_server_group() == 0) { @@ -215,6 +238,27 @@ void Worker::InitNetParams(const JobProto& job_conf, NeuralNet* net) { } } +void Worker::Checkpoint(int step, const std::string& folder, vector net) { + BlobProtos bps; + for (auto layer : net) { + //if (layer->partition_id() == id_) { + for (auto param : layer->GetParams()) { + // only owners fill the memory of parameter values. + //if (param->owner() == param->id()) { + auto *blob = bps.add_blob(); + param->ToProto(blob); + bps.add_version(param->version()); + bps.add_name(param->name()); + //} + } + //} + } + char buf[256]; + snprintf(buf, sizeof(buf), "%s/step%d-worker0", folder.c_str(), step); + LOG(INFO) << "checkpoint to " << buf; + WriteProtoToBinaryFile(bps, buf); +} + void Worker::Checkpoint(int step, const std::string& folder, NeuralNet* net) { BlobProtos bps; for (auto layer : net->layers()) { diff --git a/tool/python/examples/train_cifar10.py b/tool/python/examples/train_cifar10.py index f04b4ac90b..4238cdf0a2 100755 --- a/tool/python/examples/train_cifar10.py +++ b/tool/python/examples/train_cifar10.py @@ -77,24 +77,23 @@ def get_labellist(): input = Dummy() label = Dummy() -conv1 = Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2) -pool1 = MaxPooling2D(pool_size=(3,3), stride=2) -act1 = Activation('relu') -lrn1 = LRN2D(3, alpha=0.00005, beta=0.75) - -conv2 = Convolution2D(32, 5, 1, 2, b_lr=2) -act2 = Activation('relu') -pool2 = AvgPooling2D(pool_size=(3,3), stride=2) -lrn2 = LRN2D(3, alpha=0.00005, beta=0.75) - -conv3 = Convolution2D(64, 5, 1, 2) -act3 = Activation('relu') -pool3 = AvgPooling2D(pool_size=(3,3), stride=2) - -inner1 = Dense(10, w_wd=250, b_lr=2, b_wd=0) -#act4 = Activation('softmax') +nn = [] +nn.append(input) +nn.append(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) +nn.append(MaxPooling2D(pool_size=(3,3), stride=2)) +nn.append(Activation('relu')) +nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) +nn.append(Convolution2D(32, 5, 1, 2, b_lr=2)) +nn.append(Activation('relu')) +nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) +nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) +nn.append(Convolution2D(64, 5, 1, 2)) +nn.append(Activation('relu')) +nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) +nn.append(Dense(10, w_wd=250, b_lr=2, b_wd=0)) loss = Loss('softmaxloss') +# updater sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) #------------------------------------------------------------------- @@ -108,29 +107,13 @@ def get_labellist(): x, y = load_dataset(dataset_id%5+1) for i in range(x.shape[0] / batchsize): - xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb, 3, 0) - label.SetData(yb, 1, 1) - - conv1.ComputeFeature(input) - pool1.ComputeFeature(conv1) - act1.ComputeFeature(pool1) - lrn1.ComputeFeature(act1) - - conv2.ComputeFeature(lrn1) - act2.ComputeFeature(conv2) - pool2.ComputeFeature(act2) - lrn2.ComputeFeature(pool2) - - conv3.ComputeFeature(lrn2) - act3.ComputeFeature(conv3) - pool3.ComputeFeature(act3) - - inner1.ComputeFeature(pool3) - loss.ComputeFeature(inner1, label) + nn[0].Feed(xb, 3, 0) + label.Feed(yb, 1, 1) + for h in range(1, len(nn)): + nn[h].ComputeFeature(nn[h-1]) + loss.ComputeFeature(nn[-1], label) if (i+1)%disp_freq == 0: print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), loss.display() - loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/train_mnist.py b/tool/python/examples/train_mnist.py index c1350e127a..ed6bb63fc4 100755 --- a/tool/python/examples/train_mnist.py +++ b/tool/python/examples/train_mnist.py @@ -67,56 +67,40 @@ def load_dataset(): input = Dummy() label = Dummy() -''' -(TODO) clee: need to think ... can we do this??? -inner1 = Dense(2500, init='uniform', activation='stanh') -inner2 = Dense(2000, init='uniform', activation='stanh') -inner3 = Dense(1000, init='uniform', activation='stanh') -inner4 = Dense(500, init='uniform', activation='stanh') -inner5 = Dense(10, init='uniform', activation='softmax') -''' -inner1 = Dense(2500, init='uniform') -inner2 = Dense(2000, init='uniform') -inner3 = Dense(1500, init='uniform') -inner4 = Dense(1000, init='uniform') -inner5 = Dense(500, init='uniform') -inner6 = Dense(10, init='uniform') -act1 = Activation('stanh') -act2 = Activation('stanh') -act3 = Activation('stanh') -act4 = Activation('stanh') -act5 = Activation('stanh') + +nn = [] +nn.append(input) +nn.append(Dense(2500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(2000, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(1500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(1000, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(10, init='uniform')) loss = Loss('softmaxloss') +# updater sgd = SGD(lr=0.001, lr_type='step') #------------------------------------------------------------------- -x, y = load_dataset() - print '[Start training]' batchsize = 64 disp_freq = 10 +x, y = load_dataset() + for i in range(x.shape[0] / batchsize): xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb) - label.SetData(yb, is_label=1) - inner1.ComputeFeature(input) - act1.ComputeFeature(inner1) - inner2.ComputeFeature(act1) - act2.ComputeFeature(inner2) - inner3.ComputeFeature(act2) - act3.ComputeFeature(inner3) - inner4.ComputeFeature(act3) - act4.ComputeFeature(inner4) - inner5.ComputeFeature(act4) - act5.ComputeFeature(inner5) - inner6.ComputeFeature(act5) - #w6, b6 = inner6.GetParams() - #d6 = inner6.GetData() - loss.ComputeFeature(inner6, label) + nn[0].Feed(xb) + label.Feed(yb, is_label=1) + for h in range(1, len(nn)): + nn[h].ComputeFeature(nn[h-1]) + loss.ComputeFeature(nn[-1], label) if (i+1)%disp_freq == 0: print ' Step {:>3}: '.format(i+1), loss.display() - loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/train_cifar10_2.py b/tool/python/examples/user1-cifar10/main.py similarity index 67% rename from tool/python/examples/train_cifar10_2.py rename to tool/python/examples/user1-cifar10/main.py index 15cae0a1c3..8bfb3cb01d 100755 --- a/tool/python/examples/train_cifar10_2.py +++ b/tool/python/examples/user1-cifar10/main.py @@ -21,18 +21,18 @@ #* #*************************************************************/ -import os, sys, string +import os, sys import numpy as np current_path_ = os.path.dirname(__file__) -singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) sys.path.append(os.path.join(singa_root_,'tool','python')) +from model import neuralnet, loss, updater from singa.driver import Driver from singa.layer import * -from singa.model import * +from singa.model import save_model_parameter, load_model_parameter from singa.utils.utility import swap32 -from google.protobuf.text_format import Merge ''' Example of CNN with cifar10 dataset @@ -74,25 +74,6 @@ def get_labellist(): d = Driver() d.Init(sys.argv) -input = Dummy() -label = Dummy() - -nn = [] # neural net (hidden layers) -nn.append(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) -nn.append(MaxPooling2D(pool_size=(3,3), stride=2)) -nn.append(Activation('relu')) -nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) -nn.append(Convolution2D(32, 5, 1, 2, b_lr=2)) -nn.append(Activation('relu')) -nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) -nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) -nn.append(Convolution2D(64, 5, 1, 2)) -nn.append(Activation('relu')) -nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) -nn.append(Dense(10, w_wd=250, b_lr=2, b_wd=0)) - -loss = Loss('softmaxloss') -sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) #------------------------------------------------------------------- print '[Start training]' @@ -100,24 +81,53 @@ def get_labellist(): disp_freq = 50 train_step = 1000 -for dataset_id in range(train_step / batchsize): +workspace = 'tool/python/examples/user1-cifar10/' +checkpoint = 'step100-worker0' + +label = Dummy() + +imgsize = 32 +nb_channel = 3 +data_shape = [batchsize, nb_channel, imgsize, imgsize] +load_model_parameter(workspace+checkpoint, neuralnet, data_shape) + +#for dataset_id in range(train_step / batchsize): +for dataset_id in range(1): x, y = load_dataset(dataset_id%5+1) - for i in range(x.shape[0] / batchsize): + #for i in range(x.shape[0] / batchsize): + for i in range(100): xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb, 3, 0) - label.SetData(yb, 1, 1) + neuralnet[0].Feed(xb, 3, 0) + label.Feed(yb, 1, 1) - for h in range(len(nn)): - if h == 0: - nn[h].ComputeFeature(input) - else: - nn[h].ComputeFeature(nn[h-1]) - loss.ComputeFeature(nn[-1], label) + for h in range(1, len(neuralnet)): + neuralnet[h].ComputeFeature(neuralnet[h-1]) + loss.ComputeFeature(neuralnet[-1], label) if (i+1)%disp_freq == 0: print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), loss.display() - loss.ComputeGradient(i+1, sgd) + loss.ComputeGradient(i+1, updater) + + step_trained = 100 + save_model_parameter(step_trained, workspace, neuralnet) + + #---- test of loading + load_model_parameter(workspace+checkpoint, neuralnet) + + for i in range(100, 200): + xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] + + neuralnet[0].Feed(xb) + label.Feed(yb, 1, 1) + + for h in range(1, len(neuralnet)): + neuralnet[h].ComputeFeature(neuralnet[h-1]) + loss.ComputeFeature(neuralnet[-1], label) + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1), + loss.display() + loss.ComputeGradient(i+1, updater) diff --git a/tool/python/examples/user1-cifar10/model.py b/tool/python/examples/user1-cifar10/model.py new file mode 100755 index 0000000000..4b4b39836a --- /dev/null +++ b/tool/python/examples/user1-cifar10/model.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.driver import Driver +from singa.layer import * +from singa.model import * +from singa.utils.utility import swap32 + +input = Dummy() + +neuralnet = [] # neural net (hidden layers) +neuralnet.append(input) +neuralnet.append(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) +neuralnet.append(MaxPooling2D(pool_size=(3,3), stride=2)) +neuralnet.append(Activation('relu')) +neuralnet.append(LRN2D(3, alpha=0.00005, beta=0.75)) +neuralnet.append(Convolution2D(32, 5, 1, 2, b_lr=2)) +neuralnet.append(Activation('relu')) +neuralnet.append(AvgPooling2D(pool_size=(3,3), stride=2)) +neuralnet.append(LRN2D(3, alpha=0.00005, beta=0.75)) +neuralnet.append(Convolution2D(64, 5, 1, 2)) +neuralnet.append(Activation('relu')) +neuralnet.append(AvgPooling2D(pool_size=(3,3), stride=2)) +neuralnet.append(Dense(10, w_wd=250, b_lr=2, b_wd=0)) + +loss = Loss('softmaxloss') +updater = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) diff --git a/tool/python/examples/train_mnist_2.py b/tool/python/examples/user2-mnist/main.py similarity index 65% rename from tool/python/examples/train_mnist_2.py rename to tool/python/examples/user2-mnist/main.py index 3ed1563fce..006d7d758f 100755 --- a/tool/python/examples/train_mnist_2.py +++ b/tool/python/examples/user2-mnist/main.py @@ -21,21 +21,24 @@ #* #*************************************************************/ -import os, sys, string +import os, sys import numpy as np current_path_ = os.path.dirname(__file__) -singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) sys.path.append(os.path.join(singa_root_,'tool','python')) +from model import neuralnet, loss, updater from singa.driver import Driver from singa.layer import * -from singa.model import * +from singa.model import save_model_parameter, load_model_parameter from singa.utils.utility import swap32 -from google.protobuf.text_format import Merge + +#import md5 +#modelkey = md5.new('cifar10').hexdigest() ''' -Example of MLP with MNIST dataset +Example of MLP with mnist dataset ''' def load_dataset(): @@ -58,6 +61,7 @@ def load_dataset(): y = y[4*2:] # skip header y = y.reshape(nb_samples, 1) print ' label y:', y.shape + return x, y #------------------------------------------------------------------- @@ -65,43 +69,52 @@ def load_dataset(): d = Driver() d.Init(sys.argv) -input = Dummy() -label = Dummy() - -nn = [] # neural net (hidden layers) -nn.append(Dense(2500, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(2000, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(1500, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(1000, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(500, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(10, init='uniform')) -loss = Loss('softmaxloss') - -sgd = SGD(lr=0.001, lr_type='step') - #------------------------------------------------------------------- print '[Start training]' batchsize = 64 disp_freq = 10 +workspace = 'tool/python/examples/user2-mnist/' +checkpoint = 'step30-worker0' + +label = Dummy() x, y = load_dataset() -for i in range(x.shape[0] / batchsize): +imgsize = 28 +nb_channel = 1 +data_shape = [batchsize, nb_channel, imgsize, imgsize] +load_model_parameter(workspace+checkpoint, neuralnet, data_shape) + +#for i in range(x.shape[0] / batchsize): +for i in range(30): xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb) - label.SetData(yb, is_label=1) - for h in range(len(nn)): - if h == 0: - nn[h].ComputeFeature(input) - else: - nn[h].ComputeFeature(nn[h-1]) - loss.ComputeFeature(nn[-1], label) + + neuralnet[0].Feed(xb) + label.Feed(yb, 1, 1) + + for h in range(1, len(neuralnet)): + neuralnet[h].ComputeFeature(neuralnet[h-1]) + loss.ComputeFeature(neuralnet[-1], label) + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1), + loss.display() + loss.ComputeGradient(i+1, updater) + +step_trained = 30 +save_model_parameter(step_trained, workspace, neuralnet) + +#--- test of loading +load_model_parameter(workspace+checkpoint, neuralnet) +for i in range(30, 50): + xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] + + neuralnet[0].Feed(xb) + label.Feed(yb, 1, 1) + + for h in range(1, len(neuralnet)): + neuralnet[h].ComputeFeature(neuralnet[h-1]) + loss.ComputeFeature(neuralnet[-1], label) if (i+1)%disp_freq == 0: print ' Step {:>3}: '.format(i+1), loss.display() - loss.ComputeGradient(i+1, sgd) + loss.ComputeGradient(i+1, updater) diff --git a/tool/python/examples/user2-mnist/model.py b/tool/python/examples/user2-mnist/model.py new file mode 100755 index 0000000000..4d5453b43b --- /dev/null +++ b/tool/python/examples/user2-mnist/model.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.layer import * +from singa.model import * + +input = Dummy() + +neuralnet = [] # neural net (hidden layers) +neuralnet.append(input) +neuralnet.append(Dense(2500, init='uniform')) +neuralnet.append(Activation('stanh')) +neuralnet.append(Dense(2000, init='uniform')) +neuralnet.append(Activation('stanh')) +neuralnet.append(Dense(1500, init='uniform')) +neuralnet.append(Activation('stanh')) +neuralnet.append(Dense(1000, init='uniform')) +neuralnet.append(Activation('stanh')) +neuralnet.append(Dense(500, init='uniform')) +neuralnet.append(Activation('stanh')) +neuralnet.append(Dense(10, init='uniform')) +loss = Loss('softmaxloss') + +updater = SGD(lr=0.001, lr_type='step') diff --git a/tool/python/singa/driver.i b/tool/python/singa/driver.i index 5dc3fc9547..253ab9fc0d 100644 --- a/tool/python/singa/driver.i +++ b/tool/python/singa/driver.i @@ -31,6 +31,7 @@ %apply (int ARGC, char **ARGV) { (int argc, char **argv) } %{ #include "singa/driver.h" +#include "singa/worker.h" #include "singa/neuralnet/neuralnet.h" #include "singa/neuralnet/layer.h" #include "singa/neuralnet/neuron_layer.h" @@ -61,11 +62,19 @@ namespace singa{ class NeuralNet{ public: - static NeuralNet* CreateFromStr(const std::string str); + static NeuralNet* CreateNeuralNet(const std::string str); void Load(const std::vector& paths); inline const std::vector& layers(); inline const std::vector& srclayers(const singa::Layer* layer); }; + + %nodefault Worker; + class Worker{ + public: + static singa::Worker* CreateWorker(const std::string str); + void InitNetParams(const std::string& folder, std::vector net); + void Checkpoint(int step, const std::string& folder, std::vector net); + }; class DummyLayer{ public: @@ -111,6 +120,8 @@ namespace singa{ inline const std::vector& shape(); inline float* mutable_cpu_data(); void FromProto(const std::string str); + /*void ToProto(singa::BlobProto* blob); + */ }; %template(floatBlob) Blob; diff --git a/tool/python/singa/layer.py b/tool/python/singa/layer.py index 6f5ef4f1b4..3e86624d4a 100644 --- a/tool/python/singa/layer.py +++ b/tool/python/singa/layer.py @@ -53,10 +53,20 @@ def __init__(self, **kwargs): # layer connectivity is set in Model.build() self.is_datalayer = False - self.singalayer = None self.srclayers = [] + def setup(self, *srclys): + # create singa::Layer and store srclayers + if self.singalayer == None: + self.singalayer = SingaLayer.CreateLayer(self.layer.SerializeToString()) + self.singaSrclayerVector = layerVector(len(srclys)) + for i in range(len(srclys)): + self.srclayers.append(srclys[i]) + self.singaSrclayerVector[i] = srclys[i].get_singalayer() + # set up the layer + SingaLayer.SetupLayer(self.singalayer, self.layer.SerializeToString(), self.singaSrclayerVector) + def ComputeFeature(self, *srclys): ''' The method creates and sets up singa::Layer and maintains its source layers @@ -164,7 +174,19 @@ def __init__(self): kwargs = {'name':'dummy', 'type':kDummy} self.layer = Message('Layer', **kwargs).proto - def SetData(self, data, nb_channel=1, is_label=0): + def setup(self, data_shape): + ''' (TODO) assume to be + data_shape: [64, 1, 28, 28] for mnist + [100, 3, 32, 32] for cifar100 + ''' + # create and setup the layer + if self.singalayer == None: + setval(self.layer.dummy_conf, input=True) + setval(self.layer.dummy_conf, shape=data_shape) + self.singalayer = DummyLayer() + self.singalayer.Setup(self.layer.SerializeToString(), layerVector(0)) + + def Feed(self, data, nb_channel=1, is_label=0): ''' Create and Setup singa::DummyLayer for input data Insert data using Feed() ''' @@ -174,7 +196,7 @@ def SetData(self, data, nb_channel=1, is_label=0): imgsize = int(numpy.sqrt(hdim/nb_channel)) shapeVector = [batchsize, nb_channel, imgsize, imgsize] - # create and setup the layer + # create and setup the dummy layer if self.singalayer == None: setval(self.layer.dummy_conf, input=True) setval(self.layer.dummy_conf, shape=shapeVector) diff --git a/tool/python/singa/model.py b/tool/python/singa/model.py index 0054bb35c9..034ad79a97 100644 --- a/tool/python/singa/model.py +++ b/tool/python/singa/model.py @@ -650,3 +650,24 @@ def SingaRun_script(filename='', execpath=''): #TODO better format to store the result?? return resultDic +def load_model_parameter(fin, neuralnet, data_shape=None): + print fin + from singa.driver import Worker + net = layerVector(len(neuralnet)-1) + neuralnet[0].setup(data_shape) + for i in range(1, len(neuralnet)): + neuralnet[i].setup(neuralnet[i-1]) + net[i-1] = neuralnet[i].singalayer + alg = Algorithm(type=enumAlgType('bp')).proto + w = Worker.CreateWorker(alg.SerializeToString()) + w.InitNetParams(fin, net) + +def save_model_parameter(step, fout, neuralnet): + + from singa.driver import Worker + net = layerVector(len(neuralnet)-1) + for i in range(1, len(neuralnet)): + net[i-1] = neuralnet[i].singalayer + alg = Algorithm(type=enumAlgType('bp')).proto + w = Worker.CreateWorker(alg.SerializeToString()) + w.Checkpoint(step, fout, net) From c643f55d4e8b8975619361e0d7421aebf6dc89b9 Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Wed, 30 Mar 2016 10:51:22 +0800 Subject: [PATCH 19/26] new model and main for python training --- .../python/examples/user1-cifar10/main_new.py | 86 + .../examples/user1-cifar10/model_new.py | 55 + tool/python/singa/driver.py | 506 - tool/python/singa/driver_wrap.cxx | 18194 ---------------- 4 files changed, 141 insertions(+), 18700 deletions(-) create mode 100755 tool/python/examples/user1-cifar10/main_new.py create mode 100755 tool/python/examples/user1-cifar10/model_new.py delete mode 100644 tool/python/singa/driver.py delete mode 100644 tool/python/singa/driver_wrap.cxx diff --git a/tool/python/examples/user1-cifar10/main_new.py b/tool/python/examples/user1-cifar10/main_new.py new file mode 100755 index 0000000000..0d6ba183fb --- /dev/null +++ b/tool/python/examples/user1-cifar10/main_new.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from model import neuralnet, updater +from singa.driver import Driver +from singa.layer import * +from singa.model import save_model_parameter, load_model_parameter +from singa.utils.utility import swap32 + +''' +Example of CNN with cifar10 dataset +''' + +#------------------------------------------------------------------- + + + +def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint): + print '[Layer registration/declaration]' + # TODO change layer registration methods + d = Driver() + d.Init(sys.argv) + + print '[Start training]' + + #if need to load checkpoint + if checkpoint: + load_model_parameter(workspace+checkpoint, neuralnet, data_shape) + + for i in range(0,train_step): + + for h in range(0, len(neuralnet)): + #Feed data for input layer + if neuralnet[h].type=="Dummy": + neuralnet[h].FetchData(batchsize) + neuralnet[h].ComputeFeature() + + neuralnet[h].ComputeGradient(i+1, updater) + + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), + neuralnet[h].display() + + if (i+1)%check_freq == 0: + save_model_parameter(i, workspace, neuralnet) + print '[Finish training]' + +def main(): + train( + batchsize = 10, + disp_freq = 100, + check_freq = 1000, + train_step = 1000, + workspace = 'tool/python/examples/user1-cifar10/', + checkpoint = 'step100-worker0' + ) + +if __name__=='__main__': + main() \ No newline at end of file diff --git a/tool/python/examples/user1-cifar10/model_new.py b/tool/python/examples/user1-cifar10/model_new.py new file mode 100755 index 0000000000..48a32d7554 --- /dev/null +++ b/tool/python/examples/user1-cifar10/model_new.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.driver import Driver +from singa.layer import * +from singa.model import * +from singa.utils.utility import swap32 + +neuralnet = [] # neural net (hidden layers) +#shape,inputfile,src +neuralnet.append(data1=Dummy(shape=[10000,3,32,32],path="examples/cifar10/cifar-10-batches-bin",src=[])) +neuralnet.append(data2=Dummy(shape=[10000,1],path="tool/python/examples/datasets/cifar10_mean_image",src=[])) +neuralnet.append(c1=Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2,src=[data1])) +neuralnet.append(p1=MaxPooling2D(pool_size=(3,3), stride=2,src=[c1])) +neuralnet.append(a1=Activation('relu',src=[p1])) +neuralnet.append(l1=LRN2D(3, alpha=0.00005, beta=0.75,src=[a1])) +neuralnet.append(c2=Convolution2D(32, 5, 1, 2, b_lr=2,src=[l1])) +neuralnet.append(a2=Activation('relu',src=[c2])) +neuralnet.append(p2=AvgPooling2D(pool_size=(3,3), stride=2,src=[a2])) +neuralnet.append(l2=LRN2D(3, alpha=0.00005, beta=0.75,src=[p2])) +neuralnet.append(c3=Convolution2D(64, 5, 1, 2,src=[l2])) +neuralnet.append(a3=Activation('relu',src=[c3])) +neuralnet.append(p3=AvgPooling2D(pool_size=(3,3), stride=2,src=[a3])) +neuralnet.append(d=Dense(10, w_wd=250, b_lr=2, b_wd=0,src=[p3])) +neuralnet.append(loss=Loss('softmaxloss',src=[d,data2])) + +#algorithm +updater = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) diff --git a/tool/python/singa/driver.py b/tool/python/singa/driver.py deleted file mode 100644 index 42725f6d46..0000000000 --- a/tool/python/singa/driver.py +++ /dev/null @@ -1,506 +0,0 @@ -# This file was automatically generated by SWIG (http://www.swig.org). -# Version 2.0.11 -# -# Do not make changes to this file unless you know what you are doing--modify -# the SWIG interface file instead. - - - - - -from sys import version_info -if version_info >= (2,6,0): - def swig_import_helper(): - from os.path import dirname - import imp - fp = None - try: - fp, pathname, description = imp.find_module('_driver', [dirname(__file__)]) - except ImportError: - import _driver - return _driver - if fp is not None: - try: - _mod = imp.load_module('_driver', fp, pathname, description) - finally: - fp.close() - return _mod - _driver = swig_import_helper() - del swig_import_helper -else: - import _driver -del version_info -try: - _swig_property = property -except NameError: - pass # Python < 2.2 doesn't have 'property'. -def _swig_setattr_nondynamic(self,class_type,name,value,static=1): - if (name == "thisown"): return self.this.own(value) - if (name == "this"): - if type(value).__name__ == 'SwigPyObject': - self.__dict__[name] = value - return - method = class_type.__swig_setmethods__.get(name,None) - if method: return method(self,value) - if (not static): - self.__dict__[name] = value - else: - raise AttributeError("You cannot add attributes to %s" % self) - -def _swig_setattr(self,class_type,name,value): - return _swig_setattr_nondynamic(self,class_type,name,value,0) - -def _swig_getattr(self,class_type,name): - if (name == "thisown"): return self.this.own() - method = class_type.__swig_getmethods__.get(name,None) - if method: return method(self) - raise AttributeError(name) - -def _swig_repr(self): - try: strthis = "proxy of " + self.this.__repr__() - except: strthis = "" - return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) - -try: - _object = object - _newclass = 1 -except AttributeError: - class _object : pass - _newclass = 0 - - -class SwigPyIterator(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, SwigPyIterator, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, SwigPyIterator, name) - def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined - class is abstract") - __repr__ = _swig_repr - __swig_destroy__ = _driver.delete_SwigPyIterator - __del__ = lambda self : None; - def value(self): return _driver.SwigPyIterator_value(self) - def incr(self, n=1): return _driver.SwigPyIterator_incr(self, n) - def decr(self, n=1): return _driver.SwigPyIterator_decr(self, n) - def distance(self, *args): return _driver.SwigPyIterator_distance(self, *args) - def equal(self, *args): return _driver.SwigPyIterator_equal(self, *args) - def copy(self): return _driver.SwigPyIterator_copy(self) - def next(self): return _driver.SwigPyIterator_next(self) - def __next__(self): return _driver.SwigPyIterator___next__(self) - def previous(self): return _driver.SwigPyIterator_previous(self) - def advance(self, *args): return _driver.SwigPyIterator_advance(self, *args) - def __eq__(self, *args): return _driver.SwigPyIterator___eq__(self, *args) - def __ne__(self, *args): return _driver.SwigPyIterator___ne__(self, *args) - def __iadd__(self, *args): return _driver.SwigPyIterator___iadd__(self, *args) - def __isub__(self, *args): return _driver.SwigPyIterator___isub__(self, *args) - def __add__(self, *args): return _driver.SwigPyIterator___add__(self, *args) - def __sub__(self, *args): return _driver.SwigPyIterator___sub__(self, *args) - def __iter__(self): return self -SwigPyIterator_swigregister = _driver.SwigPyIterator_swigregister -SwigPyIterator_swigregister(SwigPyIterator) - -class floatArray(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, floatArray, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, floatArray, name) - __repr__ = _swig_repr - def __init__(self, *args): - this = _driver.new_floatArray(*args) - try: self.this.append(this) - except: self.this = this - __swig_destroy__ = _driver.delete_floatArray - __del__ = lambda self : None; - def __getitem__(self, *args): return _driver.floatArray___getitem__(self, *args) - def __setitem__(self, *args): return _driver.floatArray___setitem__(self, *args) - def cast(self): return _driver.floatArray_cast(self) - __swig_getmethods__["frompointer"] = lambda x: _driver.floatArray_frompointer - if _newclass:frompointer = staticmethod(_driver.floatArray_frompointer) -floatArray_swigregister = _driver.floatArray_swigregister -floatArray_swigregister(floatArray) - -def floatArray_frompointer(*args): - return _driver.floatArray_frompointer(*args) -floatArray_frompointer = _driver.floatArray_frompointer - -class strVector(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, strVector, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, strVector, name) - __repr__ = _swig_repr - def iterator(self): return _driver.strVector_iterator(self) - def __iter__(self): return self.iterator() - def __nonzero__(self): return _driver.strVector___nonzero__(self) - def __bool__(self): return _driver.strVector___bool__(self) - def __len__(self): return _driver.strVector___len__(self) - def pop(self): return _driver.strVector_pop(self) - def __getslice__(self, *args): return _driver.strVector___getslice__(self, *args) - def __setslice__(self, *args): return _driver.strVector___setslice__(self, *args) - def __delslice__(self, *args): return _driver.strVector___delslice__(self, *args) - def __delitem__(self, *args): return _driver.strVector___delitem__(self, *args) - def __getitem__(self, *args): return _driver.strVector___getitem__(self, *args) - def __setitem__(self, *args): return _driver.strVector___setitem__(self, *args) - def append(self, *args): return _driver.strVector_append(self, *args) - def empty(self): return _driver.strVector_empty(self) - def size(self): return _driver.strVector_size(self) - def clear(self): return _driver.strVector_clear(self) - def swap(self, *args): return _driver.strVector_swap(self, *args) - def get_allocator(self): return _driver.strVector_get_allocator(self) - def begin(self): return _driver.strVector_begin(self) - def end(self): return _driver.strVector_end(self) - def rbegin(self): return _driver.strVector_rbegin(self) - def rend(self): return _driver.strVector_rend(self) - def pop_back(self): return _driver.strVector_pop_back(self) - def erase(self, *args): return _driver.strVector_erase(self, *args) - def __init__(self, *args): - this = _driver.new_strVector(*args) - try: self.this.append(this) - except: self.this = this - def push_back(self, *args): return _driver.strVector_push_back(self, *args) - def front(self): return _driver.strVector_front(self) - def back(self): return _driver.strVector_back(self) - def assign(self, *args): return _driver.strVector_assign(self, *args) - def resize(self, *args): return _driver.strVector_resize(self, *args) - def insert(self, *args): return _driver.strVector_insert(self, *args) - def reserve(self, *args): return _driver.strVector_reserve(self, *args) - def capacity(self): return _driver.strVector_capacity(self) - __swig_destroy__ = _driver.delete_strVector - __del__ = lambda self : None; -strVector_swigregister = _driver.strVector_swigregister -strVector_swigregister(strVector) - -class intVector(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, intVector, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, intVector, name) - __repr__ = _swig_repr - def iterator(self): return _driver.intVector_iterator(self) - def __iter__(self): return self.iterator() - def __nonzero__(self): return _driver.intVector___nonzero__(self) - def __bool__(self): return _driver.intVector___bool__(self) - def __len__(self): return _driver.intVector___len__(self) - def pop(self): return _driver.intVector_pop(self) - def __getslice__(self, *args): return _driver.intVector___getslice__(self, *args) - def __setslice__(self, *args): return _driver.intVector___setslice__(self, *args) - def __delslice__(self, *args): return _driver.intVector___delslice__(self, *args) - def __delitem__(self, *args): return _driver.intVector___delitem__(self, *args) - def __getitem__(self, *args): return _driver.intVector___getitem__(self, *args) - def __setitem__(self, *args): return _driver.intVector___setitem__(self, *args) - def append(self, *args): return _driver.intVector_append(self, *args) - def empty(self): return _driver.intVector_empty(self) - def size(self): return _driver.intVector_size(self) - def clear(self): return _driver.intVector_clear(self) - def swap(self, *args): return _driver.intVector_swap(self, *args) - def get_allocator(self): return _driver.intVector_get_allocator(self) - def begin(self): return _driver.intVector_begin(self) - def end(self): return _driver.intVector_end(self) - def rbegin(self): return _driver.intVector_rbegin(self) - def rend(self): return _driver.intVector_rend(self) - def pop_back(self): return _driver.intVector_pop_back(self) - def erase(self, *args): return _driver.intVector_erase(self, *args) - def __init__(self, *args): - this = _driver.new_intVector(*args) - try: self.this.append(this) - except: self.this = this - def push_back(self, *args): return _driver.intVector_push_back(self, *args) - def front(self): return _driver.intVector_front(self) - def back(self): return _driver.intVector_back(self) - def assign(self, *args): return _driver.intVector_assign(self, *args) - def resize(self, *args): return _driver.intVector_resize(self, *args) - def insert(self, *args): return _driver.intVector_insert(self, *args) - def reserve(self, *args): return _driver.intVector_reserve(self, *args) - def capacity(self): return _driver.intVector_capacity(self) - __swig_destroy__ = _driver.delete_intVector - __del__ = lambda self : None; -intVector_swigregister = _driver.intVector_swigregister -intVector_swigregister(intVector) - -class floatVector(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, floatVector, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, floatVector, name) - __repr__ = _swig_repr - def iterator(self): return _driver.floatVector_iterator(self) - def __iter__(self): return self.iterator() - def __nonzero__(self): return _driver.floatVector___nonzero__(self) - def __bool__(self): return _driver.floatVector___bool__(self) - def __len__(self): return _driver.floatVector___len__(self) - def pop(self): return _driver.floatVector_pop(self) - def __getslice__(self, *args): return _driver.floatVector___getslice__(self, *args) - def __setslice__(self, *args): return _driver.floatVector___setslice__(self, *args) - def __delslice__(self, *args): return _driver.floatVector___delslice__(self, *args) - def __delitem__(self, *args): return _driver.floatVector___delitem__(self, *args) - def __getitem__(self, *args): return _driver.floatVector___getitem__(self, *args) - def __setitem__(self, *args): return _driver.floatVector___setitem__(self, *args) - def append(self, *args): return _driver.floatVector_append(self, *args) - def empty(self): return _driver.floatVector_empty(self) - def size(self): return _driver.floatVector_size(self) - def clear(self): return _driver.floatVector_clear(self) - def swap(self, *args): return _driver.floatVector_swap(self, *args) - def get_allocator(self): return _driver.floatVector_get_allocator(self) - def begin(self): return _driver.floatVector_begin(self) - def end(self): return _driver.floatVector_end(self) - def rbegin(self): return _driver.floatVector_rbegin(self) - def rend(self): return _driver.floatVector_rend(self) - def pop_back(self): return _driver.floatVector_pop_back(self) - def erase(self, *args): return _driver.floatVector_erase(self, *args) - def __init__(self, *args): - this = _driver.new_floatVector(*args) - try: self.this.append(this) - except: self.this = this - def push_back(self, *args): return _driver.floatVector_push_back(self, *args) - def front(self): return _driver.floatVector_front(self) - def back(self): return _driver.floatVector_back(self) - def assign(self, *args): return _driver.floatVector_assign(self, *args) - def resize(self, *args): return _driver.floatVector_resize(self, *args) - def insert(self, *args): return _driver.floatVector_insert(self, *args) - def reserve(self, *args): return _driver.floatVector_reserve(self, *args) - def capacity(self): return _driver.floatVector_capacity(self) - __swig_destroy__ = _driver.delete_floatVector - __del__ = lambda self : None; -floatVector_swigregister = _driver.floatVector_swigregister -floatVector_swigregister(floatVector) - -class layerVector(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, layerVector, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, layerVector, name) - __repr__ = _swig_repr - def iterator(self): return _driver.layerVector_iterator(self) - def __iter__(self): return self.iterator() - def __nonzero__(self): return _driver.layerVector___nonzero__(self) - def __bool__(self): return _driver.layerVector___bool__(self) - def __len__(self): return _driver.layerVector___len__(self) - def pop(self): return _driver.layerVector_pop(self) - def __getslice__(self, *args): return _driver.layerVector___getslice__(self, *args) - def __setslice__(self, *args): return _driver.layerVector___setslice__(self, *args) - def __delslice__(self, *args): return _driver.layerVector___delslice__(self, *args) - def __delitem__(self, *args): return _driver.layerVector___delitem__(self, *args) - def __getitem__(self, *args): return _driver.layerVector___getitem__(self, *args) - def __setitem__(self, *args): return _driver.layerVector___setitem__(self, *args) - def append(self, *args): return _driver.layerVector_append(self, *args) - def empty(self): return _driver.layerVector_empty(self) - def size(self): return _driver.layerVector_size(self) - def clear(self): return _driver.layerVector_clear(self) - def swap(self, *args): return _driver.layerVector_swap(self, *args) - def get_allocator(self): return _driver.layerVector_get_allocator(self) - def begin(self): return _driver.layerVector_begin(self) - def end(self): return _driver.layerVector_end(self) - def rbegin(self): return _driver.layerVector_rbegin(self) - def rend(self): return _driver.layerVector_rend(self) - def pop_back(self): return _driver.layerVector_pop_back(self) - def erase(self, *args): return _driver.layerVector_erase(self, *args) - def __init__(self, *args): - this = _driver.new_layerVector(*args) - try: self.this.append(this) - except: self.this = this - def push_back(self, *args): return _driver.layerVector_push_back(self, *args) - def front(self): return _driver.layerVector_front(self) - def back(self): return _driver.layerVector_back(self) - def assign(self, *args): return _driver.layerVector_assign(self, *args) - def resize(self, *args): return _driver.layerVector_resize(self, *args) - def insert(self, *args): return _driver.layerVector_insert(self, *args) - def reserve(self, *args): return _driver.layerVector_reserve(self, *args) - def capacity(self): return _driver.layerVector_capacity(self) - __swig_destroy__ = _driver.delete_layerVector - __del__ = lambda self : None; -layerVector_swigregister = _driver.layerVector_swigregister -layerVector_swigregister(layerVector) - -class paramVector(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, paramVector, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, paramVector, name) - __repr__ = _swig_repr - def iterator(self): return _driver.paramVector_iterator(self) - def __iter__(self): return self.iterator() - def __nonzero__(self): return _driver.paramVector___nonzero__(self) - def __bool__(self): return _driver.paramVector___bool__(self) - def __len__(self): return _driver.paramVector___len__(self) - def pop(self): return _driver.paramVector_pop(self) - def __getslice__(self, *args): return _driver.paramVector___getslice__(self, *args) - def __setslice__(self, *args): return _driver.paramVector___setslice__(self, *args) - def __delslice__(self, *args): return _driver.paramVector___delslice__(self, *args) - def __delitem__(self, *args): return _driver.paramVector___delitem__(self, *args) - def __getitem__(self, *args): return _driver.paramVector___getitem__(self, *args) - def __setitem__(self, *args): return _driver.paramVector___setitem__(self, *args) - def append(self, *args): return _driver.paramVector_append(self, *args) - def empty(self): return _driver.paramVector_empty(self) - def size(self): return _driver.paramVector_size(self) - def clear(self): return _driver.paramVector_clear(self) - def swap(self, *args): return _driver.paramVector_swap(self, *args) - def get_allocator(self): return _driver.paramVector_get_allocator(self) - def begin(self): return _driver.paramVector_begin(self) - def end(self): return _driver.paramVector_end(self) - def rbegin(self): return _driver.paramVector_rbegin(self) - def rend(self): return _driver.paramVector_rend(self) - def pop_back(self): return _driver.paramVector_pop_back(self) - def erase(self, *args): return _driver.paramVector_erase(self, *args) - def __init__(self, *args): - this = _driver.new_paramVector(*args) - try: self.this.append(this) - except: self.this = this - def push_back(self, *args): return _driver.paramVector_push_back(self, *args) - def front(self): return _driver.paramVector_front(self) - def back(self): return _driver.paramVector_back(self) - def assign(self, *args): return _driver.paramVector_assign(self, *args) - def resize(self, *args): return _driver.paramVector_resize(self, *args) - def insert(self, *args): return _driver.paramVector_insert(self, *args) - def reserve(self, *args): return _driver.paramVector_reserve(self, *args) - def capacity(self): return _driver.paramVector_capacity(self) - __swig_destroy__ = _driver.delete_paramVector - __del__ = lambda self : None; -paramVector_swigregister = _driver.paramVector_swigregister -paramVector_swigregister(paramVector) - -class Driver(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, Driver, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, Driver, name) - __repr__ = _swig_repr - def Train(self, *args): return _driver.Driver_Train(self, *args) - def Init(self, *args): return _driver.Driver_Init(self, *args) - def InitLog(self, *args): return _driver.Driver_InitLog(self, *args) - def Test(self, *args): return _driver.Driver_Test(self, *args) - def __init__(self): - this = _driver.new_Driver() - try: self.this.append(this) - except: self.this = this - __swig_destroy__ = _driver.delete_Driver - __del__ = lambda self : None; -Driver_swigregister = _driver.Driver_swigregister -Driver_swigregister(Driver) - -class NeuralNet(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, NeuralNet, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, NeuralNet, name) - __repr__ = _swig_repr - __swig_getmethods__["CreateFromStr"] = lambda x: _driver.NeuralNet_CreateFromStr - if _newclass:CreateFromStr = staticmethod(_driver.NeuralNet_CreateFromStr) - def Load(self, *args): return _driver.NeuralNet_Load(self, *args) - def layers(self): return _driver.NeuralNet_layers(self) - def srclayers(self, *args): return _driver.NeuralNet_srclayers(self, *args) - def __init__(self): - this = _driver.new_NeuralNet() - try: self.this.append(this) - except: self.this = this - __swig_destroy__ = _driver.delete_NeuralNet - __del__ = lambda self : None; -NeuralNet_swigregister = _driver.NeuralNet_swigregister -NeuralNet_swigregister(NeuralNet) - -def NeuralNet_CreateFromStr(*args): - return _driver.NeuralNet_CreateFromStr(*args) -NeuralNet_CreateFromStr = _driver.NeuralNet_CreateFromStr - -class DummyLayer(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, DummyLayer, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, DummyLayer, name) - __repr__ = _swig_repr - def Setup(self, *args): return _driver.DummyLayer_Setup(self, *args) - def Feed(self, *args): return _driver.DummyLayer_Feed(self, *args) - def ToLayer(self): return _driver.DummyLayer_ToLayer(self) - def __init__(self): - this = _driver.new_DummyLayer() - try: self.this.append(this) - except: self.this = this - __swig_destroy__ = _driver.delete_DummyLayer - __del__ = lambda self : None; -DummyLayer_swigregister = _driver.DummyLayer_swigregister -DummyLayer_swigregister(DummyLayer) - -class Layer(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, Layer, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, Layer, name) - def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") - __repr__ = _swig_repr - __swig_getmethods__["CreateLayer"] = lambda x: _driver.Layer_CreateLayer - if _newclass:CreateLayer = staticmethod(_driver.Layer_CreateLayer) - __swig_getmethods__["SetupLayer"] = lambda x: _driver.Layer_SetupLayer - if _newclass:SetupLayer = staticmethod(_driver.Layer_SetupLayer) - def ComputeFeature(self, *args): return _driver.Layer_ComputeFeature(self, *args) - def ComputeGradient(self, *args): return _driver.Layer_ComputeGradient(self, *args) - def data(self, *args): return _driver.Layer_data(self, *args) - def GetParams(self): return _driver.Layer_GetParams(self) - def ToString(self, *args): return _driver.Layer_ToString(self, *args) - def SetParams(self, *args): return _driver.Layer_SetParams(self, *args) -Layer_swigregister = _driver.Layer_swigregister -Layer_swigregister(Layer) - -def Layer_CreateLayer(*args): - return _driver.Layer_CreateLayer(*args) -Layer_CreateLayer = _driver.Layer_CreateLayer - -def Layer_SetupLayer(*args): - return _driver.Layer_SetupLayer(*args) -Layer_SetupLayer = _driver.Layer_SetupLayer - -class Updater(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, Updater, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, Updater, name) - def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined") - __repr__ = _swig_repr - __swig_getmethods__["CreateUpdater"] = lambda x: _driver.Updater_CreateUpdater - if _newclass:CreateUpdater = staticmethod(_driver.Updater_CreateUpdater) - def Update(self, *args): return _driver.Updater_Update(self, *args) -Updater_swigregister = _driver.Updater_swigregister -Updater_swigregister(Updater) - -def Updater_CreateUpdater(*args): - return _driver.Updater_CreateUpdater(*args) -Updater_CreateUpdater = _driver.Updater_CreateUpdater - -class Param(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, Param, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, Param, name) - __repr__ = _swig_repr - def size(self): return _driver.Param_size(self) - def shape(self): return _driver.Param_shape(self) - def mutable_cpu_data(self): return _driver.Param_mutable_cpu_data(self) - def FromProto(self, *args): return _driver.Param_FromProto(self, *args) - def __init__(self): - this = _driver.new_Param() - try: self.this.append(this) - except: self.this = this - __swig_destroy__ = _driver.delete_Param - __del__ = lambda self : None; -Param_swigregister = _driver.Param_swigregister -Param_swigregister(Param) - -class floatBlob(_object): - __swig_setmethods__ = {} - __setattr__ = lambda self, name, value: _swig_setattr(self, floatBlob, name, value) - __swig_getmethods__ = {} - __getattr__ = lambda self, name: _swig_getattr(self, floatBlob, name) - __repr__ = _swig_repr - def count(self): return _driver.floatBlob_count(self) - def shape(self): return _driver.floatBlob_shape(self) - def mutable_cpu_data(self): return _driver.floatBlob_mutable_cpu_data(self) - def cpu_data(self): return _driver.floatBlob_cpu_data(self) - def __init__(self): - this = _driver.new_floatBlob() - try: self.this.append(this) - except: self.this = this - __swig_destroy__ = _driver.delete_floatBlob - __del__ = lambda self : None; -floatBlob_swigregister = _driver.floatBlob_swigregister -floatBlob_swigregister(floatBlob) - -# This file is compatible with both classic and new-style classes. - - diff --git a/tool/python/singa/driver_wrap.cxx b/tool/python/singa/driver_wrap.cxx deleted file mode 100644 index 7ebff7fdbd..0000000000 --- a/tool/python/singa/driver_wrap.cxx +++ /dev/null @@ -1,18194 +0,0 @@ -/* ---------------------------------------------------------------------------- - * This file was automatically generated by SWIG (http://www.swig.org). - * Version 2.0.11 - * - * This file is not intended to be easily readable and contains a number of - * coding conventions designed to improve portability and efficiency. Do not make - * changes to this file unless you know what you are doing--modify the SWIG - * interface file instead. - * ----------------------------------------------------------------------------- */ - -#define SWIGPYTHON -#define SWIG_PYTHON_DIRECTOR_NO_VTABLE - - -#ifdef __cplusplus -/* SwigValueWrapper is described in swig.swg */ -template class SwigValueWrapper { - struct SwigMovePointer { - T *ptr; - SwigMovePointer(T *p) : ptr(p) { } - ~SwigMovePointer() { delete ptr; } - SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } - } pointer; - SwigValueWrapper& operator=(const SwigValueWrapper& rhs); - SwigValueWrapper(const SwigValueWrapper& rhs); -public: - SwigValueWrapper() : pointer(0) { } - SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } - operator T&() const { return *pointer.ptr; } - T *operator&() { return pointer.ptr; } -}; - -template T SwigValueInit() { - return T(); -} -#endif - -/* ----------------------------------------------------------------------------- - * This section contains generic SWIG labels for method/variable - * declarations/attributes, and other compiler dependent labels. - * ----------------------------------------------------------------------------- */ - -/* template workaround for compilers that cannot correctly implement the C++ standard */ -#ifndef SWIGTEMPLATEDISAMBIGUATOR -# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) -# define SWIGTEMPLATEDISAMBIGUATOR template -# elif defined(__HP_aCC) -/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ -/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ -# define SWIGTEMPLATEDISAMBIGUATOR template -# else -# define SWIGTEMPLATEDISAMBIGUATOR -# endif -#endif - -/* inline attribute */ -#ifndef SWIGINLINE -# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) -# define SWIGINLINE inline -# else -# define SWIGINLINE -# endif -#endif - -/* attribute recognised by some compilers to avoid 'unused' warnings */ -#ifndef SWIGUNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -# elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) -# else -# define SWIGUNUSED -# endif -#endif - -#ifndef SWIG_MSC_UNSUPPRESS_4505 -# if defined(_MSC_VER) -# pragma warning(disable : 4505) /* unreferenced local function has been removed */ -# endif -#endif - -#ifndef SWIGUNUSEDPARM -# ifdef __cplusplus -# define SWIGUNUSEDPARM(p) -# else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED -# endif -#endif - -/* internal SWIG method */ -#ifndef SWIGINTERN -# define SWIGINTERN static SWIGUNUSED -#endif - -/* internal inline SWIG method */ -#ifndef SWIGINTERNINLINE -# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE -#endif - -/* exporting methods */ -#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -# ifndef GCC_HASCLASSVISIBILITY -# define GCC_HASCLASSVISIBILITY -# endif -#endif - -#ifndef SWIGEXPORT -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# if defined(STATIC_LINKED) -# define SWIGEXPORT -# else -# define SWIGEXPORT __declspec(dllexport) -# endif -# else -# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) -# define SWIGEXPORT __attribute__ ((visibility("default"))) -# else -# define SWIGEXPORT -# endif -# endif -#endif - -/* calling conventions for Windows */ -#ifndef SWIGSTDCALL -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# define SWIGSTDCALL __stdcall -# else -# define SWIGSTDCALL -# endif -#endif - -/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ -#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -# define _CRT_SECURE_NO_DEPRECATE -#endif - -/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ -#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) -# define _SCL_SECURE_NO_DEPRECATE -#endif - - - -#if defined(_DEBUG) && defined(SWIG_PYTHON_INTERPRETER_NO_DEBUG) -/* Use debug wrappers with the Python release dll */ -# undef _DEBUG -# include -# define _DEBUG -#else -# include -#endif - -/* ----------------------------------------------------------------------------- - * swigrun.swg - * - * This file contains generic C API SWIG runtime support for pointer - * type checking. - * ----------------------------------------------------------------------------- */ - -/* This should only be incremented when either the layout of swig_type_info changes, - or for whatever reason, the runtime changes incompatibly */ -#define SWIG_RUNTIME_VERSION "4" - -/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ -#ifdef SWIG_TYPE_TABLE -# define SWIG_QUOTE_STRING(x) #x -# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) -# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) -#else -# define SWIG_TYPE_TABLE_NAME -#endif - -/* - You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for - creating a static or dynamic library from the SWIG runtime code. - In 99.9% of the cases, SWIG just needs to declare them as 'static'. - - But only do this if strictly necessary, ie, if you have problems - with your compiler or suchlike. -*/ - -#ifndef SWIGRUNTIME -# define SWIGRUNTIME SWIGINTERN -#endif - -#ifndef SWIGRUNTIMEINLINE -# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE -#endif - -/* Generic buffer size */ -#ifndef SWIG_BUFFER_SIZE -# define SWIG_BUFFER_SIZE 1024 -#endif - -/* Flags for pointer conversions */ -#define SWIG_POINTER_DISOWN 0x1 -#define SWIG_CAST_NEW_MEMORY 0x2 - -/* Flags for new pointer objects */ -#define SWIG_POINTER_OWN 0x1 - - -/* - Flags/methods for returning states. - - The SWIG conversion methods, as ConvertPtr, return an integer - that tells if the conversion was successful or not. And if not, - an error code can be returned (see swigerrors.swg for the codes). - - Use the following macros/flags to set or process the returning - states. - - In old versions of SWIG, code such as the following was usually written: - - if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) { - // success code - } else { - //fail code - } - - Now you can be more explicit: - - int res = SWIG_ConvertPtr(obj,vptr,ty.flags); - if (SWIG_IsOK(res)) { - // success code - } else { - // fail code - } - - which is the same really, but now you can also do - - Type *ptr; - int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags); - if (SWIG_IsOK(res)) { - // success code - if (SWIG_IsNewObj(res) { - ... - delete *ptr; - } else { - ... - } - } else { - // fail code - } - - I.e., now SWIG_ConvertPtr can return new objects and you can - identify the case and take care of the deallocation. Of course that - also requires SWIG_ConvertPtr to return new result values, such as - - int SWIG_ConvertPtr(obj, ptr,...) { - if () { - if () { - *ptr = ; - return SWIG_NEWOBJ; - } else { - *ptr = ; - return SWIG_OLDOBJ; - } - } else { - return SWIG_BADOBJ; - } - } - - Of course, returning the plain '0(success)/-1(fail)' still works, but you can be - more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the - SWIG errors code. - - Finally, if the SWIG_CASTRANK_MODE is enabled, the result code - allows to return the 'cast rank', for example, if you have this - - int food(double) - int fooi(int); - - and you call - - food(1) // cast rank '1' (1 -> 1.0) - fooi(1) // cast rank '0' - - just use the SWIG_AddCast()/SWIG_CheckState() -*/ - -#define SWIG_OK (0) -#define SWIG_ERROR (-1) -#define SWIG_IsOK(r) (r >= 0) -#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) - -/* The CastRankLimit says how many bits are used for the cast rank */ -#define SWIG_CASTRANKLIMIT (1 << 8) -/* The NewMask denotes the object was created (using new/malloc) */ -#define SWIG_NEWOBJMASK (SWIG_CASTRANKLIMIT << 1) -/* The TmpMask is for in/out typemaps that use temporal objects */ -#define SWIG_TMPOBJMASK (SWIG_NEWOBJMASK << 1) -/* Simple returning values */ -#define SWIG_BADOBJ (SWIG_ERROR) -#define SWIG_OLDOBJ (SWIG_OK) -#define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK) -#define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK) -/* Check, add and del mask methods */ -#define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r) -#define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r) -#define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK)) -#define SWIG_AddTmpMask(r) (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r) -#define SWIG_DelTmpMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r) -#define SWIG_IsTmpObj(r) (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK)) - -/* Cast-Rank Mode */ -#if defined(SWIG_CASTRANK_MODE) -# ifndef SWIG_TypeRank -# define SWIG_TypeRank unsigned long -# endif -# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ -# define SWIG_MAXCASTRANK (2) -# endif -# define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) -# define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) -SWIGINTERNINLINE int SWIG_AddCast(int r) { - return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; -} -SWIGINTERNINLINE int SWIG_CheckState(int r) { - return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; -} -#else /* no cast-rank mode */ -# define SWIG_AddCast(r) (r) -# define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0) -#endif - - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void *(*swig_converter_func)(void *, int *); -typedef struct swig_type_info *(*swig_dycast_func)(void **); - -/* Structure to store information on one type */ -typedef struct swig_type_info { - const char *name; /* mangled name of this type */ - const char *str; /* human readable name of this type */ - swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ - struct swig_cast_info *cast; /* linked list of types that can cast into this type */ - void *clientdata; /* language specific type data */ - int owndata; /* flag if the structure owns the clientdata */ -} swig_type_info; - -/* Structure to store a type and conversion function used for casting */ -typedef struct swig_cast_info { - swig_type_info *type; /* pointer to type that is equivalent to this type */ - swig_converter_func converter; /* function to cast the void pointers */ - struct swig_cast_info *next; /* pointer to next cast in linked list */ - struct swig_cast_info *prev; /* pointer to the previous cast */ -} swig_cast_info; - -/* Structure used to store module information - * Each module generates one structure like this, and the runtime collects - * all of these structures and stores them in a circularly linked list.*/ -typedef struct swig_module_info { - swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ - size_t size; /* Number of types in this module */ - struct swig_module_info *next; /* Pointer to next element in circularly linked list */ - swig_type_info **type_initial; /* Array of initially generated type structures */ - swig_cast_info **cast_initial; /* Array of initially generated casting structures */ - void *clientdata; /* Language specific module data */ -} swig_module_info; - -/* - Compare two type names skipping the space characters, therefore - "char*" == "char *" and "Class" == "Class", etc. - - Return 0 when the two name types are equivalent, as in - strncmp, but skipping ' '. -*/ -SWIGRUNTIME int -SWIG_TypeNameComp(const char *f1, const char *l1, - const char *f2, const char *l2) { - for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { - while ((*f1 == ' ') && (f1 != l1)) ++f1; - while ((*f2 == ' ') && (f2 != l2)) ++f2; - if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; - } - return (int)((l1 - f1) - (l2 - f2)); -} - -/* - Check type equivalence in a name list like ||... - Return 0 if equal, -1 if nb < tb, 1 if nb > tb -*/ -SWIGRUNTIME int -SWIG_TypeCmp(const char *nb, const char *tb) { - int equiv = 1; - const char* te = tb + strlen(tb); - const char* ne = nb; - while (equiv != 0 && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') break; - } - equiv = SWIG_TypeNameComp(nb, ne, tb, te); - if (*ne) ++ne; - } - return equiv; -} - -/* - Check type equivalence in a name list like ||... - Return 0 if not equal, 1 if equal -*/ -SWIGRUNTIME int -SWIG_TypeEquiv(const char *nb, const char *tb) { - return SWIG_TypeCmp(nb, tb) == 0 ? 1 : 0; -} - -/* - Check the typename -*/ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheck(const char *c, swig_type_info *ty) { - if (ty) { - swig_cast_info *iter = ty->cast; - while (iter) { - if (strcmp(iter->type->name, c) == 0) { - if (iter == ty->cast) - return iter; - /* Move iter to the top of the linked list */ - iter->prev->next = iter->next; - if (iter->next) - iter->next->prev = iter->prev; - iter->next = ty->cast; - iter->prev = 0; - if (ty->cast) ty->cast->prev = iter; - ty->cast = iter; - return iter; - } - iter = iter->next; - } - } - return 0; -} - -/* - Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison -*/ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) { - if (ty) { - swig_cast_info *iter = ty->cast; - while (iter) { - if (iter->type == from) { - if (iter == ty->cast) - return iter; - /* Move iter to the top of the linked list */ - iter->prev->next = iter->next; - if (iter->next) - iter->next->prev = iter->prev; - iter->next = ty->cast; - iter->prev = 0; - if (ty->cast) ty->cast->prev = iter; - ty->cast = iter; - return iter; - } - iter = iter->next; - } - } - return 0; -} - -/* - Cast a pointer up an inheritance hierarchy -*/ -SWIGRUNTIMEINLINE void * -SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { - return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); -} - -/* - Dynamic pointer casting. Down an inheritance hierarchy -*/ -SWIGRUNTIME swig_type_info * -SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { - swig_type_info *lastty = ty; - if (!ty || !ty->dcast) return ty; - while (ty && (ty->dcast)) { - ty = (*ty->dcast)(ptr); - if (ty) lastty = ty; - } - return lastty; -} - -/* - Return the name associated with this type -*/ -SWIGRUNTIMEINLINE const char * -SWIG_TypeName(const swig_type_info *ty) { - return ty->name; -} - -/* - Return the pretty name associated with this type, - that is an unmangled type name in a form presentable to the user. -*/ -SWIGRUNTIME const char * -SWIG_TypePrettyName(const swig_type_info *type) { - /* The "str" field contains the equivalent pretty names of the - type, separated by vertical-bar characters. We choose - to print the last name, as it is often (?) the most - specific. */ - if (!type) return NULL; - if (type->str != NULL) { - const char *last_name = type->str; - const char *s; - for (s = type->str; *s; s++) - if (*s == '|') last_name = s+1; - return last_name; - } - else - return type->name; -} - -/* - Set the clientdata field for a type -*/ -SWIGRUNTIME void -SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { - swig_cast_info *cast = ti->cast; - /* if (ti->clientdata == clientdata) return; */ - ti->clientdata = clientdata; - - while (cast) { - if (!cast->converter) { - swig_type_info *tc = cast->type; - if (!tc->clientdata) { - SWIG_TypeClientData(tc, clientdata); - } - } - cast = cast->next; - } -} -SWIGRUNTIME void -SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { - SWIG_TypeClientData(ti, clientdata); - ti->owndata = 1; -} - -/* - Search for a swig_type_info structure only by mangled name - Search is a O(log #types) - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_MangledTypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - swig_module_info *iter = start; - do { - if (iter->size) { - register size_t l = 0; - register size_t r = iter->size - 1; - do { - /* since l+r >= 0, we can (>> 1) instead (/ 2) */ - register size_t i = (l + r) >> 1; - const char *iname = iter->types[i]->name; - if (iname) { - register int compare = strcmp(name, iname); - if (compare == 0) { - return iter->types[i]; - } else if (compare < 0) { - if (i) { - r = i - 1; - } else { - break; - } - } else if (compare > 0) { - l = i + 1; - } - } else { - break; /* should never happen */ - } - } while (l <= r); - } - iter = iter->next; - } while (iter != end); - return 0; -} - -/* - Search for a swig_type_info structure for either a mangled name or a human readable name. - It first searches the mangled names of the types, which is a O(log #types) - If a type is not found it then searches the human readable names, which is O(#types). - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_TypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - /* STEP 1: Search the name field using binary search */ - swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); - if (ret) { - return ret; - } else { - /* STEP 2: If the type hasn't been found, do a complete search - of the str field (the human readable name) */ - swig_module_info *iter = start; - do { - register size_t i = 0; - for (; i < iter->size; ++i) { - if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) - return iter->types[i]; - } - iter = iter->next; - } while (iter != end); - } - - /* neither found a match */ - return 0; -} - -/* - Pack binary data into a string -*/ -SWIGRUNTIME char * -SWIG_PackData(char *c, void *ptr, size_t sz) { - static const char hex[17] = "0123456789abcdef"; - register const unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register unsigned char uu = *u; - *(c++) = hex[(uu & 0xf0) >> 4]; - *(c++) = hex[uu & 0xf]; - } - return c; -} - -/* - Unpack binary data from a string -*/ -SWIGRUNTIME const char * -SWIG_UnpackData(const char *c, void *ptr, size_t sz) { - register unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register char d = *(c++); - register unsigned char uu; - if ((d >= '0') && (d <= '9')) - uu = ((d - '0') << 4); - else if ((d >= 'a') && (d <= 'f')) - uu = ((d - ('a'-10)) << 4); - else - return (char *) 0; - d = *(c++); - if ((d >= '0') && (d <= '9')) - uu |= (d - '0'); - else if ((d >= 'a') && (d <= 'f')) - uu |= (d - ('a'-10)); - else - return (char *) 0; - *u = uu; - } - return c; -} - -/* - Pack 'void *' into a string buffer. -*/ -SWIGRUNTIME char * -SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { - char *r = buff; - if ((2*sizeof(void *) + 2) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,&ptr,sizeof(void *)); - if (strlen(name) + 1 > (bsz - (r - buff))) return 0; - strcpy(r,name); - return buff; -} - -SWIGRUNTIME const char * -SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - *ptr = (void *) 0; - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sizeof(void *)); -} - -SWIGRUNTIME char * -SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { - char *r = buff; - size_t lname = (name ? strlen(name) : 0); - if ((2*sz + 2 + lname) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,ptr,sz); - if (lname) { - strncpy(r,name,lname+1); - } else { - *r = 0; - } - return buff; -} - -SWIGRUNTIME const char * -SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - memset(ptr,0,sz); - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sz); -} - -#ifdef __cplusplus -} -#endif - -/* Errors in SWIG */ -#define SWIG_UnknownError -1 -#define SWIG_IOError -2 -#define SWIG_RuntimeError -3 -#define SWIG_IndexError -4 -#define SWIG_TypeError -5 -#define SWIG_DivisionByZero -6 -#define SWIG_OverflowError -7 -#define SWIG_SyntaxError -8 -#define SWIG_ValueError -9 -#define SWIG_SystemError -10 -#define SWIG_AttributeError -11 -#define SWIG_MemoryError -12 -#define SWIG_NullReferenceError -13 - - - -/* Compatibility macros for Python 3 */ -#if PY_VERSION_HEX >= 0x03000000 - -#define PyClass_Check(obj) PyObject_IsInstance(obj, (PyObject *)&PyType_Type) -#define PyInt_Check(x) PyLong_Check(x) -#define PyInt_AsLong(x) PyLong_AsLong(x) -#define PyInt_FromLong(x) PyLong_FromLong(x) -#define PyInt_FromSize_t(x) PyLong_FromSize_t(x) -#define PyString_Check(name) PyBytes_Check(name) -#define PyString_FromString(x) PyUnicode_FromString(x) -#define PyString_Format(fmt, args) PyUnicode_Format(fmt, args) -#define PyString_AsString(str) PyBytes_AsString(str) -#define PyString_Size(str) PyBytes_Size(str) -#define PyString_InternFromString(key) PyUnicode_InternFromString(key) -#define Py_TPFLAGS_HAVE_CLASS Py_TPFLAGS_BASETYPE -#define PyString_AS_STRING(x) PyUnicode_AS_STRING(x) -#define _PyLong_FromSsize_t(x) PyLong_FromSsize_t(x) - -#endif - -#ifndef Py_TYPE -# define Py_TYPE(op) ((op)->ob_type) -#endif - -/* SWIG APIs for compatibility of both Python 2 & 3 */ - -#if PY_VERSION_HEX >= 0x03000000 -# define SWIG_Python_str_FromFormat PyUnicode_FromFormat -#else -# define SWIG_Python_str_FromFormat PyString_FromFormat -#endif - - -/* Warning: This function will allocate a new string in Python 3, - * so please call SWIG_Python_str_DelForPy3(x) to free the space. - */ -SWIGINTERN char* -SWIG_Python_str_AsChar(PyObject *str) -{ -#if PY_VERSION_HEX >= 0x03000000 - char *cstr; - char *newstr; - Py_ssize_t len; - str = PyUnicode_AsUTF8String(str); - PyBytes_AsStringAndSize(str, &cstr, &len); - newstr = (char *) malloc(len+1); - memcpy(newstr, cstr, len+1); - Py_XDECREF(str); - return newstr; -#else - return PyString_AsString(str); -#endif -} - -#if PY_VERSION_HEX >= 0x03000000 -# define SWIG_Python_str_DelForPy3(x) free( (void*) (x) ) -#else -# define SWIG_Python_str_DelForPy3(x) -#endif - - -SWIGINTERN PyObject* -SWIG_Python_str_FromChar(const char *c) -{ -#if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_FromString(c); -#else - return PyString_FromString(c); -#endif -} - -/* Add PyOS_snprintf for old Pythons */ -#if PY_VERSION_HEX < 0x02020000 -# if defined(_MSC_VER) || defined(__BORLANDC__) || defined(_WATCOM) -# define PyOS_snprintf _snprintf -# else -# define PyOS_snprintf snprintf -# endif -#endif - -/* A crude PyString_FromFormat implementation for old Pythons */ -#if PY_VERSION_HEX < 0x02020000 - -#ifndef SWIG_PYBUFFER_SIZE -# define SWIG_PYBUFFER_SIZE 1024 -#endif - -static PyObject * -PyString_FromFormat(const char *fmt, ...) { - va_list ap; - char buf[SWIG_PYBUFFER_SIZE * 2]; - int res; - va_start(ap, fmt); - res = vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - return (res < 0 || res >= (int)sizeof(buf)) ? 0 : PyString_FromString(buf); -} -#endif - -/* Add PyObject_Del for old Pythons */ -#if PY_VERSION_HEX < 0x01060000 -# define PyObject_Del(op) PyMem_DEL((op)) -#endif -#ifndef PyObject_DEL -# define PyObject_DEL PyObject_Del -#endif - -/* A crude PyExc_StopIteration exception for old Pythons */ -#if PY_VERSION_HEX < 0x02020000 -# ifndef PyExc_StopIteration -# define PyExc_StopIteration PyExc_RuntimeError -# endif -# ifndef PyObject_GenericGetAttr -# define PyObject_GenericGetAttr 0 -# endif -#endif - -/* Py_NotImplemented is defined in 2.1 and up. */ -#if PY_VERSION_HEX < 0x02010000 -# ifndef Py_NotImplemented -# define Py_NotImplemented PyExc_RuntimeError -# endif -#endif - -/* A crude PyString_AsStringAndSize implementation for old Pythons */ -#if PY_VERSION_HEX < 0x02010000 -# ifndef PyString_AsStringAndSize -# define PyString_AsStringAndSize(obj, s, len) {*s = PyString_AsString(obj); *len = *s ? strlen(*s) : 0;} -# endif -#endif - -/* PySequence_Size for old Pythons */ -#if PY_VERSION_HEX < 0x02000000 -# ifndef PySequence_Size -# define PySequence_Size PySequence_Length -# endif -#endif - -/* PyBool_FromLong for old Pythons */ -#if PY_VERSION_HEX < 0x02030000 -static -PyObject *PyBool_FromLong(long ok) -{ - PyObject *result = ok ? Py_True : Py_False; - Py_INCREF(result); - return result; -} -#endif - -/* Py_ssize_t for old Pythons */ -/* This code is as recommended by: */ -/* http://www.python.org/dev/peps/pep-0353/#conversion-guidelines */ -#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) -typedef int Py_ssize_t; -# define PY_SSIZE_T_MAX INT_MAX -# define PY_SSIZE_T_MIN INT_MIN -typedef inquiry lenfunc; -typedef intargfunc ssizeargfunc; -typedef intintargfunc ssizessizeargfunc; -typedef intobjargproc ssizeobjargproc; -typedef intintobjargproc ssizessizeobjargproc; -typedef getreadbufferproc readbufferproc; -typedef getwritebufferproc writebufferproc; -typedef getsegcountproc segcountproc; -typedef getcharbufferproc charbufferproc; -static long PyNumber_AsSsize_t (PyObject *x, void *SWIGUNUSEDPARM(exc)) -{ - long result = 0; - PyObject *i = PyNumber_Int(x); - if (i) { - result = PyInt_AsLong(i); - Py_DECREF(i); - } - return result; -} -#endif - -#if PY_VERSION_HEX < 0x02050000 -#define PyInt_FromSize_t(x) PyInt_FromLong((long)x) -#endif - -#if PY_VERSION_HEX < 0x02040000 -#define Py_VISIT(op) \ - do { \ - if (op) { \ - int vret = visit((op), arg); \ - if (vret) \ - return vret; \ - } \ - } while (0) -#endif - -#if PY_VERSION_HEX < 0x02030000 -typedef struct { - PyTypeObject type; - PyNumberMethods as_number; - PyMappingMethods as_mapping; - PySequenceMethods as_sequence; - PyBufferProcs as_buffer; - PyObject *name, *slots; -} PyHeapTypeObject; -#endif - -#if PY_VERSION_HEX < 0x02030000 -typedef destructor freefunc; -#endif - -#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \ - (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0) || \ - (PY_MAJOR_VERSION > 3)) -# define SWIGPY_USE_CAPSULE -# define SWIGPY_CAPSULE_NAME ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME) -#endif - -#if PY_VERSION_HEX < 0x03020000 -#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type) -#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name) -#endif - -/* ----------------------------------------------------------------------------- - * error manipulation - * ----------------------------------------------------------------------------- */ - -SWIGRUNTIME PyObject* -SWIG_Python_ErrorType(int code) { - PyObject* type = 0; - switch(code) { - case SWIG_MemoryError: - type = PyExc_MemoryError; - break; - case SWIG_IOError: - type = PyExc_IOError; - break; - case SWIG_RuntimeError: - type = PyExc_RuntimeError; - break; - case SWIG_IndexError: - type = PyExc_IndexError; - break; - case SWIG_TypeError: - type = PyExc_TypeError; - break; - case SWIG_DivisionByZero: - type = PyExc_ZeroDivisionError; - break; - case SWIG_OverflowError: - type = PyExc_OverflowError; - break; - case SWIG_SyntaxError: - type = PyExc_SyntaxError; - break; - case SWIG_ValueError: - type = PyExc_ValueError; - break; - case SWIG_SystemError: - type = PyExc_SystemError; - break; - case SWIG_AttributeError: - type = PyExc_AttributeError; - break; - default: - type = PyExc_RuntimeError; - } - return type; -} - - -SWIGRUNTIME void -SWIG_Python_AddErrorMsg(const char* mesg) -{ - PyObject *type = 0; - PyObject *value = 0; - PyObject *traceback = 0; - - if (PyErr_Occurred()) PyErr_Fetch(&type, &value, &traceback); - if (value) { - char *tmp; - PyObject *old_str = PyObject_Str(value); - PyErr_Clear(); - Py_XINCREF(type); - - PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); - SWIG_Python_str_DelForPy3(tmp); - Py_DECREF(old_str); - Py_DECREF(value); - } else { - PyErr_SetString(PyExc_RuntimeError, mesg); - } -} - -#if defined(SWIG_PYTHON_NO_THREADS) -# if defined(SWIG_PYTHON_THREADS) -# undef SWIG_PYTHON_THREADS -# endif -#endif -#if defined(SWIG_PYTHON_THREADS) /* Threading support is enabled */ -# if !defined(SWIG_PYTHON_USE_GIL) && !defined(SWIG_PYTHON_NO_USE_GIL) -# if (PY_VERSION_HEX >= 0x02030000) /* For 2.3 or later, use the PyGILState calls */ -# define SWIG_PYTHON_USE_GIL -# endif -# endif -# if defined(SWIG_PYTHON_USE_GIL) /* Use PyGILState threads calls */ -# ifndef SWIG_PYTHON_INITIALIZE_THREADS -# define SWIG_PYTHON_INITIALIZE_THREADS PyEval_InitThreads() -# endif -# ifdef __cplusplus /* C++ code */ - class SWIG_Python_Thread_Block { - bool status; - PyGILState_STATE state; - public: - void end() { if (status) { PyGILState_Release(state); status = false;} } - SWIG_Python_Thread_Block() : status(true), state(PyGILState_Ensure()) {} - ~SWIG_Python_Thread_Block() { end(); } - }; - class SWIG_Python_Thread_Allow { - bool status; - PyThreadState *save; - public: - void end() { if (status) { PyEval_RestoreThread(save); status = false; }} - SWIG_Python_Thread_Allow() : status(true), save(PyEval_SaveThread()) {} - ~SWIG_Python_Thread_Allow() { end(); } - }; -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK SWIG_Python_Thread_Block _swig_thread_block -# define SWIG_PYTHON_THREAD_END_BLOCK _swig_thread_block.end() -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW SWIG_Python_Thread_Allow _swig_thread_allow -# define SWIG_PYTHON_THREAD_END_ALLOW _swig_thread_allow.end() -# else /* C code */ -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK PyGILState_STATE _swig_thread_block = PyGILState_Ensure() -# define SWIG_PYTHON_THREAD_END_BLOCK PyGILState_Release(_swig_thread_block) -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW PyThreadState *_swig_thread_allow = PyEval_SaveThread() -# define SWIG_PYTHON_THREAD_END_ALLOW PyEval_RestoreThread(_swig_thread_allow) -# endif -# else /* Old thread way, not implemented, user must provide it */ -# if !defined(SWIG_PYTHON_INITIALIZE_THREADS) -# define SWIG_PYTHON_INITIALIZE_THREADS -# endif -# if !defined(SWIG_PYTHON_THREAD_BEGIN_BLOCK) -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK -# endif -# if !defined(SWIG_PYTHON_THREAD_END_BLOCK) -# define SWIG_PYTHON_THREAD_END_BLOCK -# endif -# if !defined(SWIG_PYTHON_THREAD_BEGIN_ALLOW) -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW -# endif -# if !defined(SWIG_PYTHON_THREAD_END_ALLOW) -# define SWIG_PYTHON_THREAD_END_ALLOW -# endif -# endif -#else /* No thread support */ -# define SWIG_PYTHON_INITIALIZE_THREADS -# define SWIG_PYTHON_THREAD_BEGIN_BLOCK -# define SWIG_PYTHON_THREAD_END_BLOCK -# define SWIG_PYTHON_THREAD_BEGIN_ALLOW -# define SWIG_PYTHON_THREAD_END_ALLOW -#endif - -/* ----------------------------------------------------------------------------- - * Python API portion that goes into the runtime - * ----------------------------------------------------------------------------- */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* ----------------------------------------------------------------------------- - * Constant declarations - * ----------------------------------------------------------------------------- */ - -/* Constant Types */ -#define SWIG_PY_POINTER 4 -#define SWIG_PY_BINARY 5 - -/* Constant information structure */ -typedef struct swig_const_info { - int type; - char *name; - long lvalue; - double dvalue; - void *pvalue; - swig_type_info **ptype; -} swig_const_info; - - -/* ----------------------------------------------------------------------------- - * Wrapper of PyInstanceMethod_New() used in Python 3 - * It is exported to the generated module, used for -fastproxy - * ----------------------------------------------------------------------------- */ -#if PY_VERSION_HEX >= 0x03000000 -SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *func) -{ - return PyInstanceMethod_New(func); -} -#else -SWIGRUNTIME PyObject* SWIG_PyInstanceMethod_New(PyObject *SWIGUNUSEDPARM(self), PyObject *SWIGUNUSEDPARM(func)) -{ - return NULL; -} -#endif - -#ifdef __cplusplus -} -#endif - - -/* ----------------------------------------------------------------------------- - * pyrun.swg - * - * This file contains the runtime support for Python modules - * and includes code for managing global variables and pointer - * type checking. - * - * ----------------------------------------------------------------------------- */ - -/* Common SWIG API */ - -/* for raw pointers */ -#define SWIG_Python_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, 0) -#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Python_ConvertPtr(obj, pptr, type, flags) -#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Python_ConvertPtrAndOwn(obj, pptr, type, flags, own) - -#ifdef SWIGPYTHON_BUILTIN -#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(self, ptr, type, flags) -#else -#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) -#endif - -#define SWIG_InternalNewPointerObj(ptr, type, flags) SWIG_Python_NewPointerObj(NULL, ptr, type, flags) - -#define SWIG_CheckImplicit(ty) SWIG_Python_CheckImplicit(ty) -#define SWIG_AcquirePtr(ptr, src) SWIG_Python_AcquirePtr(ptr, src) -#define swig_owntype int - -/* for raw packed data */ -#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) -#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) - -/* for class or struct pointers */ -#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags) -#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags) - -/* for C or C++ function pointers */ -#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_Python_ConvertFunctionPtr(obj, pptr, type) -#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_Python_NewPointerObj(NULL, ptr, type, 0) - -/* for C++ member pointers, ie, member methods */ -#define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_Python_ConvertPacked(obj, ptr, sz, ty) -#define SWIG_NewMemberObj(ptr, sz, type) SWIG_Python_NewPackedObj(ptr, sz, type) - - -/* Runtime API */ - -#define SWIG_GetModule(clientdata) SWIG_Python_GetModule(clientdata) -#define SWIG_SetModule(clientdata, pointer) SWIG_Python_SetModule(pointer) -#define SWIG_NewClientData(obj) SwigPyClientData_New(obj) - -#define SWIG_SetErrorObj SWIG_Python_SetErrorObj -#define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg -#define SWIG_ErrorType(code) SWIG_Python_ErrorType(code) -#define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg) -#define SWIG_fail goto fail - - -/* Runtime API implementation */ - -/* Error manipulation */ - -SWIGINTERN void -SWIG_Python_SetErrorObj(PyObject *errtype, PyObject *obj) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetObject(errtype, obj); - Py_DECREF(obj); - SWIG_PYTHON_THREAD_END_BLOCK; -} - -SWIGINTERN void -SWIG_Python_SetErrorMsg(PyObject *errtype, const char *msg) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(errtype, msg); - SWIG_PYTHON_THREAD_END_BLOCK; -} - -#define SWIG_Python_Raise(obj, type, desc) SWIG_Python_SetErrorObj(SWIG_Python_ExceptionType(desc), obj) - -/* Set a constant value */ - -#if defined(SWIGPYTHON_BUILTIN) - -SWIGINTERN void -SwigPyBuiltin_AddPublicSymbol(PyObject *seq, const char *key) { - PyObject *s = PyString_InternFromString(key); - PyList_Append(seq, s); - Py_DECREF(s); -} - -SWIGINTERN void -SWIG_Python_SetConstant(PyObject *d, PyObject *public_interface, const char *name, PyObject *obj) { -#if PY_VERSION_HEX < 0x02030000 - PyDict_SetItemString(d, (char *)name, obj); -#else - PyDict_SetItemString(d, name, obj); -#endif - Py_DECREF(obj); - if (public_interface) - SwigPyBuiltin_AddPublicSymbol(public_interface, name); -} - -#else - -SWIGINTERN void -SWIG_Python_SetConstant(PyObject *d, const char *name, PyObject *obj) { -#if PY_VERSION_HEX < 0x02030000 - PyDict_SetItemString(d, (char *)name, obj); -#else - PyDict_SetItemString(d, name, obj); -#endif - Py_DECREF(obj); -} - -#endif - -/* Append a value to the result obj */ - -SWIGINTERN PyObject* -SWIG_Python_AppendOutput(PyObject* result, PyObject* obj) { -#if !defined(SWIG_PYTHON_OUTPUT_TUPLE) - if (!result) { - result = obj; - } else if (result == Py_None) { - Py_DECREF(result); - result = obj; - } else { - if (!PyList_Check(result)) { - PyObject *o2 = result; - result = PyList_New(1); - PyList_SetItem(result, 0, o2); - } - PyList_Append(result,obj); - Py_DECREF(obj); - } - return result; -#else - PyObject* o2; - PyObject* o3; - if (!result) { - result = obj; - } else if (result == Py_None) { - Py_DECREF(result); - result = obj; - } else { - if (!PyTuple_Check(result)) { - o2 = result; - result = PyTuple_New(1); - PyTuple_SET_ITEM(result, 0, o2); - } - o3 = PyTuple_New(1); - PyTuple_SET_ITEM(o3, 0, obj); - o2 = result; - result = PySequence_Concat(o2, o3); - Py_DECREF(o2); - Py_DECREF(o3); - } - return result; -#endif -} - -/* Unpack the argument tuple */ - -SWIGINTERN int -SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs) -{ - if (!args) { - if (!min && !max) { - return 1; - } else { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", - name, (min == max ? "" : "at least "), (int)min); - return 0; - } - } - if (!PyTuple_Check(args)) { - if (min <= 1 && max >= 1) { - register int i; - objs[0] = args; - for (i = 1; i < max; ++i) { - objs[i] = 0; - } - return 2; - } - PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple"); - return 0; - } else { - register Py_ssize_t l = PyTuple_GET_SIZE(args); - if (l < min) { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", - name, (min == max ? "" : "at least "), (int)min, (int)l); - return 0; - } else if (l > max) { - PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", - name, (min == max ? "" : "at most "), (int)max, (int)l); - return 0; - } else { - register int i; - for (i = 0; i < l; ++i) { - objs[i] = PyTuple_GET_ITEM(args, i); - } - for (; l < max; ++l) { - objs[l] = 0; - } - return i + 1; - } - } -} - -/* A functor is a function object with one single object argument */ -#if PY_VERSION_HEX >= 0x02020000 -#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunctionObjArgs(functor, obj, NULL); -#else -#define SWIG_Python_CallFunctor(functor, obj) PyObject_CallFunction(functor, "O", obj); -#endif - -/* - Helper for static pointer initialization for both C and C++ code, for example - static PyObject *SWIG_STATIC_POINTER(MyVar) = NewSomething(...); -*/ -#ifdef __cplusplus -#define SWIG_STATIC_POINTER(var) var -#else -#define SWIG_STATIC_POINTER(var) var = 0; if (!var) var -#endif - -/* ----------------------------------------------------------------------------- - * Pointer declarations - * ----------------------------------------------------------------------------- */ - -/* Flags for new pointer objects */ -#define SWIG_POINTER_NOSHADOW (SWIG_POINTER_OWN << 1) -#define SWIG_POINTER_NEW (SWIG_POINTER_NOSHADOW | SWIG_POINTER_OWN) - -#define SWIG_POINTER_IMPLICIT_CONV (SWIG_POINTER_DISOWN << 1) - -#define SWIG_BUILTIN_TP_INIT (SWIG_POINTER_OWN << 2) -#define SWIG_BUILTIN_INIT (SWIG_BUILTIN_TP_INIT | SWIG_POINTER_OWN) - -#ifdef __cplusplus -extern "C" { -#endif - -/* How to access Py_None */ -#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# ifndef SWIG_PYTHON_NO_BUILD_NONE -# ifndef SWIG_PYTHON_BUILD_NONE -# define SWIG_PYTHON_BUILD_NONE -# endif -# endif -#endif - -#ifdef SWIG_PYTHON_BUILD_NONE -# ifdef Py_None -# undef Py_None -# define Py_None SWIG_Py_None() -# endif -SWIGRUNTIMEINLINE PyObject * -_SWIG_Py_None(void) -{ - PyObject *none = Py_BuildValue((char*)""); - Py_DECREF(none); - return none; -} -SWIGRUNTIME PyObject * -SWIG_Py_None(void) -{ - static PyObject *SWIG_STATIC_POINTER(none) = _SWIG_Py_None(); - return none; -} -#endif - -/* The python void return value */ - -SWIGRUNTIMEINLINE PyObject * -SWIG_Py_Void(void) -{ - PyObject *none = Py_None; - Py_INCREF(none); - return none; -} - -/* SwigPyClientData */ - -typedef struct { - PyObject *klass; - PyObject *newraw; - PyObject *newargs; - PyObject *destroy; - int delargs; - int implicitconv; - PyTypeObject *pytype; -} SwigPyClientData; - -SWIGRUNTIMEINLINE int -SWIG_Python_CheckImplicit(swig_type_info *ty) -{ - SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; - return data ? data->implicitconv : 0; -} - -SWIGRUNTIMEINLINE PyObject * -SWIG_Python_ExceptionType(swig_type_info *desc) { - SwigPyClientData *data = desc ? (SwigPyClientData *) desc->clientdata : 0; - PyObject *klass = data ? data->klass : 0; - return (klass ? klass : PyExc_RuntimeError); -} - - -SWIGRUNTIME SwigPyClientData * -SwigPyClientData_New(PyObject* obj) -{ - if (!obj) { - return 0; - } else { - SwigPyClientData *data = (SwigPyClientData *)malloc(sizeof(SwigPyClientData)); - /* the klass element */ - data->klass = obj; - Py_INCREF(data->klass); - /* the newraw method and newargs arguments used to create a new raw instance */ - if (PyClass_Check(obj)) { - data->newraw = 0; - data->newargs = obj; - Py_INCREF(obj); - } else { -#if (PY_VERSION_HEX < 0x02020000) - data->newraw = 0; -#else - data->newraw = PyObject_GetAttrString(data->klass, (char *)"__new__"); -#endif - if (data->newraw) { - Py_INCREF(data->newraw); - data->newargs = PyTuple_New(1); - PyTuple_SetItem(data->newargs, 0, obj); - } else { - data->newargs = obj; - } - Py_INCREF(data->newargs); - } - /* the destroy method, aka as the C++ delete method */ - data->destroy = PyObject_GetAttrString(data->klass, (char *)"__swig_destroy__"); - if (PyErr_Occurred()) { - PyErr_Clear(); - data->destroy = 0; - } - if (data->destroy) { - int flags; - Py_INCREF(data->destroy); - flags = PyCFunction_GET_FLAGS(data->destroy); -#ifdef METH_O - data->delargs = !(flags & (METH_O)); -#else - data->delargs = 0; -#endif - } else { - data->delargs = 0; - } - data->implicitconv = 0; - data->pytype = 0; - return data; - } -} - -SWIGRUNTIME void -SwigPyClientData_Del(SwigPyClientData *data) { - Py_XDECREF(data->newraw); - Py_XDECREF(data->newargs); - Py_XDECREF(data->destroy); -} - -/* =============== SwigPyObject =====================*/ - -typedef struct { - PyObject_HEAD - void *ptr; - swig_type_info *ty; - int own; - PyObject *next; -#ifdef SWIGPYTHON_BUILTIN - PyObject *dict; -#endif -} SwigPyObject; - -SWIGRUNTIME PyObject * -SwigPyObject_long(SwigPyObject *v) -{ - return PyLong_FromVoidPtr(v->ptr); -} - -SWIGRUNTIME PyObject * -SwigPyObject_format(const char* fmt, SwigPyObject *v) -{ - PyObject *res = NULL; - PyObject *args = PyTuple_New(1); - if (args) { - if (PyTuple_SetItem(args, 0, SwigPyObject_long(v)) == 0) { - PyObject *ofmt = SWIG_Python_str_FromChar(fmt); - if (ofmt) { -#if PY_VERSION_HEX >= 0x03000000 - res = PyUnicode_Format(ofmt,args); -#else - res = PyString_Format(ofmt,args); -#endif - Py_DECREF(ofmt); - } - Py_DECREF(args); - } - } - return res; -} - -SWIGRUNTIME PyObject * -SwigPyObject_oct(SwigPyObject *v) -{ - return SwigPyObject_format("%o",v); -} - -SWIGRUNTIME PyObject * -SwigPyObject_hex(SwigPyObject *v) -{ - return SwigPyObject_format("%x",v); -} - -SWIGRUNTIME PyObject * -#ifdef METH_NOARGS -SwigPyObject_repr(SwigPyObject *v) -#else -SwigPyObject_repr(SwigPyObject *v, PyObject *args) -#endif -{ - const char *name = SWIG_TypePrettyName(v->ty); - PyObject *repr = SWIG_Python_str_FromFormat("", (name ? name : "unknown"), (void *)v); - if (v->next) { -# ifdef METH_NOARGS - PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next); -# else - PyObject *nrep = SwigPyObject_repr((SwigPyObject *)v->next, args); -# endif -# if PY_VERSION_HEX >= 0x03000000 - PyObject *joined = PyUnicode_Concat(repr, nrep); - Py_DecRef(repr); - Py_DecRef(nrep); - repr = joined; -# else - PyString_ConcatAndDel(&repr,nrep); -# endif - } - return repr; -} - -SWIGRUNTIME int -SwigPyObject_compare(SwigPyObject *v, SwigPyObject *w) -{ - void *i = v->ptr; - void *j = w->ptr; - return (i < j) ? -1 : ((i > j) ? 1 : 0); -} - -/* Added for Python 3.x, would it also be useful for Python 2.x? */ -SWIGRUNTIME PyObject* -SwigPyObject_richcompare(SwigPyObject *v, SwigPyObject *w, int op) -{ - PyObject* res; - if( op != Py_EQ && op != Py_NE ) { - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; - } - res = PyBool_FromLong( (SwigPyObject_compare(v, w)==0) == (op == Py_EQ) ? 1 : 0); - return res; -} - - -SWIGRUNTIME PyTypeObject* SwigPyObject_TypeOnce(void); - -#ifdef SWIGPYTHON_BUILTIN -static swig_type_info *SwigPyObject_stype = 0; -SWIGRUNTIME PyTypeObject* -SwigPyObject_type(void) { - SwigPyClientData *cd; - assert(SwigPyObject_stype); - cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; - assert(cd); - assert(cd->pytype); - return cd->pytype; -} -#else -SWIGRUNTIME PyTypeObject* -SwigPyObject_type(void) { - static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyObject_TypeOnce(); - return type; -} -#endif - -SWIGRUNTIMEINLINE int -SwigPyObject_Check(PyObject *op) { -#ifdef SWIGPYTHON_BUILTIN - PyTypeObject *target_tp = SwigPyObject_type(); - if (PyType_IsSubtype(op->ob_type, target_tp)) - return 1; - return (strcmp(op->ob_type->tp_name, "SwigPyObject") == 0); -#else - return (Py_TYPE(op) == SwigPyObject_type()) - || (strcmp(Py_TYPE(op)->tp_name,"SwigPyObject") == 0); -#endif -} - -SWIGRUNTIME PyObject * -SwigPyObject_New(void *ptr, swig_type_info *ty, int own); - -SWIGRUNTIME void -SwigPyObject_dealloc(PyObject *v) -{ - SwigPyObject *sobj = (SwigPyObject *) v; - PyObject *next = sobj->next; - if (sobj->own == SWIG_POINTER_OWN) { - swig_type_info *ty = sobj->ty; - SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; - PyObject *destroy = data ? data->destroy : 0; - if (destroy) { - /* destroy is always a VARARGS method */ - PyObject *res; - if (data->delargs) { - /* we need to create a temporary object to carry the destroy operation */ - PyObject *tmp = SwigPyObject_New(sobj->ptr, ty, 0); - res = SWIG_Python_CallFunctor(destroy, tmp); - Py_DECREF(tmp); - } else { - PyCFunction meth = PyCFunction_GET_FUNCTION(destroy); - PyObject *mself = PyCFunction_GET_SELF(destroy); - res = ((*meth)(mself, v)); - } - Py_XDECREF(res); - } -#if !defined(SWIG_PYTHON_SILENT_MEMLEAK) - else { - const char *name = SWIG_TypePrettyName(ty); - printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown")); - } -#endif - } - Py_XDECREF(next); - PyObject_DEL(v); -} - -SWIGRUNTIME PyObject* -SwigPyObject_append(PyObject* v, PyObject* next) -{ - SwigPyObject *sobj = (SwigPyObject *) v; -#ifndef METH_O - PyObject *tmp = 0; - if (!PyArg_ParseTuple(next,(char *)"O:append", &tmp)) return NULL; - next = tmp; -#endif - if (!SwigPyObject_Check(next)) { - return NULL; - } - sobj->next = next; - Py_INCREF(next); - return SWIG_Py_Void(); -} - -SWIGRUNTIME PyObject* -#ifdef METH_NOARGS -SwigPyObject_next(PyObject* v) -#else -SwigPyObject_next(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -#endif -{ - SwigPyObject *sobj = (SwigPyObject *) v; - if (sobj->next) { - Py_INCREF(sobj->next); - return sobj->next; - } else { - return SWIG_Py_Void(); - } -} - -SWIGINTERN PyObject* -#ifdef METH_NOARGS -SwigPyObject_disown(PyObject *v) -#else -SwigPyObject_disown(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -#endif -{ - SwigPyObject *sobj = (SwigPyObject *)v; - sobj->own = 0; - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject* -#ifdef METH_NOARGS -SwigPyObject_acquire(PyObject *v) -#else -SwigPyObject_acquire(PyObject* v, PyObject *SWIGUNUSEDPARM(args)) -#endif -{ - SwigPyObject *sobj = (SwigPyObject *)v; - sobj->own = SWIG_POINTER_OWN; - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject* -SwigPyObject_own(PyObject *v, PyObject *args) -{ - PyObject *val = 0; -#if (PY_VERSION_HEX < 0x02020000) - if (!PyArg_ParseTuple(args,(char *)"|O:own",&val)) -#elif (PY_VERSION_HEX < 0x02050000) - if (!PyArg_UnpackTuple(args, (char *)"own", 0, 1, &val)) -#else - if (!PyArg_UnpackTuple(args, "own", 0, 1, &val)) -#endif - { - return NULL; - } - else - { - SwigPyObject *sobj = (SwigPyObject *)v; - PyObject *obj = PyBool_FromLong(sobj->own); - if (val) { -#ifdef METH_NOARGS - if (PyObject_IsTrue(val)) { - SwigPyObject_acquire(v); - } else { - SwigPyObject_disown(v); - } -#else - if (PyObject_IsTrue(val)) { - SwigPyObject_acquire(v,args); - } else { - SwigPyObject_disown(v,args); - } -#endif - } - return obj; - } -} - -#ifdef METH_O -static PyMethodDef -swigobject_methods[] = { - {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_NOARGS, (char *)"releases ownership of the pointer"}, - {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_NOARGS, (char *)"acquires ownership of the pointer"}, - {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, - {(char *)"append", (PyCFunction)SwigPyObject_append, METH_O, (char *)"appends another 'this' object"}, - {(char *)"next", (PyCFunction)SwigPyObject_next, METH_NOARGS, (char *)"returns the next 'this' object"}, - {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_NOARGS, (char *)"returns object representation"}, - {0, 0, 0, 0} -}; -#else -static PyMethodDef -swigobject_methods[] = { - {(char *)"disown", (PyCFunction)SwigPyObject_disown, METH_VARARGS, (char *)"releases ownership of the pointer"}, - {(char *)"acquire", (PyCFunction)SwigPyObject_acquire, METH_VARARGS, (char *)"aquires ownership of the pointer"}, - {(char *)"own", (PyCFunction)SwigPyObject_own, METH_VARARGS, (char *)"returns/sets ownership of the pointer"}, - {(char *)"append", (PyCFunction)SwigPyObject_append, METH_VARARGS, (char *)"appends another 'this' object"}, - {(char *)"next", (PyCFunction)SwigPyObject_next, METH_VARARGS, (char *)"returns the next 'this' object"}, - {(char *)"__repr__",(PyCFunction)SwigPyObject_repr, METH_VARARGS, (char *)"returns object representation"}, - {0, 0, 0, 0} -}; -#endif - -#if PY_VERSION_HEX < 0x02020000 -SWIGINTERN PyObject * -SwigPyObject_getattr(SwigPyObject *sobj,char *name) -{ - return Py_FindMethod(swigobject_methods, (PyObject *)sobj, name); -} -#endif - -SWIGRUNTIME PyTypeObject* -SwigPyObject_TypeOnce(void) { - static char swigobject_doc[] = "Swig object carries a C/C++ instance pointer"; - - static PyNumberMethods SwigPyObject_as_number = { - (binaryfunc)0, /*nb_add*/ - (binaryfunc)0, /*nb_subtract*/ - (binaryfunc)0, /*nb_multiply*/ - /* nb_divide removed in Python 3 */ -#if PY_VERSION_HEX < 0x03000000 - (binaryfunc)0, /*nb_divide*/ -#endif - (binaryfunc)0, /*nb_remainder*/ - (binaryfunc)0, /*nb_divmod*/ - (ternaryfunc)0,/*nb_power*/ - (unaryfunc)0, /*nb_negative*/ - (unaryfunc)0, /*nb_positive*/ - (unaryfunc)0, /*nb_absolute*/ - (inquiry)0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ -#if PY_VERSION_HEX < 0x03000000 - 0, /*nb_coerce*/ -#endif - (unaryfunc)SwigPyObject_long, /*nb_int*/ -#if PY_VERSION_HEX < 0x03000000 - (unaryfunc)SwigPyObject_long, /*nb_long*/ -#else - 0, /*nb_reserved*/ -#endif - (unaryfunc)0, /*nb_float*/ -#if PY_VERSION_HEX < 0x03000000 - (unaryfunc)SwigPyObject_oct, /*nb_oct*/ - (unaryfunc)SwigPyObject_hex, /*nb_hex*/ -#endif -#if PY_VERSION_HEX >= 0x03000000 /* 3.0 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index, nb_inplace_divide removed */ -#elif PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */ -#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ -#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */ - 0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */ -#endif - }; - - static PyTypeObject swigpyobject_type; - static int type_init = 0; - if (!type_init) { - const PyTypeObject tmp = { - /* PyObject header changed in Python 3 */ -#if PY_VERSION_HEX >= 0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ -#endif - (char *)"SwigPyObject", /* tp_name */ - sizeof(SwigPyObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)SwigPyObject_dealloc, /* tp_dealloc */ - 0, /* tp_print */ -#if PY_VERSION_HEX < 0x02020000 - (getattrfunc)SwigPyObject_getattr, /* tp_getattr */ -#else - (getattrfunc)0, /* tp_getattr */ -#endif - (setattrfunc)0, /* tp_setattr */ -#if PY_VERSION_HEX >= 0x03000000 - 0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */ -#else - (cmpfunc)SwigPyObject_compare, /* tp_compare */ -#endif - (reprfunc)SwigPyObject_repr, /* tp_repr */ - &SwigPyObject_as_number, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - (hashfunc)0, /* tp_hash */ - (ternaryfunc)0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - swigobject_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - (richcmpfunc)SwigPyObject_richcompare,/* tp_richcompare */ - 0, /* tp_weaklistoffset */ -#if PY_VERSION_HEX >= 0x02020000 - 0, /* tp_iter */ - 0, /* tp_iternext */ - swigobject_methods, /* 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 */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#endif -#if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version */ -#endif -#ifdef COUNT_ALLOCS - 0,0,0,0 /* tp_alloc -> tp_next */ -#endif - }; - swigpyobject_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 - swigpyobject_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&swigpyobject_type) < 0) - return NULL; -#endif - } - return &swigpyobject_type; -} - -SWIGRUNTIME PyObject * -SwigPyObject_New(void *ptr, swig_type_info *ty, int own) -{ - SwigPyObject *sobj = PyObject_NEW(SwigPyObject, SwigPyObject_type()); - if (sobj) { - sobj->ptr = ptr; - sobj->ty = ty; - sobj->own = own; - sobj->next = 0; - } - return (PyObject *)sobj; -} - -/* ----------------------------------------------------------------------------- - * Implements a simple Swig Packed type, and use it instead of string - * ----------------------------------------------------------------------------- */ - -typedef struct { - PyObject_HEAD - void *pack; - swig_type_info *ty; - size_t size; -} SwigPyPacked; - -SWIGRUNTIME int -SwigPyPacked_print(SwigPyPacked *v, FILE *fp, int SWIGUNUSEDPARM(flags)) -{ - char result[SWIG_BUFFER_SIZE]; - fputs("pack, v->size, 0, sizeof(result))) { - fputs("at ", fp); - fputs(result, fp); - } - fputs(v->ty->name,fp); - fputs(">", fp); - return 0; -} - -SWIGRUNTIME PyObject * -SwigPyPacked_repr(SwigPyPacked *v) -{ - char result[SWIG_BUFFER_SIZE]; - if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))) { - return SWIG_Python_str_FromFormat("", result, v->ty->name); - } else { - return SWIG_Python_str_FromFormat("", v->ty->name); - } -} - -SWIGRUNTIME PyObject * -SwigPyPacked_str(SwigPyPacked *v) -{ - char result[SWIG_BUFFER_SIZE]; - if (SWIG_PackDataName(result, v->pack, v->size, 0, sizeof(result))){ - return SWIG_Python_str_FromFormat("%s%s", result, v->ty->name); - } else { - return SWIG_Python_str_FromChar(v->ty->name); - } -} - -SWIGRUNTIME int -SwigPyPacked_compare(SwigPyPacked *v, SwigPyPacked *w) -{ - size_t i = v->size; - size_t j = w->size; - int s = (i < j) ? -1 : ((i > j) ? 1 : 0); - return s ? s : strncmp((char *)v->pack, (char *)w->pack, 2*v->size); -} - -SWIGRUNTIME PyTypeObject* SwigPyPacked_TypeOnce(void); - -SWIGRUNTIME PyTypeObject* -SwigPyPacked_type(void) { - static PyTypeObject *SWIG_STATIC_POINTER(type) = SwigPyPacked_TypeOnce(); - return type; -} - -SWIGRUNTIMEINLINE int -SwigPyPacked_Check(PyObject *op) { - return ((op)->ob_type == SwigPyPacked_TypeOnce()) - || (strcmp((op)->ob_type->tp_name,"SwigPyPacked") == 0); -} - -SWIGRUNTIME void -SwigPyPacked_dealloc(PyObject *v) -{ - if (SwigPyPacked_Check(v)) { - SwigPyPacked *sobj = (SwigPyPacked *) v; - free(sobj->pack); - } - PyObject_DEL(v); -} - -SWIGRUNTIME PyTypeObject* -SwigPyPacked_TypeOnce(void) { - static char swigpacked_doc[] = "Swig object carries a C/C++ instance pointer"; - static PyTypeObject swigpypacked_type; - static int type_init = 0; - if (!type_init) { - const PyTypeObject tmp = { - /* PyObject header changed in Python 3 */ -#if PY_VERSION_HEX>=0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ -#endif - (char *)"SwigPyPacked", /* tp_name */ - sizeof(SwigPyPacked), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)SwigPyPacked_dealloc, /* tp_dealloc */ - (printfunc)SwigPyPacked_print, /* tp_print */ - (getattrfunc)0, /* tp_getattr */ - (setattrfunc)0, /* tp_setattr */ -#if PY_VERSION_HEX>=0x03000000 - 0, /* tp_reserved in 3.0.1 */ -#else - (cmpfunc)SwigPyPacked_compare, /* tp_compare */ -#endif - (reprfunc)SwigPyPacked_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - (hashfunc)0, /* tp_hash */ - (ternaryfunc)0, /* tp_call */ - (reprfunc)SwigPyPacked_str, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - swigpacked_doc, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ -#if PY_VERSION_HEX >= 0x02020000 - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* 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 */ - 0, /* tp_init */ - 0, /* tp_alloc */ - 0, /* tp_new */ - 0, /* tp_free */ - 0, /* tp_is_gc */ - 0, /* tp_bases */ - 0, /* tp_mro */ - 0, /* tp_cache */ - 0, /* tp_subclasses */ - 0, /* tp_weaklist */ -#endif -#if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version */ -#endif -#ifdef COUNT_ALLOCS - 0,0,0,0 /* tp_alloc -> tp_next */ -#endif - }; - swigpypacked_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 - swigpypacked_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&swigpypacked_type) < 0) - return NULL; -#endif - } - return &swigpypacked_type; -} - -SWIGRUNTIME PyObject * -SwigPyPacked_New(void *ptr, size_t size, swig_type_info *ty) -{ - SwigPyPacked *sobj = PyObject_NEW(SwigPyPacked, SwigPyPacked_type()); - if (sobj) { - void *pack = malloc(size); - if (pack) { - memcpy(pack, ptr, size); - sobj->pack = pack; - sobj->ty = ty; - sobj->size = size; - } else { - PyObject_DEL((PyObject *) sobj); - sobj = 0; - } - } - return (PyObject *) sobj; -} - -SWIGRUNTIME swig_type_info * -SwigPyPacked_UnpackData(PyObject *obj, void *ptr, size_t size) -{ - if (SwigPyPacked_Check(obj)) { - SwigPyPacked *sobj = (SwigPyPacked *)obj; - if (sobj->size != size) return 0; - memcpy(ptr, sobj->pack, size); - return sobj->ty; - } else { - return 0; - } -} - -/* ----------------------------------------------------------------------------- - * pointers/data manipulation - * ----------------------------------------------------------------------------- */ - -SWIGRUNTIMEINLINE PyObject * -_SWIG_This(void) -{ - return SWIG_Python_str_FromChar("this"); -} - -static PyObject *swig_this = NULL; - -SWIGRUNTIME PyObject * -SWIG_This(void) -{ - if (swig_this == NULL) - swig_this = _SWIG_This(); - return swig_this; -} - -/* #define SWIG_PYTHON_SLOW_GETSET_THIS */ - -/* TODO: I don't know how to implement the fast getset in Python 3 right now */ -#if PY_VERSION_HEX>=0x03000000 -#define SWIG_PYTHON_SLOW_GETSET_THIS -#endif - -SWIGRUNTIME SwigPyObject * -SWIG_Python_GetSwigThis(PyObject *pyobj) -{ - PyObject *obj; - - if (SwigPyObject_Check(pyobj)) - return (SwigPyObject *) pyobj; - -#ifdef SWIGPYTHON_BUILTIN - (void)obj; -# ifdef PyWeakref_CheckProxy - if (PyWeakref_CheckProxy(pyobj)) { - pyobj = PyWeakref_GET_OBJECT(pyobj); - if (pyobj && SwigPyObject_Check(pyobj)) - return (SwigPyObject*) pyobj; - } -# endif - return NULL; -#else - - obj = 0; - -#if (!defined(SWIG_PYTHON_SLOW_GETSET_THIS) && (PY_VERSION_HEX >= 0x02030000)) - if (PyInstance_Check(pyobj)) { - obj = _PyInstance_Lookup(pyobj, SWIG_This()); - } else { - PyObject **dictptr = _PyObject_GetDictPtr(pyobj); - if (dictptr != NULL) { - PyObject *dict = *dictptr; - obj = dict ? PyDict_GetItem(dict, SWIG_This()) : 0; - } else { -#ifdef PyWeakref_CheckProxy - if (PyWeakref_CheckProxy(pyobj)) { - PyObject *wobj = PyWeakref_GET_OBJECT(pyobj); - return wobj ? SWIG_Python_GetSwigThis(wobj) : 0; - } -#endif - obj = PyObject_GetAttr(pyobj,SWIG_This()); - if (obj) { - Py_DECREF(obj); - } else { - if (PyErr_Occurred()) PyErr_Clear(); - return 0; - } - } - } -#else - obj = PyObject_GetAttr(pyobj,SWIG_This()); - if (obj) { - Py_DECREF(obj); - } else { - if (PyErr_Occurred()) PyErr_Clear(); - return 0; - } -#endif - if (obj && !SwigPyObject_Check(obj)) { - /* a PyObject is called 'this', try to get the 'real this' - SwigPyObject from it */ - return SWIG_Python_GetSwigThis(obj); - } - return (SwigPyObject *)obj; -#endif -} - -/* Acquire a pointer value */ - -SWIGRUNTIME int -SWIG_Python_AcquirePtr(PyObject *obj, int own) { - if (own == SWIG_POINTER_OWN) { - SwigPyObject *sobj = SWIG_Python_GetSwigThis(obj); - if (sobj) { - int oldown = sobj->own; - sobj->own = own; - return oldown; - } - } - return 0; -} - -/* Convert a pointer value */ - -SWIGRUNTIME int -SWIG_Python_ConvertPtrAndOwn(PyObject *obj, void **ptr, swig_type_info *ty, int flags, int *own) { - int res; - SwigPyObject *sobj; - int implicit_conv = (flags & SWIG_POINTER_IMPLICIT_CONV) != 0; - - if (!obj) - return SWIG_ERROR; - if (obj == Py_None && !implicit_conv) { - if (ptr) - *ptr = 0; - return SWIG_OK; - } - - res = SWIG_ERROR; - - sobj = SWIG_Python_GetSwigThis(obj); - if (own) - *own = 0; - while (sobj) { - void *vptr = sobj->ptr; - if (ty) { - swig_type_info *to = sobj->ty; - if (to == ty) { - /* no type cast needed */ - if (ptr) *ptr = vptr; - break; - } else { - swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); - if (!tc) { - sobj = (SwigPyObject *)sobj->next; - } else { - if (ptr) { - int newmemory = 0; - *ptr = SWIG_TypeCast(tc,vptr,&newmemory); - if (newmemory == SWIG_CAST_NEW_MEMORY) { - assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */ - if (own) - *own = *own | SWIG_CAST_NEW_MEMORY; - } - } - break; - } - } - } else { - if (ptr) *ptr = vptr; - break; - } - } - if (sobj) { - if (own) - *own = *own | sobj->own; - if (flags & SWIG_POINTER_DISOWN) { - sobj->own = 0; - } - res = SWIG_OK; - } else { - if (implicit_conv) { - SwigPyClientData *data = ty ? (SwigPyClientData *) ty->clientdata : 0; - if (data && !data->implicitconv) { - PyObject *klass = data->klass; - if (klass) { - PyObject *impconv; - data->implicitconv = 1; /* avoid recursion and call 'explicit' constructors*/ - impconv = SWIG_Python_CallFunctor(klass, obj); - data->implicitconv = 0; - if (PyErr_Occurred()) { - PyErr_Clear(); - impconv = 0; - } - if (impconv) { - SwigPyObject *iobj = SWIG_Python_GetSwigThis(impconv); - if (iobj) { - void *vptr; - res = SWIG_Python_ConvertPtrAndOwn((PyObject*)iobj, &vptr, ty, 0, 0); - if (SWIG_IsOK(res)) { - if (ptr) { - *ptr = vptr; - /* transfer the ownership to 'ptr' */ - iobj->own = 0; - res = SWIG_AddCast(res); - res = SWIG_AddNewMask(res); - } else { - res = SWIG_AddCast(res); - } - } - } - Py_DECREF(impconv); - } - } - } - } - if (!SWIG_IsOK(res) && obj == Py_None) { - if (ptr) - *ptr = 0; - if (PyErr_Occurred()) - PyErr_Clear(); - res = SWIG_OK; - } - } - return res; -} - -/* Convert a function ptr value */ - -SWIGRUNTIME int -SWIG_Python_ConvertFunctionPtr(PyObject *obj, void **ptr, swig_type_info *ty) { - if (!PyCFunction_Check(obj)) { - return SWIG_ConvertPtr(obj, ptr, ty, 0); - } else { - void *vptr = 0; - - /* here we get the method pointer for callbacks */ - const char *doc = (((PyCFunctionObject *)obj) -> m_ml -> ml_doc); - const char *desc = doc ? strstr(doc, "swig_ptr: ") : 0; - if (desc) - desc = ty ? SWIG_UnpackVoidPtr(desc + 10, &vptr, ty->name) : 0; - if (!desc) - return SWIG_ERROR; - if (ty) { - swig_cast_info *tc = SWIG_TypeCheck(desc,ty); - if (tc) { - int newmemory = 0; - *ptr = SWIG_TypeCast(tc,vptr,&newmemory); - assert(!newmemory); /* newmemory handling not yet implemented */ - } else { - return SWIG_ERROR; - } - } else { - *ptr = vptr; - } - return SWIG_OK; - } -} - -/* Convert a packed value value */ - -SWIGRUNTIME int -SWIG_Python_ConvertPacked(PyObject *obj, void *ptr, size_t sz, swig_type_info *ty) { - swig_type_info *to = SwigPyPacked_UnpackData(obj, ptr, sz); - if (!to) return SWIG_ERROR; - if (ty) { - if (to != ty) { - /* check type cast? */ - swig_cast_info *tc = SWIG_TypeCheck(to->name,ty); - if (!tc) return SWIG_ERROR; - } - } - return SWIG_OK; -} - -/* ----------------------------------------------------------------------------- - * Create a new pointer object - * ----------------------------------------------------------------------------- */ - -/* - Create a new instance object, without calling __init__, and set the - 'this' attribute. -*/ - -SWIGRUNTIME PyObject* -SWIG_Python_NewShadowInstance(SwigPyClientData *data, PyObject *swig_this) -{ -#if (PY_VERSION_HEX >= 0x02020000) - PyObject *inst = 0; - PyObject *newraw = data->newraw; - if (newraw) { - inst = PyObject_Call(newraw, data->newargs, NULL); - if (inst) { -#if !defined(SWIG_PYTHON_SLOW_GETSET_THIS) - PyObject **dictptr = _PyObject_GetDictPtr(inst); - if (dictptr != NULL) { - PyObject *dict = *dictptr; - if (dict == NULL) { - dict = PyDict_New(); - *dictptr = dict; - PyDict_SetItem(dict, SWIG_This(), swig_this); - } - } -#else - PyObject *key = SWIG_This(); - PyObject_SetAttr(inst, key, swig_this); -#endif - } - } else { -#if PY_VERSION_HEX >= 0x03000000 - inst = PyBaseObject_Type.tp_new((PyTypeObject*) data->newargs, Py_None, Py_None); - if (inst) { - PyObject_SetAttr(inst, SWIG_This(), swig_this); - Py_TYPE(inst)->tp_flags &= ~Py_TPFLAGS_VALID_VERSION_TAG; - } -#else - PyObject *dict = PyDict_New(); - if (dict) { - PyDict_SetItem(dict, SWIG_This(), swig_this); - inst = PyInstance_NewRaw(data->newargs, dict); - Py_DECREF(dict); - } -#endif - } - return inst; -#else -#if (PY_VERSION_HEX >= 0x02010000) - PyObject *inst = 0; - PyObject *dict = PyDict_New(); - if (dict) { - PyDict_SetItem(dict, SWIG_This(), swig_this); - inst = PyInstance_NewRaw(data->newargs, dict); - Py_DECREF(dict); - } - return (PyObject *) inst; -#else - PyInstanceObject *inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type); - if (inst == NULL) { - return NULL; - } - inst->in_class = (PyClassObject *)data->newargs; - Py_INCREF(inst->in_class); - inst->in_dict = PyDict_New(); - if (inst->in_dict == NULL) { - Py_DECREF(inst); - return NULL; - } -#ifdef Py_TPFLAGS_HAVE_WEAKREFS - inst->in_weakreflist = NULL; -#endif -#ifdef Py_TPFLAGS_GC - PyObject_GC_Init(inst); -#endif - PyDict_SetItem(inst->in_dict, SWIG_This(), swig_this); - return (PyObject *) inst; -#endif -#endif -} - -SWIGRUNTIME void -SWIG_Python_SetSwigThis(PyObject *inst, PyObject *swig_this) -{ - PyObject *dict; -#if (PY_VERSION_HEX >= 0x02020000) && !defined(SWIG_PYTHON_SLOW_GETSET_THIS) - PyObject **dictptr = _PyObject_GetDictPtr(inst); - if (dictptr != NULL) { - dict = *dictptr; - if (dict == NULL) { - dict = PyDict_New(); - *dictptr = dict; - } - PyDict_SetItem(dict, SWIG_This(), swig_this); - return; - } -#endif - dict = PyObject_GetAttrString(inst, (char*)"__dict__"); - PyDict_SetItem(dict, SWIG_This(), swig_this); - Py_DECREF(dict); -} - - -SWIGINTERN PyObject * -SWIG_Python_InitShadowInstance(PyObject *args) { - PyObject *obj[2]; - if (!SWIG_Python_UnpackTuple(args, "swiginit", 2, 2, obj)) { - return NULL; - } else { - SwigPyObject *sthis = SWIG_Python_GetSwigThis(obj[0]); - if (sthis) { - SwigPyObject_append((PyObject*) sthis, obj[1]); - } else { - SWIG_Python_SetSwigThis(obj[0], obj[1]); - } - return SWIG_Py_Void(); - } -} - -/* Create a new pointer object */ - -SWIGRUNTIME PyObject * -SWIG_Python_NewPointerObj(PyObject *self, void *ptr, swig_type_info *type, int flags) { - SwigPyClientData *clientdata; - PyObject * robj; - int own; - - if (!ptr) - return SWIG_Py_Void(); - - clientdata = type ? (SwigPyClientData *)(type->clientdata) : 0; - own = (flags & SWIG_POINTER_OWN) ? SWIG_POINTER_OWN : 0; - if (clientdata && clientdata->pytype) { - SwigPyObject *newobj; - if (flags & SWIG_BUILTIN_TP_INIT) { - newobj = (SwigPyObject*) self; - if (newobj->ptr) { - PyObject *next_self = clientdata->pytype->tp_alloc(clientdata->pytype, 0); - while (newobj->next) - newobj = (SwigPyObject *) newobj->next; - newobj->next = next_self; - newobj = (SwigPyObject *)next_self; - } - } else { - newobj = PyObject_New(SwigPyObject, clientdata->pytype); - } - if (newobj) { - newobj->ptr = ptr; - newobj->ty = type; - newobj->own = own; - newobj->next = 0; -#ifdef SWIGPYTHON_BUILTIN - newobj->dict = 0; -#endif - return (PyObject*) newobj; - } - return SWIG_Py_Void(); - } - - assert(!(flags & SWIG_BUILTIN_TP_INIT)); - - robj = SwigPyObject_New(ptr, type, own); - if (robj && clientdata && !(flags & SWIG_POINTER_NOSHADOW)) { - PyObject *inst = SWIG_Python_NewShadowInstance(clientdata, robj); - Py_DECREF(robj); - robj = inst; - } - return robj; -} - -/* Create a new packed object */ - -SWIGRUNTIMEINLINE PyObject * -SWIG_Python_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) { - return ptr ? SwigPyPacked_New((void *) ptr, sz, type) : SWIG_Py_Void(); -} - -/* -----------------------------------------------------------------------------* - * Get type list - * -----------------------------------------------------------------------------*/ - -#ifdef SWIG_LINK_RUNTIME -void *SWIG_ReturnGlobalTypeList(void *); -#endif - -SWIGRUNTIME swig_module_info * -SWIG_Python_GetModule(void *SWIGUNUSEDPARM(clientdata)) { - static void *type_pointer = (void *)0; - /* first check if module already created */ - if (!type_pointer) { -#ifdef SWIG_LINK_RUNTIME - type_pointer = SWIG_ReturnGlobalTypeList((void *)0); -#else -# ifdef SWIGPY_USE_CAPSULE - type_pointer = PyCapsule_Import(SWIGPY_CAPSULE_NAME, 0); -# else - type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, - (char*)"type_pointer" SWIG_TYPE_TABLE_NAME); -# endif - if (PyErr_Occurred()) { - PyErr_Clear(); - type_pointer = (void *)0; - } -#endif - } - return (swig_module_info *) type_pointer; -} - -#if PY_MAJOR_VERSION < 2 -/* PyModule_AddObject function was introduced in Python 2.0. The following function - is copied out of Python/modsupport.c in python version 2.3.4 */ -SWIGINTERN int -PyModule_AddObject(PyObject *m, char *name, PyObject *o) -{ - PyObject *dict; - if (!PyModule_Check(m)) { - PyErr_SetString(PyExc_TypeError, - "PyModule_AddObject() needs module as first arg"); - return SWIG_ERROR; - } - if (!o) { - PyErr_SetString(PyExc_TypeError, - "PyModule_AddObject() needs non-NULL value"); - return SWIG_ERROR; - } - - dict = PyModule_GetDict(m); - if (dict == NULL) { - /* Internal error -- modules must have a dict! */ - PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", - PyModule_GetName(m)); - return SWIG_ERROR; - } - if (PyDict_SetItemString(dict, name, o)) - return SWIG_ERROR; - Py_DECREF(o); - return SWIG_OK; -} -#endif - -SWIGRUNTIME void -#ifdef SWIGPY_USE_CAPSULE -SWIG_Python_DestroyModule(PyObject *obj) -#else -SWIG_Python_DestroyModule(void *vptr) -#endif -{ -#ifdef SWIGPY_USE_CAPSULE - swig_module_info *swig_module = (swig_module_info *) PyCapsule_GetPointer(obj, SWIGPY_CAPSULE_NAME); -#else - swig_module_info *swig_module = (swig_module_info *) vptr; -#endif - swig_type_info **types = swig_module->types; - size_t i; - for (i =0; i < swig_module->size; ++i) { - swig_type_info *ty = types[i]; - if (ty->owndata) { - SwigPyClientData *data = (SwigPyClientData *) ty->clientdata; - if (data) SwigPyClientData_Del(data); - } - } - Py_DECREF(SWIG_This()); - swig_this = NULL; -} - -SWIGRUNTIME void -SWIG_Python_SetModule(swig_module_info *swig_module) { -#if PY_VERSION_HEX >= 0x03000000 - /* Add a dummy module object into sys.modules */ - PyObject *module = PyImport_AddModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION); -#else - static PyMethodDef swig_empty_runtime_method_table[] = { {NULL, NULL, 0, NULL} }; /* Sentinel */ - PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION, swig_empty_runtime_method_table); -#endif -#ifdef SWIGPY_USE_CAPSULE - PyObject *pointer = PyCapsule_New((void *) swig_module, SWIGPY_CAPSULE_NAME, SWIG_Python_DestroyModule); - if (pointer && module) { - PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer); - } else { - Py_XDECREF(pointer); - } -#else - PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); - if (pointer && module) { - PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); - } else { - Py_XDECREF(pointer); - } -#endif -} - -/* The python cached type query */ -SWIGRUNTIME PyObject * -SWIG_Python_TypeCache(void) { - static PyObject *SWIG_STATIC_POINTER(cache) = PyDict_New(); - return cache; -} - -SWIGRUNTIME swig_type_info * -SWIG_Python_TypeQuery(const char *type) -{ - PyObject *cache = SWIG_Python_TypeCache(); - PyObject *key = SWIG_Python_str_FromChar(type); - PyObject *obj = PyDict_GetItem(cache, key); - swig_type_info *descriptor; - if (obj) { -#ifdef SWIGPY_USE_CAPSULE - descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, NULL); -#else - descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj); -#endif - } else { - swig_module_info *swig_module = SWIG_GetModule(0); - descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type); - if (descriptor) { -#ifdef SWIGPY_USE_CAPSULE - obj = PyCapsule_New((void*) descriptor, NULL, NULL); -#else - obj = PyCObject_FromVoidPtr(descriptor, NULL); -#endif - PyDict_SetItem(cache, key, obj); - Py_DECREF(obj); - } - } - Py_DECREF(key); - return descriptor; -} - -/* - For backward compatibility only -*/ -#define SWIG_POINTER_EXCEPTION 0 -#define SWIG_arg_fail(arg) SWIG_Python_ArgFail(arg) -#define SWIG_MustGetPtr(p, type, argnum, flags) SWIG_Python_MustGetPtr(p, type, argnum, flags) - -SWIGRUNTIME int -SWIG_Python_AddErrMesg(const char* mesg, int infront) -{ - if (PyErr_Occurred()) { - PyObject *type = 0; - PyObject *value = 0; - PyObject *traceback = 0; - PyErr_Fetch(&type, &value, &traceback); - if (value) { - char *tmp; - PyObject *old_str = PyObject_Str(value); - Py_XINCREF(type); - PyErr_Clear(); - if (infront) { - PyErr_Format(type, "%s %s", mesg, tmp = SWIG_Python_str_AsChar(old_str)); - } else { - PyErr_Format(type, "%s %s", tmp = SWIG_Python_str_AsChar(old_str), mesg); - } - SWIG_Python_str_DelForPy3(tmp); - Py_DECREF(old_str); - } - return 1; - } else { - return 0; - } -} - -SWIGRUNTIME int -SWIG_Python_ArgFail(int argnum) -{ - if (PyErr_Occurred()) { - /* add information about failing argument */ - char mesg[256]; - PyOS_snprintf(mesg, sizeof(mesg), "argument number %d:", argnum); - return SWIG_Python_AddErrMesg(mesg, 1); - } else { - return 0; - } -} - -SWIGRUNTIMEINLINE const char * -SwigPyObject_GetDesc(PyObject *self) -{ - SwigPyObject *v = (SwigPyObject *)self; - swig_type_info *ty = v ? v->ty : 0; - return ty ? ty->str : ""; -} - -SWIGRUNTIME void -SWIG_Python_TypeError(const char *type, PyObject *obj) -{ - if (type) { -#if defined(SWIG_COBJECT_TYPES) - if (obj && SwigPyObject_Check(obj)) { - const char *otype = (const char *) SwigPyObject_GetDesc(obj); - if (otype) { - PyErr_Format(PyExc_TypeError, "a '%s' is expected, 'SwigPyObject(%s)' is received", - type, otype); - return; - } - } else -#endif - { - const char *otype = (obj ? obj->ob_type->tp_name : 0); - if (otype) { - PyObject *str = PyObject_Str(obj); - const char *cstr = str ? SWIG_Python_str_AsChar(str) : 0; - if (cstr) { - PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s(%s)' is received", - type, otype, cstr); - SWIG_Python_str_DelForPy3(cstr); - } else { - PyErr_Format(PyExc_TypeError, "a '%s' is expected, '%s' is received", - type, otype); - } - Py_XDECREF(str); - return; - } - } - PyErr_Format(PyExc_TypeError, "a '%s' is expected", type); - } else { - PyErr_Format(PyExc_TypeError, "unexpected type is received"); - } -} - - -/* Convert a pointer value, signal an exception on a type mismatch */ -SWIGRUNTIME void * -SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int SWIGUNUSEDPARM(argnum), int flags) { - void *result; - if (SWIG_Python_ConvertPtr(obj, &result, ty, flags) == -1) { - PyErr_Clear(); -#if SWIG_POINTER_EXCEPTION - if (flags) { - SWIG_Python_TypeError(SWIG_TypePrettyName(ty), obj); - SWIG_Python_ArgFail(argnum); - } -#endif - } - return result; -} - -#ifdef SWIGPYTHON_BUILTIN -SWIGRUNTIME int -SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { - PyTypeObject *tp = obj->ob_type; - PyObject *descr; - PyObject *encoded_name; - descrsetfunc f; - int res = -1; - -# ifdef Py_USING_UNICODE - if (PyString_Check(name)) { - name = PyUnicode_Decode(PyString_AsString(name), PyString_Size(name), NULL, NULL); - if (!name) - return -1; - } else if (!PyUnicode_Check(name)) -# else - if (!PyString_Check(name)) -# endif - { - PyErr_Format(PyExc_TypeError, "attribute name must be string, not '%.200s'", name->ob_type->tp_name); - return -1; - } else { - Py_INCREF(name); - } - - if (!tp->tp_dict) { - if (PyType_Ready(tp) < 0) - goto done; - } - - descr = _PyType_Lookup(tp, name); - f = NULL; - if (descr != NULL) - f = descr->ob_type->tp_descr_set; - if (!f) { - if (PyString_Check(name)) { - encoded_name = name; - Py_INCREF(name); - } else { - encoded_name = PyUnicode_AsUTF8String(name); - } - PyErr_Format(PyExc_AttributeError, "'%.100s' object has no attribute '%.200s'", tp->tp_name, PyString_AsString(encoded_name)); - Py_DECREF(encoded_name); - } else { - res = f(descr, obj, value); - } - - done: - Py_DECREF(name); - return res; -} -#endif - - -#ifdef __cplusplus -} -#endif - - - -#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0) - -#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else - - - - #define SWIG_exception(code, msg) do { SWIG_Error(code, msg); SWIG_fail;; } while(0) - - -/* -------- TYPES TABLE (BEGIN) -------- */ - -#define SWIGTYPE_p_allocator_type swig_types[0] -#define SWIGTYPE_p_char swig_types[1] -#define SWIGTYPE_p_const_reference swig_types[2] -#define SWIGTYPE_p_difference_type swig_types[3] -#define SWIGTYPE_p_float swig_types[4] -#define SWIGTYPE_p_floatArray swig_types[5] -#define SWIGTYPE_p_p_PyObject swig_types[6] -#define SWIGTYPE_p_p_char swig_types[7] -#define SWIGTYPE_p_reference swig_types[8] -#define SWIGTYPE_p_singa__BlobT_float_t swig_types[9] -#define SWIGTYPE_p_singa__Driver swig_types[10] -#define SWIGTYPE_p_singa__DummyLayer swig_types[11] -#define SWIGTYPE_p_singa__Layer swig_types[12] -#define SWIGTYPE_p_singa__NeuralNet swig_types[13] -#define SWIGTYPE_p_singa__Param swig_types[14] -#define SWIGTYPE_p_singa__Updater swig_types[15] -#define SWIGTYPE_p_size_type swig_types[16] -#define SWIGTYPE_p_std__allocatorT_float_t swig_types[17] -#define SWIGTYPE_p_std__allocatorT_int_t swig_types[18] -#define SWIGTYPE_p_std__allocatorT_singa__Layer_p_t swig_types[19] -#define SWIGTYPE_p_std__allocatorT_singa__Param_p_t swig_types[20] -#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[21] -#define SWIGTYPE_p_std__invalid_argument swig_types[22] -#define SWIGTYPE_p_std__vectorT__Tp__Alloc_t swig_types[23] -#define SWIGTYPE_p_std__vectorT__Tp_p__Alloc_t swig_types[24] -#define SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t swig_types[25] -#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[26] -#define SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t swig_types[27] -#define SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t swig_types[28] -#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[29] -#define SWIGTYPE_p_swig__SwigPyIterator swig_types[30] -#define SWIGTYPE_p_value_type swig_types[31] -static swig_type_info *swig_types[33]; -static swig_module_info swig_module = {swig_types, 32, 0, 0, 0, 0}; -#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) -#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) - -/* -------- TYPES TABLE (END) -------- */ - -#if (PY_VERSION_HEX <= 0x02000000) -# if !defined(SWIG_PYTHON_CLASSIC) -# error "This python version requires swig to be run with the '-classic' option" -# endif -#endif - -/*----------------------------------------------- - @(target):= _driver.so - ------------------------------------------------*/ -#if PY_VERSION_HEX >= 0x03000000 -# define SWIG_init PyInit__driver - -#else -# define SWIG_init init_driver - -#endif -#define SWIG_name "_driver" - -#define SWIGVERSION 0x020011 -#define SWIG_VERSION SWIGVERSION - - -#define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a)) -#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),reinterpret_cast< void** >(a)) - - -#include - - -namespace swig { - class SwigPtr_PyObject { - protected: - PyObject *_obj; - - public: - SwigPtr_PyObject() :_obj(0) - { - } - - SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj) - { - Py_XINCREF(_obj); - } - - SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj) - { - if (initial_ref) { - Py_XINCREF(_obj); - } - } - - SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item) - { - Py_XINCREF(item._obj); - Py_XDECREF(_obj); - _obj = item._obj; - return *this; - } - - ~SwigPtr_PyObject() - { - Py_XDECREF(_obj); - } - - operator PyObject *() const - { - return _obj; - } - - PyObject *operator->() const - { - return _obj; - } - }; -} - - -namespace swig { - struct SwigVar_PyObject : SwigPtr_PyObject { - SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { } - - SwigVar_PyObject & operator = (PyObject* obj) - { - Py_XDECREF(_obj); - _obj = obj; - return *this; - } - }; -} - - -#include - -#if PY_VERSION_HEX >= 0x03020000 -# define SWIGPY_SLICE_ARG(obj) ((PyObject*) (obj)) -#else -# define SWIGPY_SLICE_ARG(obj) ((PySliceObject*) (obj)) -#endif - - -#include - - -#if defined(__GNUC__) -# if __GNUC__ == 2 && __GNUC_MINOR <= 96 -# define SWIG_STD_NOMODERN_STL -# endif -#endif - - -#include -#include -#include - - - #include - - -namespace swig { - struct stop_iteration { - }; - - struct SwigPyIterator { - private: - SwigPtr_PyObject _seq; - - protected: - SwigPyIterator(PyObject *seq) : _seq(seq) - { - } - - public: - virtual ~SwigPyIterator() {} - - // Access iterator method, required by Python - virtual PyObject *value() const = 0; - - // Forward iterator method, required by Python - virtual SwigPyIterator *incr(size_t n = 1) = 0; - - // Backward iterator method, very common in C++, but not required in Python - virtual SwigPyIterator *decr(size_t /*n*/ = 1) - { - throw stop_iteration(); - } - - // Random access iterator methods, but not required in Python - virtual ptrdiff_t distance(const SwigPyIterator &/*x*/) const - { - throw std::invalid_argument("operation not supported"); - } - - virtual bool equal (const SwigPyIterator &/*x*/) const - { - throw std::invalid_argument("operation not supported"); - } - - // C++ common/needed methods - virtual SwigPyIterator *copy() const = 0; - - PyObject *next() - { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; // disable threads - PyObject *obj = value(); - incr(); - SWIG_PYTHON_THREAD_END_BLOCK; // re-enable threads - return obj; - } - - /* Make an alias for Python 3.x */ - PyObject *__next__() - { - return next(); - } - - PyObject *previous() - { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; // disable threads - decr(); - PyObject *obj = value(); - SWIG_PYTHON_THREAD_END_BLOCK; // re-enable threads - return obj; - } - - SwigPyIterator *advance(ptrdiff_t n) - { - return (n > 0) ? incr(n) : decr(-n); - } - - bool operator == (const SwigPyIterator& x) const - { - return equal(x); - } - - bool operator != (const SwigPyIterator& x) const - { - return ! operator==(x); - } - - SwigPyIterator& operator += (ptrdiff_t n) - { - return *advance(n); - } - - SwigPyIterator& operator -= (ptrdiff_t n) - { - return *advance(-n); - } - - SwigPyIterator* operator + (ptrdiff_t n) const - { - return copy()->advance(n); - } - - SwigPyIterator* operator - (ptrdiff_t n) const - { - return copy()->advance(-n); - } - - ptrdiff_t operator - (const SwigPyIterator& x) const - { - return x.distance(*this); - } - - static swig_type_info* descriptor() { - static int init = 0; - static swig_type_info* desc = 0; - if (!init) { - desc = SWIG_TypeQuery("swig::SwigPyIterator *"); - init = 1; - } - return desc; - } - }; - -#if defined(SWIGPYTHON_BUILTIN) - inline PyObject* make_output_iterator_builtin (PyObject *pyself) - { - Py_INCREF(pyself); - return pyself; - } -#endif -} - - -SWIGINTERN int -SWIG_AsVal_double (PyObject *obj, double *val) -{ - int res = SWIG_TypeError; - if (PyFloat_Check(obj)) { - if (val) *val = PyFloat_AsDouble(obj); - return SWIG_OK; - } else if (PyInt_Check(obj)) { - if (val) *val = PyInt_AsLong(obj); - return SWIG_OK; - } else if (PyLong_Check(obj)) { - double v = PyLong_AsDouble(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - int dispatch = 0; - double d = PyFloat_AsDouble(obj); - if (!PyErr_Occurred()) { - if (val) *val = d; - return SWIG_AddCast(SWIG_OK); - } else { - PyErr_Clear(); - } - if (!dispatch) { - long v = PyLong_AsLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_AddCast(SWIG_AddCast(SWIG_OK)); - } else { - PyErr_Clear(); - } - } - } -#endif - return res; -} - - -#include - - -#include - - -SWIGINTERNINLINE int -SWIG_CanCastAsInteger(double *d, double min, double max) { - double x = *d; - if ((min <= x && x <= max)) { - double fx = floor(x); - double cx = ceil(x); - double rd = ((x - fx) < 0.5) ? fx : cx; /* simple rint */ - if ((errno == EDOM) || (errno == ERANGE)) { - errno = 0; - } else { - double summ, reps, diff; - if (rd < x) { - diff = x - rd; - } else if (rd > x) { - diff = rd - x; - } else { - return 1; - } - summ = rd + x; - reps = diff/summ; - if (reps < 8*DBL_EPSILON) { - *d = rd; - return 1; - } - } - } - return 0; -} - - -SWIGINTERN int -SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val) -{ -#if PY_VERSION_HEX < 0x03000000 - if (PyInt_Check(obj)) { - long v = PyInt_AsLong(obj); - if (v >= 0) { - if (val) *val = v; - return SWIG_OK; - } else { - return SWIG_OverflowError; - } - } else -#endif - if (PyLong_Check(obj)) { - unsigned long v = PyLong_AsUnsignedLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); -#if PY_VERSION_HEX >= 0x03000000 - { - long v = PyLong_AsLong(obj); - if (!PyErr_Occurred()) { - if (v < 0) { - return SWIG_OverflowError; - } - } else { - PyErr_Clear(); - } - } -#endif - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - int dispatch = 0; - unsigned long v = PyLong_AsUnsignedLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_AddCast(SWIG_OK); - } else { - PyErr_Clear(); - } - if (!dispatch) { - double d; - int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); - if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, ULONG_MAX)) { - if (val) *val = (unsigned long)(d); - return res; - } - } - } -#endif - return SWIG_TypeError; -} - - -SWIGINTERNINLINE int -SWIG_AsVal_size_t (PyObject * obj, size_t *val) -{ - unsigned long v; - int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0); - if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v); - return res; -} - - - #define SWIG_From_long PyLong_FromLong - - -SWIGINTERNINLINE PyObject * -SWIG_From_ptrdiff_t (ptrdiff_t value) -{ - return SWIG_From_long (static_cast< long >(value)); -} - - -SWIGINTERNINLINE PyObject* - SWIG_From_bool (bool value) -{ - return PyBool_FromLong(value ? 1 : 0); -} - - -SWIGINTERN int -SWIG_AsVal_long (PyObject *obj, long* val) -{ - if (PyInt_Check(obj)) { - if (val) *val = PyInt_AsLong(obj); - return SWIG_OK; - } else if (PyLong_Check(obj)) { - long v = PyLong_AsLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_OK; - } else { - PyErr_Clear(); - } - } -#ifdef SWIG_PYTHON_CAST_MODE - { - int dispatch = 0; - long v = PyInt_AsLong(obj); - if (!PyErr_Occurred()) { - if (val) *val = v; - return SWIG_AddCast(SWIG_OK); - } else { - PyErr_Clear(); - } - if (!dispatch) { - double d; - int res = SWIG_AddCast(SWIG_AsVal_double (obj,&d)); - if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, LONG_MIN, LONG_MAX)) { - if (val) *val = (long)(d); - return res; - } - } - } -#endif - return SWIG_TypeError; -} - - -SWIGINTERNINLINE int -SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val) -{ - long v; - int res = SWIG_AsVal_long (obj, val ? &v : 0); - if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v); - return res; -} - - -#include - - -#include - - -#include - - -#include - - -typedef float floatArray; - -SWIGINTERN floatArray *new_floatArray(size_t nelements){ - return (new float[nelements]); - } -SWIGINTERN void delete_floatArray(floatArray *self){ - delete[] self; - } -SWIGINTERN float floatArray___getitem__(floatArray *self,size_t index){ - return self[index]; - } - - #define SWIG_From_double PyFloat_FromDouble - - -SWIGINTERNINLINE PyObject * -SWIG_From_float (float value) -{ - return SWIG_From_double (value); -} - - -/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */ -#ifndef SWIG_isfinite -# if defined(isfinite) -# define SWIG_isfinite(X) (isfinite(X)) -# elif defined(_MSC_VER) -# define SWIG_isfinite(X) (_finite(X)) -# elif defined(__sun) && defined(__SVR4) -# include -# define SWIG_isfinite(X) (finite(X)) -# endif -#endif - - -/* Accept infinite as a valid float value unless we are unable to check if a value is finite */ -#ifdef SWIG_isfinite -# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X)) -#else -# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX)) -#endif - - -SWIGINTERN int -SWIG_AsVal_float (PyObject * obj, float *val) -{ - double v; - int res = SWIG_AsVal_double (obj, &v); - if (SWIG_IsOK(res)) { - if (SWIG_Float_Overflow_Check(v)) { - return SWIG_OverflowError; - } else { - if (val) *val = static_cast< float >(v); - } - } - return res; -} - -SWIGINTERN void floatArray___setitem__(floatArray *self,size_t index,float value){ - self[index] = value; - } -SWIGINTERN float *floatArray_cast(floatArray *self){ - return self; - } -SWIGINTERN floatArray *floatArray_frompointer(float *t){ - return static_cast< floatArray * >(t); - } - -#include "singa/driver.h" -#include "singa/neuralnet/neuralnet.h" -#include "singa/neuralnet/layer.h" -#include "singa/neuralnet/input_layer.h" -#include "singa/neuralnet/neuron_layer.h" -#include "singa/neuralnet/loss_layer.h" -#include "singa/utils/blob.h" -#include "singa/utils/param.h" -#include "singa/utils/updater.h" -#include "singa/proto/job.pb.h" -#include "singa/proto/common.pb.h" - - -namespace swig { - template - struct noconst_traits { - typedef Type noconst_type; - }; - - template - struct noconst_traits { - typedef Type noconst_type; - }; - - /* - type categories - */ - struct pointer_category { }; - struct value_category { }; - - /* - General traits that provides type_name and type_info - */ - template struct traits { }; - - template - inline const char* type_name() { - return traits::noconst_type >::type_name(); - } - - template - struct traits_info { - static swig_type_info *type_query(std::string name) { - name += " *"; - return SWIG_TypeQuery(name.c_str()); - } - static swig_type_info *type_info() { - static swig_type_info *info = type_query(type_name()); - return info; - } - }; - - template - inline swig_type_info *type_info() { - return traits_info::type_info(); - } - - /* - Partial specialization for pointers - */ - template struct traits { - typedef pointer_category category; - static std::string make_ptr_name(const char* name) { - std::string ptrname = name; - ptrname += " *"; - return ptrname; - } - static const char* type_name() { - static std::string name = make_ptr_name(swig::type_name()); - return name.c_str(); - } - }; - - template - struct traits_as { }; - - template - struct traits_check { }; - -} - - -namespace swig { - /* - Traits that provides the from method - */ - template struct traits_from_ptr { - static PyObject *from(Type *val, int owner = 0) { - return SWIG_InternalNewPointerObj(val, type_info(), owner); - } - }; - - template struct traits_from { - static PyObject *from(const Type& val) { - return traits_from_ptr::from(new Type(val), 1); - } - }; - - template struct traits_from { - static PyObject *from(Type* val) { - return traits_from_ptr::from(val, 0); - } - }; - - template struct traits_from { - static PyObject *from(const Type* val) { - return traits_from_ptr::from(const_cast(val), 0); - } - }; - - - template - inline PyObject *from(const Type& val) { - return traits_from::from(val); - } - - template - inline PyObject *from_ptr(Type* val, int owner) { - return traits_from_ptr::from(val, owner); - } - - /* - Traits that provides the asval/as/check method - */ - template - struct traits_asptr { - static int asptr(PyObject *obj, Type **val) { - Type *p; - int res = SWIG_ConvertPtr(obj, (void**)&p, type_info(), 0); - if (SWIG_IsOK(res)) { - if (val) *val = p; - } - return res; - } - }; - - template - inline int asptr(PyObject *obj, Type **vptr) { - return traits_asptr::asptr(obj, vptr); - } - - template - struct traits_asval { - static int asval(PyObject *obj, Type *val) { - if (val) { - Type *p = 0; - int res = traits_asptr::asptr(obj, &p); - if (!SWIG_IsOK(res)) return res; - if (p) { - typedef typename noconst_traits::noconst_type noconst_type; - *(const_cast(val)) = *p; - if (SWIG_IsNewObj(res)){ - delete p; - res = SWIG_DelNewMask(res); - } - return res; - } else { - return SWIG_ERROR; - } - } else { - return traits_asptr::asptr(obj, (Type **)(0)); - } - } - }; - - template struct traits_asval { - static int asval(PyObject *obj, Type **val) { - if (val) { - typedef typename noconst_traits::noconst_type noconst_type; - noconst_type *p = 0; - int res = traits_asptr::asptr(obj, &p); - if (SWIG_IsOK(res)) { - *(const_cast(val)) = p; - } - return res; - } else { - return traits_asptr::asptr(obj, (Type **)(0)); - } - } - }; - - template - inline int asval(PyObject *obj, Type *val) { - return traits_asval::asval(obj, val); - } - - template - struct traits_as { - static Type as(PyObject *obj, bool throw_error) { - Type v; - int res = asval(obj, &v); - if (!obj || !SWIG_IsOK(res)) { - if (!PyErr_Occurred()) { - ::SWIG_Error(SWIG_TypeError, swig::type_name()); - } - if (throw_error) throw std::invalid_argument("bad type"); - } - return v; - } - }; - - template - struct traits_as { - static Type as(PyObject *obj, bool throw_error) { - Type *v = 0; - int res = (obj ? traits_asptr::asptr(obj, &v) : SWIG_ERROR); - if (SWIG_IsOK(res) && v) { - if (SWIG_IsNewObj(res)) { - Type r(*v); - delete v; - return r; - } else { - return *v; - } - } else { - // Uninitialized return value, no Type() constructor required. - static Type *v_def = (Type*) malloc(sizeof(Type)); - if (!PyErr_Occurred()) { - SWIG_Error(SWIG_TypeError, swig::type_name()); - } - if (throw_error) throw std::invalid_argument("bad type"); - memset(v_def,0,sizeof(Type)); - return *v_def; - } - } - }; - - template - struct traits_as { - static Type* as(PyObject *obj, bool throw_error) { - Type *v = 0; - int res = (obj ? traits_asptr::asptr(obj, &v) : SWIG_ERROR); - if (SWIG_IsOK(res)) { - return v; - } else { - if (!PyErr_Occurred()) { - SWIG_Error(SWIG_TypeError, swig::type_name()); - } - if (throw_error) throw std::invalid_argument("bad type"); - return 0; - } - } - }; - - template - inline Type as(PyObject *obj, bool te = false) { - return traits_as::category>::as(obj, te); - } - - template - struct traits_check { - static bool check(PyObject *obj) { - int res = obj ? asval(obj, (Type *)(0)) : SWIG_ERROR; - return SWIG_IsOK(res) ? true : false; - } - }; - - template - struct traits_check { - static bool check(PyObject *obj) { - int res = obj ? asptr(obj, (Type **)(0)) : SWIG_ERROR; - return SWIG_IsOK(res) ? true : false; - } - }; - - template - inline bool check(PyObject *obj) { - return traits_check::category>::check(obj); - } -} - - -#include - -namespace std { - template <> - struct less : public binary_function - { - bool - operator()(PyObject * v, PyObject *w) const - { - bool res; - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - res = PyObject_RichCompareBool(v, w, Py_LT) ? true : false; - /* This may fall into a case of inconsistent - eg. ObjA > ObjX > ObjB - but ObjA < ObjB - */ - if( PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_TypeError) ) - { - /* Objects can't be compared, this mostly occurred in Python 3.0 */ - /* Compare their ptr directly for a workaround */ - res = (v < w); - PyErr_Clear(); - } - SWIG_PYTHON_THREAD_END_BLOCK; - return res; - } - }; - - template <> - struct less : public binary_function - { - bool - operator()(const swig::SwigPtr_PyObject& v, const swig::SwigPtr_PyObject& w) const - { - return std::less()(v, w); - } - }; - - template <> - struct less : public binary_function - { - bool - operator()(const swig::SwigVar_PyObject& v, const swig::SwigVar_PyObject& w) const - { - return std::less()(v, w); - } - }; - -} - -namespace swig { - template <> struct traits { - typedef value_category category; - static const char* type_name() { return "PyObject *"; } - }; - - template <> struct traits_asval { - typedef PyObject * value_type; - static int asval(PyObject *obj, value_type *val) { - if (val) *val = obj; - return SWIG_OK; - } - }; - - template <> - struct traits_check { - static bool check(PyObject *) { - return true; - } - }; - - template <> struct traits_from { - typedef PyObject * value_type; - static PyObject *from(const value_type& val) { - Py_XINCREF(val); - return val; - } - }; - -} - -namespace swig { - template - inline size_t - check_index(Difference i, size_t size, bool insert = false) { - if ( i < 0 ) { - if ((size_t) (-i) <= size) - return (size_t) (i + size); - } else if ( (size_t) i < size ) { - return (size_t) i; - } else if (insert && ((size_t) i == size)) { - return size; - } - throw std::out_of_range("index out of range"); - } - - template - void - slice_adjust(Difference i, Difference j, Py_ssize_t step, size_t size, Difference &ii, Difference &jj, bool insert = false) { - if (step == 0) { - throw std::invalid_argument("slice step cannot be zero"); - } else if (step > 0) { - // Required range: 0 <= i < size, 0 <= j < size - if (i < 0) { - ii = 0; - } else if (i < (Difference)size) { - ii = i; - } else if (insert && (i >= (Difference)size)) { - ii = (Difference)size; - } - if ( j < 0 ) { - jj = 0; - } else { - jj = (j < (Difference)size) ? j : (Difference)size; - } - } else { - // Required range: -1 <= i < size-1, -1 <= j < size-1 - if (i < -1) { - ii = -1; - } else if (i < (Difference) size) { - ii = i; - } else if (i >= (Difference)(size-1)) { - ii = (Difference)(size-1); - } - if (j < -1) { - jj = -1; - } else { - jj = (j < (Difference)size ) ? j : (Difference)(size-1); - } - } - } - - template - inline typename Sequence::iterator - getpos(Sequence* self, Difference i) { - typename Sequence::iterator pos = self->begin(); - std::advance(pos, check_index(i,self->size())); - return pos; - } - - template - inline typename Sequence::const_iterator - cgetpos(const Sequence* self, Difference i) { - typename Sequence::const_iterator pos = self->begin(); - std::advance(pos, check_index(i,self->size())); - return pos; - } - - template - inline Sequence* - getslice(const Sequence* self, Difference i, Difference j, Py_ssize_t step) { - typename Sequence::size_type size = self->size(); - Difference ii = 0; - Difference jj = 0; - swig::slice_adjust(i, j, step, size, ii, jj); - - if (step > 0) { - typename Sequence::const_iterator sb = self->begin(); - typename Sequence::const_iterator se = self->begin(); - std::advance(sb,ii); - std::advance(se,jj); - if (step == 1) { - return new Sequence(sb, se); - } else { - Sequence *sequence = new Sequence(); - typename Sequence::const_iterator it = sb; - while (it!=se) { - sequence->push_back(*it); - for (Py_ssize_t c=0; c jj) { - typename Sequence::const_reverse_iterator sb = self->rbegin(); - typename Sequence::const_reverse_iterator se = self->rbegin(); - std::advance(sb,size-ii-1); - std::advance(se,size-jj-1); - typename Sequence::const_reverse_iterator it = sb; - while (it!=se) { - sequence->push_back(*it); - for (Py_ssize_t c=0; c<-step && it!=se; ++c) - it++; - } - } - return sequence; - } - } - - template - inline void - setslice(Sequence* self, Difference i, Difference j, Py_ssize_t step, const InputSeq& is = InputSeq()) { - typename Sequence::size_type size = self->size(); - Difference ii = 0; - Difference jj = 0; - swig::slice_adjust(i, j, step, size, ii, jj, true); - if (step > 0) { - if (jj < ii) - jj = ii; - if (step == 1) { - size_t ssize = jj - ii; - if (ssize <= is.size()) { - // expanding/staying the same size - typename Sequence::iterator sb = self->begin(); - typename InputSeq::const_iterator isit = is.begin(); - std::advance(sb,ii); - std::advance(isit, jj - ii); - self->insert(std::copy(is.begin(), isit, sb), isit, is.end()); - } else { - // shrinking - typename Sequence::iterator sb = self->begin(); - typename Sequence::iterator se = self->begin(); - std::advance(sb,ii); - std::advance(se,jj); - self->erase(sb,se); - sb = self->begin(); - std::advance(sb,ii); - self->insert(sb, is.begin(), is.end()); - } - } else { - size_t replacecount = (jj - ii + step - 1) / step; - if (is.size() != replacecount) { - char msg[1024]; - sprintf(msg, "attempt to assign sequence of size %lu to extended slice of size %lu", (unsigned long)is.size(), (unsigned long)replacecount); - throw std::invalid_argument(msg); - } - typename Sequence::const_iterator isit = is.begin(); - typename Sequence::iterator it = self->begin(); - std::advance(it,ii); - for (size_t rc=0; rcend(); ++c) - it++; - } - } - } else { - if (jj > ii) - jj = ii; - size_t replacecount = (ii - jj - step - 1) / -step; - if (is.size() != replacecount) { - char msg[1024]; - sprintf(msg, "attempt to assign sequence of size %lu to extended slice of size %lu", (unsigned long)is.size(), (unsigned long)replacecount); - throw std::invalid_argument(msg); - } - typename Sequence::const_iterator isit = is.begin(); - typename Sequence::reverse_iterator it = self->rbegin(); - std::advance(it,size-ii-1); - for (size_t rc=0; rcrend(); ++c) - it++; - } - } - } - - template - inline void - delslice(Sequence* self, Difference i, Difference j, Py_ssize_t step) { - typename Sequence::size_type size = self->size(); - Difference ii = 0; - Difference jj = 0; - swig::slice_adjust(i, j, step, size, ii, jj, true); - if (step > 0) { - if (jj > ii) { - typename Sequence::iterator sb = self->begin(); - std::advance(sb,ii); - if (step == 1) { - typename Sequence::iterator se = self->begin(); - std::advance(se,jj); - self->erase(sb,se); - } else { - typename Sequence::iterator it = sb; - size_t delcount = (jj - ii + step - 1) / step; - while (delcount) { - it = self->erase(it); - for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c) - it++; - delcount--; - } - } - } - } else { - if (ii > jj) { - typename Sequence::reverse_iterator sb = self->rbegin(); - std::advance(sb,size-ii-1); - typename Sequence::reverse_iterator it = sb; - size_t delcount = (ii - jj - step - 1) / -step; - while (delcount) { - it = typename Sequence::reverse_iterator(self->erase((++it).base())); - for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c) - it++; - delcount--; - } - } - } - } -} - - -#if defined(__SUNPRO_CC) && defined(_RWSTD_VER) -# if !defined(SWIG_NO_STD_NOITERATOR_TRAITS_STL) -# define SWIG_STD_NOITERATOR_TRAITS_STL -# endif -#endif - -#if !defined(SWIG_STD_NOITERATOR_TRAITS_STL) -#include -#else -namespace std { - template - struct iterator_traits { - typedef ptrdiff_t difference_type; - typedef typename Iterator::value_type value_type; - }; - - template - struct iterator_traits<__reverse_bi_iterator > { - typedef Distance difference_type; - typedef T value_type; - }; - - template - struct iterator_traits { - typedef T value_type; - typedef ptrdiff_t difference_type; - }; - - template - inline typename iterator_traits<_InputIterator>::difference_type - distance(_InputIterator __first, _InputIterator __last) - { - typename iterator_traits<_InputIterator>::difference_type __n = 0; - while (__first != __last) { - ++__first; ++__n; - } - return __n; - } -} -#endif - - -namespace swig { - template - class SwigPyIterator_T : public SwigPyIterator - { - public: - typedef OutIterator out_iterator; - typedef typename std::iterator_traits::value_type value_type; - typedef SwigPyIterator_T self_type; - - SwigPyIterator_T(out_iterator curr, PyObject *seq) - : SwigPyIterator(seq), current(curr) - { - } - - const out_iterator& get_current() const - { - return current; - } - - - bool equal (const SwigPyIterator &iter) const - { - const self_type *iters = dynamic_cast(&iter); - if (iters) { - return (current == iters->get_current()); - } else { - throw std::invalid_argument("bad iterator type"); - } - } - - ptrdiff_t distance(const SwigPyIterator &iter) const - { - const self_type *iters = dynamic_cast(&iter); - if (iters) { - return std::distance(current, iters->get_current()); - } else { - throw std::invalid_argument("bad iterator type"); - } - } - - protected: - out_iterator current; - }; - - template - struct from_oper - { - typedef const ValueType& argument_type; - typedef PyObject *result_type; - result_type operator()(argument_type v) const - { - return swig::from(v); - } - }; - - template::value_type, - typename FromOper = from_oper > - class SwigPyIteratorOpen_T : public SwigPyIterator_T - { - public: - FromOper from; - typedef OutIterator out_iterator; - typedef ValueType value_type; - typedef SwigPyIterator_T base; - typedef SwigPyIteratorOpen_T self_type; - - SwigPyIteratorOpen_T(out_iterator curr, PyObject *seq) - : SwigPyIterator_T(curr, seq) - { - } - - PyObject *value() const { - return from(static_cast(*(base::current))); - } - - SwigPyIterator *copy() const - { - return new self_type(*this); - } - - SwigPyIterator *incr(size_t n = 1) - { - while (n--) { - ++base::current; - } - return this; - } - - SwigPyIterator *decr(size_t n = 1) - { - while (n--) { - --base::current; - } - return this; - } - }; - - template::value_type, - typename FromOper = from_oper > - class SwigPyIteratorClosed_T : public SwigPyIterator_T - { - public: - FromOper from; - typedef OutIterator out_iterator; - typedef ValueType value_type; - typedef SwigPyIterator_T base; - typedef SwigPyIteratorClosed_T self_type; - - SwigPyIteratorClosed_T(out_iterator curr, out_iterator first, out_iterator last, PyObject *seq) - : SwigPyIterator_T(curr, seq), begin(first), end(last) - { - } - - PyObject *value() const { - if (base::current == end) { - throw stop_iteration(); - } else { - return from(static_cast(*(base::current))); - } - } - - SwigPyIterator *copy() const - { - return new self_type(*this); - } - - SwigPyIterator *incr(size_t n = 1) - { - while (n--) { - if (base::current == end) { - throw stop_iteration(); - } else { - ++base::current; - } - } - return this; - } - - SwigPyIterator *decr(size_t n = 1) - { - while (n--) { - if (base::current == begin) { - throw stop_iteration(); - } else { - --base::current; - } - } - return this; - } - - private: - out_iterator begin; - out_iterator end; - }; - - template - inline SwigPyIterator* - make_output_iterator(const OutIter& current, const OutIter& begin,const OutIter& end, PyObject *seq = 0) - { - return new SwigPyIteratorClosed_T(current, begin, end, seq); - } - - template - inline SwigPyIterator* - make_output_iterator(const OutIter& current, PyObject *seq = 0) - { - return new SwigPyIteratorOpen_T(current, seq); - } - -} - - -namespace swig -{ - template - struct SwigPySequence_Ref - { - SwigPySequence_Ref(PyObject* seq, int index) - : _seq(seq), _index(index) - { - } - - operator T () const - { - swig::SwigVar_PyObject item = PySequence_GetItem(_seq, _index); - try { - return swig::as(item, true); - } catch (std::exception& e) { - char msg[1024]; - sprintf(msg, "in sequence element %d ", _index); - if (!PyErr_Occurred()) { - ::SWIG_Error(SWIG_TypeError, swig::type_name()); - } - SWIG_Python_AddErrorMsg(msg); - SWIG_Python_AddErrorMsg(e.what()); - throw; - } - } - - SwigPySequence_Ref& operator=(const T& v) - { - PySequence_SetItem(_seq, _index, swig::from(v)); - return *this; - } - - private: - PyObject* _seq; - int _index; - }; - - template - struct SwigPySequence_ArrowProxy - { - SwigPySequence_ArrowProxy(const T& x): m_value(x) {} - const T* operator->() const { return &m_value; } - operator const T*() const { return &m_value; } - T m_value; - }; - - template - struct SwigPySequence_InputIterator - { - typedef SwigPySequence_InputIterator self; - - typedef std::random_access_iterator_tag iterator_category; - typedef Reference reference; - typedef T value_type; - typedef T* pointer; - typedef int difference_type; - - SwigPySequence_InputIterator() - { - } - - SwigPySequence_InputIterator(PyObject* seq, int index) - : _seq(seq), _index(index) - { - } - - reference operator*() const - { - return reference(_seq, _index); - } - - SwigPySequence_ArrowProxy - operator->() const { - return SwigPySequence_ArrowProxy(operator*()); - } - - bool operator==(const self& ri) const - { - return (_index == ri._index) && (_seq == ri._seq); - } - - bool operator!=(const self& ri) const - { - return !(operator==(ri)); - } - - self& operator ++ () - { - ++_index; - return *this; - } - - self& operator -- () - { - --_index; - return *this; - } - - self& operator += (difference_type n) - { - _index += n; - return *this; - } - - self operator +(difference_type n) const - { - return self(_seq, _index + n); - } - - self& operator -= (difference_type n) - { - _index -= n; - return *this; - } - - self operator -(difference_type n) const - { - return self(_seq, _index - n); - } - - difference_type operator - (const self& ri) const - { - return _index - ri._index; - } - - bool operator < (const self& ri) const - { - return _index < ri._index; - } - - reference - operator[](difference_type n) const - { - return reference(_seq, _index + n); - } - - private: - PyObject* _seq; - difference_type _index; - }; - - template - struct SwigPySequence_Cont - { - typedef SwigPySequence_Ref reference; - typedef const SwigPySequence_Ref const_reference; - typedef T value_type; - typedef T* pointer; - typedef int difference_type; - typedef int size_type; - typedef const pointer const_pointer; - typedef SwigPySequence_InputIterator iterator; - typedef SwigPySequence_InputIterator const_iterator; - - SwigPySequence_Cont(PyObject* seq) : _seq(0) - { - if (!PySequence_Check(seq)) { - throw std::invalid_argument("a sequence is expected"); - } - _seq = seq; - Py_INCREF(_seq); - } - - ~SwigPySequence_Cont() - { - Py_XDECREF(_seq); - } - - size_type size() const - { - return static_cast(PySequence_Size(_seq)); - } - - bool empty() const - { - return size() == 0; - } - - iterator begin() - { - return iterator(_seq, 0); - } - - const_iterator begin() const - { - return const_iterator(_seq, 0); - } - - iterator end() - { - return iterator(_seq, size()); - } - - const_iterator end() const - { - return const_iterator(_seq, size()); - } - - reference operator[](difference_type n) - { - return reference(_seq, n); - } - - const_reference operator[](difference_type n) const - { - return const_reference(_seq, n); - } - - bool check(bool set_err = true) const - { - int s = size(); - for (int i = 0; i < s; ++i) { - swig::SwigVar_PyObject item = PySequence_GetItem(_seq, i); - if (!swig::check(item)) { - if (set_err) { - char msg[1024]; - sprintf(msg, "in sequence element %d", i); - SWIG_Error(SWIG_RuntimeError, msg); - } - return false; - } - } - return true; - } - - private: - PyObject* _seq; - }; - -} - - -SWIGINTERN swig_type_info* -SWIG_pchar_descriptor(void) -{ - static int init = 0; - static swig_type_info* info = 0; - if (!init) { - info = SWIG_TypeQuery("_p_char"); - init = 1; - } - return info; -} - - -SWIGINTERN int -SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) -{ -#if PY_VERSION_HEX>=0x03000000 - if (PyUnicode_Check(obj)) -#else - if (PyString_Check(obj)) -#endif - { - char *cstr; Py_ssize_t len; -#if PY_VERSION_HEX>=0x03000000 - if (!alloc && cptr) { - /* We can't allow converting without allocation, since the internal - representation of string in Python 3 is UCS-2/UCS-4 but we require - a UTF-8 representation. - TODO(bhy) More detailed explanation */ - return SWIG_RuntimeError; - } - obj = PyUnicode_AsUTF8String(obj); - PyBytes_AsStringAndSize(obj, &cstr, &len); - if(alloc) *alloc = SWIG_NEWOBJ; -#else - PyString_AsStringAndSize(obj, &cstr, &len); -#endif - if (cptr) { - if (alloc) { - /* - In python the user should not be able to modify the inner - string representation. To warranty that, if you define - SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string - buffer is always returned. - - The default behavior is just to return the pointer value, - so, be careful. - */ -#if defined(SWIG_PYTHON_SAFE_CSTRINGS) - if (*alloc != SWIG_OLDOBJ) -#else - if (*alloc == SWIG_NEWOBJ) -#endif - { - *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1))); - *alloc = SWIG_NEWOBJ; - } - else { - *cptr = cstr; - *alloc = SWIG_OLDOBJ; - } - } else { - #if PY_VERSION_HEX>=0x03000000 - assert(0); /* Should never reach here in Python 3 */ - #endif - *cptr = SWIG_Python_str_AsChar(obj); - } - } - if (psize) *psize = len + 1; -#if PY_VERSION_HEX>=0x03000000 - Py_XDECREF(obj); -#endif - return SWIG_OK; - } else { - swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); - if (pchar_descriptor) { - void* vptr = 0; - if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { - if (cptr) *cptr = (char *) vptr; - if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; - if (alloc) *alloc = SWIG_OLDOBJ; - return SWIG_OK; - } - } - } - return SWIG_TypeError; -} - - -SWIGINTERN int -SWIG_AsPtr_std_string (PyObject * obj, std::string **val) -{ - char* buf = 0 ; size_t size = 0; int alloc = SWIG_OLDOBJ; - if (SWIG_IsOK((SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc)))) { - if (buf) { - if (val) *val = new std::string(buf, size - 1); - if (alloc == SWIG_NEWOBJ) delete[] buf; - return SWIG_NEWOBJ; - } else { - if (val) *val = 0; - return SWIG_OLDOBJ; - } - } else { - static int init = 0; - static swig_type_info* descriptor = 0; - if (!init) { - descriptor = SWIG_TypeQuery("std::string" " *"); - init = 1; - } - if (descriptor) { - std::string *vptr; - int res = SWIG_ConvertPtr(obj, (void**)&vptr, descriptor, 0); - if (SWIG_IsOK(res) && val) *val = vptr; - return res; - } - } - return SWIG_ERROR; -} - - -SWIGINTERN int -SWIG_AsVal_std_string (PyObject * obj, std::string *val) -{ - std::string* v = (std::string *) 0; - int res = SWIG_AsPtr_std_string (obj, &v); - if (!SWIG_IsOK(res)) return res; - if (v) { - if (val) *val = *v; - if (SWIG_IsNewObj(res)) { - delete v; - res = SWIG_DelNewMask(res); - } - return res; - } - return SWIG_ERROR; -} - - -SWIGINTERNINLINE PyObject * -SWIG_FromCharPtrAndSize(const char* carray, size_t size) -{ - if (carray) { - if (size > INT_MAX) { - swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); - return pchar_descriptor ? - SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void(); - } else { -#if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_FromStringAndSize(carray, static_cast< int >(size)); -#else - return PyString_FromStringAndSize(carray, static_cast< int >(size)); -#endif - } - } else { - return SWIG_Py_Void(); - } -} - - -SWIGINTERNINLINE PyObject * -SWIG_From_std_string (const std::string& s) -{ - return SWIG_FromCharPtrAndSize(s.data(), s.size()); -} - - -namespace swig { - template <> struct traits { - typedef value_category category; - static const char* type_name() { return"std::string"; } - }; - template <> struct traits_asval { - typedef std::string value_type; - static int asval(PyObject *obj, value_type *val) { - return SWIG_AsVal_std_string (obj, val); - } - }; - template <> struct traits_from { - typedef std::string value_type; - static PyObject *from(const value_type& val) { - return SWIG_From_std_string (val); - } - }; -} - - -namespace swig { - template - inline void - assign(const SwigPySeq& swigpyseq, Seq* seq) { - // seq->assign(swigpyseq.begin(), swigpyseq.end()); // not used as not always implemented - typedef typename SwigPySeq::value_type value_type; - typename SwigPySeq::const_iterator it = swigpyseq.begin(); - for (;it != swigpyseq.end(); ++it) { - seq->insert(seq->end(),(value_type)(*it)); - } - } - - template - struct traits_asptr_stdseq { - typedef Seq sequence; - typedef T value_type; - - static int asptr(PyObject *obj, sequence **seq) { - if (obj == Py_None || SWIG_Python_GetSwigThis(obj)) { - sequence *p; - if (::SWIG_ConvertPtr(obj,(void**)&p, - swig::type_info(),0) == SWIG_OK) { - if (seq) *seq = p; - return SWIG_OLDOBJ; - } - } else if (PySequence_Check(obj)) { - try { - SwigPySequence_Cont swigpyseq(obj); - if (seq) { - sequence *pseq = new sequence(); - assign(swigpyseq, pseq); - *seq = pseq; - return SWIG_NEWOBJ; - } else { - return swigpyseq.check() ? SWIG_OK : SWIG_ERROR; - } - } catch (std::exception& e) { - if (seq) { - if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, e.what()); - } - } - return SWIG_ERROR; - } - } - return SWIG_ERROR; - } - }; - - template - struct traits_from_stdseq { - typedef Seq sequence; - typedef T value_type; - typedef typename Seq::size_type size_type; - typedef typename sequence::const_iterator const_iterator; - - static PyObject *from(const sequence& seq) { -#ifdef SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS - swig_type_info *desc = swig::type_info(); - if (desc && desc->clientdata) { - return SWIG_NewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN); - } -#endif - size_type size = seq.size(); - if (size <= (size_type)INT_MAX) { - PyObject *obj = PyTuple_New((int)size); - int i = 0; - for (const_iterator it = seq.begin(); - it != seq.end(); ++it, ++i) { - PyTuple_SetItem(obj,i,swig::from(*it)); - } - return obj; - } else { - PyErr_SetString(PyExc_OverflowError,"sequence size not valid in python"); - return NULL; - } - } - }; -} - - - namespace swig { - template - struct traits_asptr > { - static int asptr(PyObject *obj, std::vector **vec) { - return traits_asptr_stdseq >::asptr(obj, vec); - } - }; - - template - struct traits_from > { - static PyObject *from(const std::vector& vec) { - return traits_from_stdseq >::from(vec); - } - }; - } - - - namespace swig { - template <> struct traits > > { - typedef pointer_category category; - static const char* type_name() { - return "std::vector<" "std::string" "," "std::allocator< std::string >" " >"; - } - }; - } - -SWIGINTERN swig::SwigPyIterator *std_vector_Sl_std_string_Sg__iterator(std::vector< std::string > *self,PyObject **PYTHON_SELF){ - return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); - } -SWIGINTERN bool std_vector_Sl_std_string_Sg____nonzero__(std::vector< std::string > const *self){ - return !(self->empty()); - } -SWIGINTERN bool std_vector_Sl_std_string_Sg____bool__(std::vector< std::string > const *self){ - return !(self->empty()); - } -SWIGINTERN std::vector< std::string >::size_type std_vector_Sl_std_string_Sg____len__(std::vector< std::string > const *self){ - return self->size(); - } - -SWIGINTERNINLINE PyObject* -SWIG_From_unsigned_SS_long (unsigned long value) -{ - return (value > LONG_MAX) ? - PyLong_FromUnsignedLong(value) : PyLong_FromLong(static_cast< long >(value)); -} - - -SWIGINTERNINLINE PyObject * -SWIG_From_size_t (size_t value) -{ - return SWIG_From_unsigned_SS_long (static_cast< unsigned long >(value)); -} - -SWIGINTERN std::vector< std::string >::value_type std_vector_Sl_std_string_Sg__pop(std::vector< std::string > *self){ - if (self->size() == 0) - throw std::out_of_range("pop from empty container"); - std::vector >::value_type x = self->back(); - self->pop_back(); - return x; - } -SWIGINTERN std::vector< std::string,std::allocator< std::string > > *std_vector_Sl_std_string_Sg____getslice__(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j){ - return swig::getslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_std_string_Sg____setslice____SWIG_0(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j,std::vector< std::string,std::allocator< std::string > > const &v=std::vector< std::string,std::allocator< std::string > >()){ - swig::setslice(self, i, j, 1, v); - } -SWIGINTERN void std_vector_Sl_std_string_Sg____delslice__(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::difference_type j){ - swig::delslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_std_string_Sg____delitem____SWIG_0(std::vector< std::string > *self,std::vector< std::string >::difference_type i){ - self->erase(swig::getpos(self,i)); - } -SWIGINTERN std::vector< std::string,std::allocator< std::string > > *std_vector_Sl_std_string_Sg____getitem____SWIG_0(std::vector< std::string > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return NULL; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - return swig::getslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_0(std::vector< std::string > *self,PySliceObject *slice,std::vector< std::string,std::allocator< std::string > > const &v){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::setslice(self, id, jd, step, v); - } -SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_1(std::vector< std::string > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_std_string_Sg____delitem____SWIG_1(std::vector< std::string > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN std::vector< std::string >::value_type const &std_vector_Sl_std_string_Sg____getitem____SWIG_1(std::vector< std::string > const *self,std::vector< std::string >::difference_type i){ - return *(swig::cgetpos(self, i)); - } -SWIGINTERN void std_vector_Sl_std_string_Sg____setitem____SWIG_2(std::vector< std::string > *self,std::vector< std::string >::difference_type i,std::vector< std::string >::value_type const &x){ - *(swig::getpos(self,i)) = x; - } -SWIGINTERN void std_vector_Sl_std_string_Sg__append(std::vector< std::string > *self,std::vector< std::string >::value_type const &x){ - self->push_back(x); - } - -#include -#if !defined(SWIG_NO_LLONG_MAX) -# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) -# define LLONG_MAX __LONG_LONG_MAX__ -# define LLONG_MIN (-LLONG_MAX - 1LL) -# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) -# endif -#endif - - -SWIGINTERN int -SWIG_AsVal_int (PyObject * obj, int *val) -{ - long v; - int res = SWIG_AsVal_long (obj, &v); - if (SWIG_IsOK(res)) { - if ((v < INT_MIN || v > INT_MAX)) { - return SWIG_OverflowError; - } else { - if (val) *val = static_cast< int >(v); - } - } - return res; -} - - -SWIGINTERNINLINE PyObject* - SWIG_From_int (int value) -{ - return PyInt_FromLong((long) value); -} - - -namespace swig { - template <> struct traits { - typedef value_category category; - static const char* type_name() { return"int"; } - }; - template <> struct traits_asval { - typedef int value_type; - static int asval(PyObject *obj, value_type *val) { - return SWIG_AsVal_int (obj, val); - } - }; - template <> struct traits_from { - typedef int value_type; - static PyObject *from(const value_type& val) { - return SWIG_From_int (val); - } - }; -} - - - namespace swig { - template <> struct traits > > { - typedef pointer_category category; - static const char* type_name() { - return "std::vector<" "int" "," "std::allocator< int >" " >"; - } - }; - } - -SWIGINTERN swig::SwigPyIterator *std_vector_Sl_int_Sg__iterator(std::vector< int > *self,PyObject **PYTHON_SELF){ - return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); - } -SWIGINTERN bool std_vector_Sl_int_Sg____nonzero__(std::vector< int > const *self){ - return !(self->empty()); - } -SWIGINTERN bool std_vector_Sl_int_Sg____bool__(std::vector< int > const *self){ - return !(self->empty()); - } -SWIGINTERN std::vector< int >::size_type std_vector_Sl_int_Sg____len__(std::vector< int > const *self){ - return self->size(); - } -SWIGINTERN std::vector< int >::value_type std_vector_Sl_int_Sg__pop(std::vector< int > *self){ - if (self->size() == 0) - throw std::out_of_range("pop from empty container"); - std::vector >::value_type x = self->back(); - self->pop_back(); - return x; - } -SWIGINTERN std::vector< int,std::allocator< int > > *std_vector_Sl_int_Sg____getslice__(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j){ - return swig::getslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_int_Sg____setslice____SWIG_0(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j,std::vector< int,std::allocator< int > > const &v=std::vector< int,std::allocator< int > >()){ - swig::setslice(self, i, j, 1, v); - } -SWIGINTERN void std_vector_Sl_int_Sg____delslice__(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::difference_type j){ - swig::delslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_int_Sg____delitem____SWIG_0(std::vector< int > *self,std::vector< int >::difference_type i){ - self->erase(swig::getpos(self,i)); - } -SWIGINTERN std::vector< int,std::allocator< int > > *std_vector_Sl_int_Sg____getitem____SWIG_0(std::vector< int > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return NULL; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - return swig::getslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_0(std::vector< int > *self,PySliceObject *slice,std::vector< int,std::allocator< int > > const &v){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::setslice(self, id, jd, step, v); - } -SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_1(std::vector< int > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_int_Sg____delitem____SWIG_1(std::vector< int > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN std::vector< int >::value_type const &std_vector_Sl_int_Sg____getitem____SWIG_1(std::vector< int > const *self,std::vector< int >::difference_type i){ - return *(swig::cgetpos(self, i)); - } -SWIGINTERN void std_vector_Sl_int_Sg____setitem____SWIG_2(std::vector< int > *self,std::vector< int >::difference_type i,std::vector< int >::value_type const &x){ - *(swig::getpos(self,i)) = x; - } -SWIGINTERN void std_vector_Sl_int_Sg__append(std::vector< int > *self,std::vector< int >::value_type const &x){ - self->push_back(x); - } - -namespace swig { - template <> struct traits { - typedef value_category category; - static const char* type_name() { return"float"; } - }; - template <> struct traits_asval { - typedef float value_type; - static int asval(PyObject *obj, value_type *val) { - return SWIG_AsVal_float (obj, val); - } - }; - template <> struct traits_from { - typedef float value_type; - static PyObject *from(const value_type& val) { - return SWIG_From_float (val); - } - }; -} - - - namespace swig { - template <> struct traits > > { - typedef pointer_category category; - static const char* type_name() { - return "std::vector<" "float" "," "std::allocator< float >" " >"; - } - }; - } - -SWIGINTERN swig::SwigPyIterator *std_vector_Sl_float_Sg__iterator(std::vector< float > *self,PyObject **PYTHON_SELF){ - return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); - } -SWIGINTERN bool std_vector_Sl_float_Sg____nonzero__(std::vector< float > const *self){ - return !(self->empty()); - } -SWIGINTERN bool std_vector_Sl_float_Sg____bool__(std::vector< float > const *self){ - return !(self->empty()); - } -SWIGINTERN std::vector< float >::size_type std_vector_Sl_float_Sg____len__(std::vector< float > const *self){ - return self->size(); - } -SWIGINTERN std::vector< float >::value_type std_vector_Sl_float_Sg__pop(std::vector< float > *self){ - if (self->size() == 0) - throw std::out_of_range("pop from empty container"); - std::vector >::value_type x = self->back(); - self->pop_back(); - return x; - } -SWIGINTERN std::vector< float,std::allocator< float > > *std_vector_Sl_float_Sg____getslice__(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j){ - return swig::getslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_float_Sg____setslice____SWIG_0(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j,std::vector< float,std::allocator< float > > const &v=std::vector< float,std::allocator< float > >()){ - swig::setslice(self, i, j, 1, v); - } -SWIGINTERN void std_vector_Sl_float_Sg____delslice__(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::difference_type j){ - swig::delslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_float_Sg____delitem____SWIG_0(std::vector< float > *self,std::vector< float >::difference_type i){ - self->erase(swig::getpos(self,i)); - } -SWIGINTERN std::vector< float,std::allocator< float > > *std_vector_Sl_float_Sg____getitem____SWIG_0(std::vector< float > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return NULL; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - return swig::getslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_0(std::vector< float > *self,PySliceObject *slice,std::vector< float,std::allocator< float > > const &v){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::setslice(self, id, jd, step, v); - } -SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_1(std::vector< float > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_float_Sg____delitem____SWIG_1(std::vector< float > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN std::vector< float >::value_type const &std_vector_Sl_float_Sg____getitem____SWIG_1(std::vector< float > const *self,std::vector< float >::difference_type i){ - return *(swig::cgetpos(self, i)); - } -SWIGINTERN void std_vector_Sl_float_Sg____setitem____SWIG_2(std::vector< float > *self,std::vector< float >::difference_type i,std::vector< float >::value_type const &x){ - *(swig::getpos(self,i)) = x; - } -SWIGINTERN void std_vector_Sl_float_Sg__append(std::vector< float > *self,std::vector< float >::value_type const &x){ - self->push_back(x); - } - - namespace swig { - template <> struct traits { - typedef pointer_category category; - static const char* type_name() { return"singa::Layer"; } - }; - } - - - namespace swig { - template <> struct traits > > { - typedef value_category category; - static const char* type_name() { - return "std::vector<" "singa::Layer" " *," "std::allocator< singa::Layer * >" " >"; - } - }; - } - -SWIGINTERN swig::SwigPyIterator *std_vector_Sl_singa_Layer_Sm__Sg__iterator(std::vector< singa::Layer * > *self,PyObject **PYTHON_SELF){ - return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); - } -SWIGINTERN bool std_vector_Sl_singa_Layer_Sm__Sg____nonzero__(std::vector< singa::Layer * > const *self){ - return !(self->empty()); - } -SWIGINTERN bool std_vector_Sl_singa_Layer_Sm__Sg____bool__(std::vector< singa::Layer * > const *self){ - return !(self->empty()); - } -SWIGINTERN std::vector< singa::Layer * >::size_type std_vector_Sl_singa_Layer_Sm__Sg____len__(std::vector< singa::Layer * > const *self){ - return self->size(); - } -SWIGINTERN std::vector< singa::Layer * >::value_type std_vector_Sl_singa_Layer_Sm__Sg__pop(std::vector< singa::Layer * > *self){ - if (self->size() == 0) - throw std::out_of_range("pop from empty container"); - std::vector >::value_type x = self->back(); - self->pop_back(); - return x; - } -SWIGINTERN std::vector< singa::Layer *,std::allocator< singa::Layer * > > *std_vector_Sl_singa_Layer_Sm__Sg____getslice__(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::difference_type j){ - return swig::getslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setslice____SWIG_0(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::difference_type j,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &v=std::vector< singa::Layer *,std::allocator< singa::Layer * > >()){ - swig::setslice(self, i, j, 1, v); - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____delslice__(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::difference_type j){ - swig::delslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_0(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i){ - self->erase(swig::getpos(self,i)); - } -SWIGINTERN std::vector< singa::Layer *,std::allocator< singa::Layer * > > *std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_0(std::vector< singa::Layer * > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return NULL; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - return swig::getslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_0(std::vector< singa::Layer * > *self,PySliceObject *slice,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &v){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::setslice(self, id, jd, step, v); - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_1(std::vector< singa::Layer * > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_1(std::vector< singa::Layer * > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN std::vector< singa::Layer * >::value_type std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_1(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i){ - return *(swig::cgetpos(self, i)); - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_2(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::difference_type i,std::vector< singa::Layer * >::value_type x){ - *(swig::getpos(self,i)) = x; - } -SWIGINTERN void std_vector_Sl_singa_Layer_Sm__Sg__append(std::vector< singa::Layer * > *self,std::vector< singa::Layer * >::value_type x){ - self->push_back(x); - } - - namespace swig { - template <> struct traits { - typedef pointer_category category; - static const char* type_name() { return"singa::Param"; } - }; - } - - - namespace swig { - template <> struct traits > > { - typedef value_category category; - static const char* type_name() { - return "std::vector<" "singa::Param" " *," "std::allocator< singa::Param * >" " >"; - } - }; - } - -SWIGINTERN swig::SwigPyIterator *std_vector_Sl_singa_Param_Sm__Sg__iterator(std::vector< singa::Param * > *self,PyObject **PYTHON_SELF){ - return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); - } -SWIGINTERN bool std_vector_Sl_singa_Param_Sm__Sg____nonzero__(std::vector< singa::Param * > const *self){ - return !(self->empty()); - } -SWIGINTERN bool std_vector_Sl_singa_Param_Sm__Sg____bool__(std::vector< singa::Param * > const *self){ - return !(self->empty()); - } -SWIGINTERN std::vector< singa::Param * >::size_type std_vector_Sl_singa_Param_Sm__Sg____len__(std::vector< singa::Param * > const *self){ - return self->size(); - } -SWIGINTERN std::vector< singa::Param * >::value_type std_vector_Sl_singa_Param_Sm__Sg__pop(std::vector< singa::Param * > *self){ - if (self->size() == 0) - throw std::out_of_range("pop from empty container"); - std::vector >::value_type x = self->back(); - self->pop_back(); - return x; - } -SWIGINTERN std::vector< singa::Param *,std::allocator< singa::Param * > > *std_vector_Sl_singa_Param_Sm__Sg____getslice__(std::vector< singa::Param * > *self,std::vector< singa::Param * >::difference_type i,std::vector< singa::Param * >::difference_type j){ - return swig::getslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg____setslice____SWIG_0(std::vector< singa::Param * > *self,std::vector< singa::Param * >::difference_type i,std::vector< singa::Param * >::difference_type j,std::vector< singa::Param *,std::allocator< singa::Param * > > const &v=std::vector< singa::Param *,std::allocator< singa::Param * > >()){ - swig::setslice(self, i, j, 1, v); - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg____delslice__(std::vector< singa::Param * > *self,std::vector< singa::Param * >::difference_type i,std::vector< singa::Param * >::difference_type j){ - swig::delslice(self, i, j, 1); - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg____delitem____SWIG_0(std::vector< singa::Param * > *self,std::vector< singa::Param * >::difference_type i){ - self->erase(swig::getpos(self,i)); - } -SWIGINTERN std::vector< singa::Param *,std::allocator< singa::Param * > > *std_vector_Sl_singa_Param_Sm__Sg____getitem____SWIG_0(std::vector< singa::Param * > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return NULL; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - return swig::getslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg____setitem____SWIG_0(std::vector< singa::Param * > *self,PySliceObject *slice,std::vector< singa::Param *,std::allocator< singa::Param * > > const &v){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::setslice(self, id, jd, step, v); - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg____setitem____SWIG_1(std::vector< singa::Param * > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg____delitem____SWIG_1(std::vector< singa::Param * > *self,PySliceObject *slice){ - Py_ssize_t i, j, step; - if( !PySlice_Check(slice) ) { - SWIG_Error(SWIG_TypeError, "Slice object expected."); - return; - } - PySlice_GetIndices(SWIGPY_SLICE_ARG(slice), (Py_ssize_t)self->size(), &i, &j, &step); - std::vector >::difference_type id = i; - std::vector >::difference_type jd = j; - swig::delslice(self, id, jd, step); - } -SWIGINTERN std::vector< singa::Param * >::value_type std_vector_Sl_singa_Param_Sm__Sg____getitem____SWIG_1(std::vector< singa::Param * > *self,std::vector< singa::Param * >::difference_type i){ - return *(swig::cgetpos(self, i)); - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg____setitem____SWIG_2(std::vector< singa::Param * > *self,std::vector< singa::Param * >::difference_type i,std::vector< singa::Param * >::value_type x){ - *(swig::getpos(self,i)) = x; - } -SWIGINTERN void std_vector_Sl_singa_Param_Sm__Sg__append(std::vector< singa::Param * > *self,std::vector< singa::Param * >::value_type x){ - self->push_back(x); - } - -SWIGINTERN int -SWIG_AsVal_bool (PyObject *obj, bool *val) -{ - int r = PyObject_IsTrue(obj); - if (r == -1) - return SWIG_ERROR; - if (val) *val = r ? true : false; - return SWIG_OK; -} - - -SWIGINTERN int -SWIG_AsArgcArgv(PyObject *input, - swig_type_info *ppchar_info, - size_t *argc, char ***argv, int *owner) -{ - void *vptr; - int res = SWIG_ConvertPtr(input, &vptr, ppchar_info, 0); - if (!SWIG_IsOK(res)) { - int list = 0; - PyErr_Clear(); - list = PyList_Check(input); - if (list || PyTuple_Check(input)) { - size_t i = 0; - size_t size = list ? PyList_Size(input) : PyTuple_Size(input); - if (argc) *argc = size; - if (argv) { - *argv = (new char*[size + 1]); - for (; i < size; ++i) { - PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); - char *cptr = 0; size_t sz = 0; int alloc = 0; - res = SWIG_AsCharPtrAndSize(obj, &cptr, &sz, &alloc); - if (SWIG_IsOK(res)) { - if (cptr && sz) { - (*argv)[i] = (alloc == SWIG_NEWOBJ) ? cptr : reinterpret_cast< char* >(memcpy((new char[sz]), cptr, sizeof(char)*(sz))); - } else { - (*argv)[i] = 0; - } - } else { - return SWIG_TypeError; - } - } - (*argv)[i] = 0; - if (owner) *owner = 1; - } else { - for (; i < size; ++i) { - PyObject *obj = list ? PyList_GetItem(input,i) : PyTuple_GetItem(input,i); - res = SWIG_AsCharPtrAndSize(obj, 0, 0, 0); - if (!SWIG_IsOK(res)) return SWIG_TypeError; - } - if (owner) *owner = 0; - } - return SWIG_OK; - } else { - return SWIG_TypeError; - } - } else { - /* seems dangerous, but the user asked for it... */ - size_t i = 0; - if (argv) { while (*argv[i] != 0) ++i;} - if (argc) *argc = i; - if (owner) *owner = 0; - return SWIG_OK; - } -} - - - - -#ifdef __cplusplus -extern "C" { -#endif -SWIGINTERN PyObject *_wrap_delete_SwigPyIterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_SwigPyIterator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SwigPyIterator" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_value",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_value" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (PyObject *)((swig::SwigPyIterator const *)arg1)->value(); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = result; - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - size_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_incr",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_incr" "', argument " "2"" of type '" "size_t""'"); - } - arg2 = static_cast< size_t >(val2); - try { - result = (swig::SwigPyIterator *)(arg1)->incr(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_incr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_incr",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_incr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (swig::SwigPyIterator *)(arg1)->incr(); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_incr(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 1) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_SwigPyIterator_incr__SWIG_1(self, args); - } - } - if (argc == 2) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_SwigPyIterator_incr__SWIG_0(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_incr'.\n" - " Possible C/C++ prototypes are:\n" - " swig::SwigPyIterator::incr(size_t)\n" - " swig::SwigPyIterator::incr()\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - size_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_decr",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_decr" "', argument " "2"" of type '" "size_t""'"); - } - arg2 = static_cast< size_t >(val2); - try { - result = (swig::SwigPyIterator *)(arg1)->decr(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_decr__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_decr",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_decr" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (swig::SwigPyIterator *)(arg1)->decr(); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_decr(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 1) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_SwigPyIterator_decr__SWIG_1(self, args); - } - } - if (argc == 2) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_SwigPyIterator_decr__SWIG_0(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SwigPyIterator_decr'.\n" - " Possible C/C++ prototypes are:\n" - " swig::SwigPyIterator::decr(size_t)\n" - " swig::SwigPyIterator::decr()\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_distance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - ptrdiff_t result; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_distance",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_distance" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_distance" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - try { - result = ((swig::SwigPyIterator const *)arg1)->distance((swig::SwigPyIterator const &)*arg2); - } - catch(std::invalid_argument &_e) { - SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; - } - - resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_equal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_equal",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_equal" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator_equal" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - try { - result = (bool)((swig::SwigPyIterator const *)arg1)->equal((swig::SwigPyIterator const &)*arg2); - } - catch(std::invalid_argument &_e) { - SWIG_Python_Raise(SWIG_NewPointerObj((new std::invalid_argument(static_cast< const std::invalid_argument& >(_e))),SWIGTYPE_p_std__invalid_argument,SWIG_POINTER_OWN), "std::invalid_argument", SWIGTYPE_p_std__invalid_argument); SWIG_fail; - } - - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_copy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_copy",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_copy" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->copy(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_next",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_next" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (PyObject *)(arg1)->next(); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = result; - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___next__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator___next__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___next__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (PyObject *)(arg1)->__next__(); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = result; - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_previous(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:SwigPyIterator_previous",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_previous" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - try { - result = (PyObject *)(arg1)->previous(); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = result; - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator_advance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator_advance",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator_advance" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator_advance" "', argument " "2"" of type '" "ptrdiff_t""'"); - } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *)(arg1)->advance(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___eq__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___eq__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___eq__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - result = (bool)((swig::SwigPyIterator const *)arg1)->operator ==((swig::SwigPyIterator const &)*arg2); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___ne__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___ne__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___ne__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___ne__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - result = (bool)((swig::SwigPyIterator const *)arg1)->operator !=((swig::SwigPyIterator const &)*arg2); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___iadd__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___iadd__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___iadd__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___iadd__" "', argument " "2"" of type '" "ptrdiff_t""'"); - } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *) &(arg1)->operator +=(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___isub__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___isub__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___isub__" "', argument " "1"" of type '" "swig::SwigPyIterator *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___isub__" "', argument " "2"" of type '" "ptrdiff_t""'"); - } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *) &(arg1)->operator -=(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___add__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___add__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___add__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___add__" "', argument " "2"" of type '" "ptrdiff_t""'"); - } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator +(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - ptrdiff_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - swig::SwigPyIterator *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "ptrdiff_t""'"); - } - arg2 = static_cast< ptrdiff_t >(val2); - try { - result = (swig::SwigPyIterator *)((swig::SwigPyIterator const *)arg1)->operator -(arg2); - } - catch(swig::stop_iteration &_e) { - { - (void)_e; - SWIG_SetErrorObj(PyExc_StopIteration, SWIG_Py_Void()); - SWIG_fail; - } - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___sub____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - swig::SwigPyIterator *arg1 = (swig::SwigPyIterator *) 0 ; - swig::SwigPyIterator *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - ptrdiff_t result; - - if (!PyArg_ParseTuple(args,(char *)"OO:SwigPyIterator___sub__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_swig__SwigPyIterator, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SwigPyIterator___sub__" "', argument " "1"" of type '" "swig::SwigPyIterator const *""'"); - } - arg1 = reinterpret_cast< swig::SwigPyIterator * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_swig__SwigPyIterator, 0 | 0); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SwigPyIterator___sub__" "', argument " "2"" of type '" "swig::SwigPyIterator const &""'"); - } - arg2 = reinterpret_cast< swig::SwigPyIterator * >(argp2); - result = ((swig::SwigPyIterator const *)arg1)->operator -((swig::SwigPyIterator const &)*arg2); - resultobj = SWIG_From_ptrdiff_t(static_cast< ptrdiff_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_SwigPyIterator___sub__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); - if (_v) { - int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_SwigPyIterator___sub____SWIG_1(self, args); - } - } - } - if (argc == 2) { - int _v; - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_swig__SwigPyIterator, 0); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_SwigPyIterator___sub____SWIG_0(self, args); - } - } - } - -fail: - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; -} - - -SWIGINTERN PyObject *SwigPyIterator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_swig__SwigPyIterator, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_new_floatArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - size_t arg1 ; - size_t val1 ; - int ecode1 = 0 ; - PyObject * obj0 = 0 ; - floatArray *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_floatArray",&obj0)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_floatArray" "', argument " "1"" of type '" "size_t""'"); - } - arg1 = static_cast< size_t >(val1); - result = (floatArray *)new_floatArray(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_floatArray, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_floatArray(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - floatArray *arg1 = (floatArray *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_floatArray",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_floatArray" "', argument " "1"" of type '" "floatArray *""'"); - } - arg1 = reinterpret_cast< floatArray * >(argp1); - delete_floatArray(arg1); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatArray___getitem__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - floatArray *arg1 = (floatArray *) 0 ; - size_t arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - float result; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatArray___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray___getitem__" "', argument " "1"" of type '" "floatArray *""'"); - } - arg1 = reinterpret_cast< floatArray * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatArray___getitem__" "', argument " "2"" of type '" "size_t""'"); - } - arg2 = static_cast< size_t >(val2); - result = (float)floatArray___getitem__(arg1,arg2); - resultobj = SWIG_From_float(static_cast< float >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatArray___setitem__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - floatArray *arg1 = (floatArray *) 0 ; - size_t arg2 ; - float arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - float val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatArray___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray___setitem__" "', argument " "1"" of type '" "floatArray *""'"); - } - arg1 = reinterpret_cast< floatArray * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatArray___setitem__" "', argument " "2"" of type '" "size_t""'"); - } - arg2 = static_cast< size_t >(val2); - ecode3 = SWIG_AsVal_float(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatArray___setitem__" "', argument " "3"" of type '" "float""'"); - } - arg3 = static_cast< float >(val3); - floatArray___setitem__(arg1,arg2,arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatArray_cast(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - floatArray *arg1 = (floatArray *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - float *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatArray_cast",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_floatArray, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray_cast" "', argument " "1"" of type '" "floatArray *""'"); - } - arg1 = reinterpret_cast< floatArray * >(argp1); - result = (float *)floatArray_cast(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_float, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatArray_frompointer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - float *arg1 = (float *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - floatArray *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatArray_frompointer",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_float, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatArray_frompointer" "', argument " "1"" of type '" "float *""'"); - } - arg1 = reinterpret_cast< float * >(argp1); - result = (floatArray *)floatArray_frompointer(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_floatArray, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *floatArray_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_floatArray, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_strVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - PyObject **arg2 = (PyObject **) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - arg2 = &obj0; - if (!PyArg_ParseTuple(args,(char *)"O:strVector_iterator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_iterator" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (swig::SwigPyIterator *)std_vector_Sl_std_string_Sg__iterator(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector___nonzero__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___nonzero__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (bool)std_vector_Sl_std_string_Sg____nonzero__((std::vector< std::string > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector___bool__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___bool__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (bool)std_vector_Sl_std_string_Sg____bool__((std::vector< std::string > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector___len__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___len__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = std_vector_Sl_std_string_Sg____len__((std::vector< std::string > const *)arg1); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_pop",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_pop" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - try { - result = std_vector_Sl_std_string_Sg__pop(arg1); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_From_std_string(static_cast< std::string >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::difference_type arg2 ; - std::vector< std::string >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< std::string,std::allocator< std::string > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___getslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___getslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg2 = static_cast< std::vector< std::string >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___getslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg3 = static_cast< std::vector< std::string >::difference_type >(val3); - try { - result = (std::vector< std::string,std::allocator< std::string > > *)std_vector_Sl_std_string_Sg____getslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::difference_type arg2 ; - std::vector< std::string >::difference_type arg3 ; - std::vector< std::string,std::allocator< std::string > > *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - int res4 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:strVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___setslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg2 = static_cast< std::vector< std::string >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___setslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg3 = static_cast< std::vector< std::string >::difference_type >(val3); - { - std::vector > *ptr = (std::vector > *)0; - res4 = swig::asptr(obj3, &ptr); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "strVector___setslice__" "', argument " "4"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector___setslice__" "', argument " "4"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); - } - arg4 = ptr; - } - try { - std_vector_Sl_std_string_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< std::string,std::allocator< std::string > > const &)*arg4); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res4)) delete arg4; - return resultobj; -fail: - if (SWIG_IsNewObj(res4)) delete arg4; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::difference_type arg2 ; - std::vector< std::string >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___setslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg2 = static_cast< std::vector< std::string >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___setslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg3 = static_cast< std::vector< std::string >::difference_type >(val3); - try { - std_vector_Sl_std_string_Sg____setslice____SWIG_0(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___setslice__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_strVector___setslice____SWIG_1(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = swig::asptr(argv[3], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_strVector___setslice____SWIG_0(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___setslice__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::__setslice__(std::vector< std::string >::difference_type,std::vector< std::string >::difference_type,std::vector< std::string,std::allocator< std::string > > const &)\n" - " std::vector< std::string >::__setslice__(std::vector< std::string >::difference_type,std::vector< std::string >::difference_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_strVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::difference_type arg2 ; - std::vector< std::string >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___delslice__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___delslice__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg2 = static_cast< std::vector< std::string >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector___delslice__" "', argument " "3"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg3 = static_cast< std::vector< std::string >::difference_type >(val3); - try { - std_vector_Sl_std_string_Sg____delslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___delitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___delitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg2 = static_cast< std::vector< std::string >::difference_type >(val2); - try { - std_vector_Sl_std_string_Sg____delitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< std::string,std::allocator< std::string > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___getitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - result = (std::vector< std::string,std::allocator< std::string > > *)std_vector_Sl_std_string_Sg____getitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - std::vector< std::string,std::allocator< std::string > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); - } - arg3 = ptr; - } - try { - std_vector_Sl_std_string_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< std::string,std::allocator< std::string > > const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector___setitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_std_string_Sg____setitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___delitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_std_string_Sg____delitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___delitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_strVector___delitem____SWIG_1(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_strVector___delitem____SWIG_0(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___delitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::__delitem__(std::vector< std::string >::difference_type)\n" - " std::vector< std::string >::__delitem__(PySliceObject *)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_strVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< std::string >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___getitem__" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___getitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg2 = static_cast< std::vector< std::string >::difference_type >(val2); - try { - result = (std::vector< std::string >::value_type *) &std_vector_Sl_std_string_Sg____getitem____SWIG_1((std::vector< std::string > const *)arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___getitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_strVector___getitem____SWIG_0(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_strVector___getitem____SWIG_1(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___getitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::__getitem__(PySliceObject *)\n" - " std::vector< std::string >::__getitem__(std::vector< std::string >::difference_type) const\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_strVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::difference_type arg2 ; - std::vector< std::string >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector___setitem__" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector___setitem__" "', argument " "2"" of type '" "std::vector< std::string >::difference_type""'"); - } - arg2 = static_cast< std::vector< std::string >::difference_type >(val2); - { - std::string *ptr = (std::string *)0; - res3 = SWIG_AsPtr_std_string(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector___setitem__" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg3 = ptr; - } - try { - std_vector_Sl_std_string_Sg____setitem____SWIG_2(arg1,arg2,(std::string const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector___setitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_strVector___setitem____SWIG_1(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - int res = swig::asptr(argv[2], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_strVector___setitem____SWIG_0(self, args); - } - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_strVector___setitem____SWIG_2(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector___setitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::__setitem__(PySliceObject *,std::vector< std::string,std::allocator< std::string > > const &)\n" - " std::vector< std::string >::__setitem__(PySliceObject *)\n" - " std::vector< std::string >::__setitem__(std::vector< std::string >::difference_type,std::vector< std::string >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_strVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::value_type *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res2 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector_append",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_append" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - { - std::string *ptr = (std::string *)0; - res2 = SWIG_AsPtr_std_string(obj1, &ptr); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strVector_append" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_append" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg2 = ptr; - } - std_vector_Sl_std_string_Sg__append(arg1,(std::string const &)*arg2); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res2)) delete arg2; - return resultobj; -fail: - if (SWIG_IsNewObj(res2)) delete arg2; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_strVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_strVector")) SWIG_fail; - result = (std::vector< std::string > *)new std::vector< std::string >(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_strVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = 0 ; - int res1 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - std::vector< std::string > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_strVector",&obj0)) SWIG_fail; - { - std::vector > *ptr = (std::vector > *)0; - res1 = swig::asptr(obj0, &ptr); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string > const &""'"); - } - arg1 = ptr; - } - result = (std::vector< std::string > *)new std::vector< std::string >((std::vector< std::string > const &)*arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); - if (SWIG_IsNewObj(res1)) delete arg1; - return resultobj; -fail: - if (SWIG_IsNewObj(res1)) delete arg1; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_empty",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_empty" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (bool)((std::vector< std::string > const *)arg1)->empty(); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_size",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_size" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = ((std::vector< std::string > const *)arg1)->size(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_clear",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_clear" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - (arg1)->clear(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string > *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector_swap",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_swap" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strVector_swap" "', argument " "2"" of type '" "std::vector< std::string > &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_swap" "', argument " "2"" of type '" "std::vector< std::string > &""'"); - } - arg2 = reinterpret_cast< std::vector< std::string > * >(argp2); - (arg1)->swap(*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - SwigValueWrapper< std::allocator< std::string > > result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_get_allocator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_get_allocator" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = ((std::vector< std::string > const *)arg1)->get_allocator(); - resultobj = SWIG_NewPointerObj((new std::vector< std::string >::allocator_type(static_cast< const std::vector< std::string >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_std__string_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_begin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_begin" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (arg1)->begin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_end",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_end" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (arg1)->end(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_rbegin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_rbegin" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (arg1)->rbegin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_rend",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_rend" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (arg1)->rend(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_strVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string >::size_type arg1 ; - size_t val1 ; - int ecode1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_strVector",&obj0)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string >::size_type""'"); - } - arg1 = static_cast< std::vector< std::string >::size_type >(val1); - result = (std::vector< std::string > *)new std::vector< std::string >(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_pop_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_pop_back" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - (arg1)->pop_back(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector_resize",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_resize" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_resize" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); - } - arg2 = static_cast< std::vector< std::string >::size_type >(val2); - (arg1)->resize(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::iterator arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< std::string >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector_erase",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_erase" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } - } - result = (arg1)->erase(arg2); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::iterator arg2 ; - std::vector< std::string >::iterator arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - swig::SwigPyIterator *iter3 = 0 ; - int res3 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< std::string >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_erase" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } - } - res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res3) || !iter3) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "3"" of type '" "std::vector< std::string >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); - if (iter_t) { - arg3 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_erase" "', argument " "3"" of type '" "std::vector< std::string >::iterator""'"); - } - } - result = (arg1)->erase(arg2,arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_erase(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_strVector_erase__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_strVector_erase__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector_erase'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::erase(std::vector< std::string >::iterator)\n" - " std::vector< std::string >::erase(std::vector< std::string >::iterator,std::vector< std::string >::iterator)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_new_strVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string >::size_type arg1 ; - std::vector< std::string >::value_type *arg2 = 0 ; - size_t val1 ; - int ecode1 = 0 ; - int res2 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< std::string > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:new_strVector",&obj0,&obj1)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_strVector" "', argument " "1"" of type '" "std::vector< std::string >::size_type""'"); - } - arg1 = static_cast< std::vector< std::string >::size_type >(val1); - { - std::string *ptr = (std::string *)0; - res2 = SWIG_AsPtr_std_string(obj1, &ptr); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_strVector" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_strVector" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg2 = ptr; - } - result = (std::vector< std::string > *)new std::vector< std::string >(arg1,(std::vector< std::string >::value_type const &)*arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_NEW | 0 ); - if (SWIG_IsNewObj(res2)) delete arg2; - return resultobj; -fail: - if (SWIG_IsNewObj(res2)) delete arg2; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_strVector(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 0) { - return _wrap_new_strVector__SWIG_0(self, args); - } - if (argc == 1) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_new_strVector__SWIG_2(self, args); - } - } - if (argc == 1) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_strVector__SWIG_1(self, args); - } - } - if (argc == 2) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_strVector__SWIG_3(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_strVector'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::vector()\n" - " std::vector< std::string >::vector(std::vector< std::string > const &)\n" - " std::vector< std::string >::vector(std::vector< std::string >::size_type)\n" - " std::vector< std::string >::vector(std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_strVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::value_type *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res2 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector_push_back",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_push_back" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - { - std::string *ptr = (std::string *)0; - res2 = SWIG_AsPtr_std_string(obj1, &ptr); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "strVector_push_back" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_push_back" "', argument " "2"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg2 = ptr; - } - (arg1)->push_back((std::vector< std::string >::value_type const &)*arg2); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res2)) delete arg2; - return resultobj; -fail: - if (SWIG_IsNewObj(res2)) delete arg2; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_front",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_front" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (std::vector< std::string >::value_type *) &((std::vector< std::string > const *)arg1)->front(); - resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_back" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = (std::vector< std::string >::value_type *) &((std::vector< std::string > const *)arg1)->back(); - resultobj = SWIG_From_std_string(static_cast< std::string >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::size_type arg2 ; - std::vector< std::string >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_assign" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_assign" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); - } - arg2 = static_cast< std::vector< std::string >::size_type >(val2); - { - std::string *ptr = (std::string *)0; - res3 = SWIG_AsPtr_std_string(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector_assign" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_assign" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg3 = ptr; - } - (arg1)->assign(arg2,(std::vector< std::string >::value_type const &)*arg3); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::size_type arg2 ; - std::vector< std::string >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_resize" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_resize" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); - } - arg2 = static_cast< std::vector< std::string >::size_type >(val2); - { - std::string *ptr = (std::string *)0; - res3 = SWIG_AsPtr_std_string(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector_resize" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_resize" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg3 = ptr; - } - (arg1)->resize(arg2,(std::vector< std::string >::value_type const &)*arg3); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_resize(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_strVector_resize__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_strVector_resize__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector_resize'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::resize(std::vector< std::string >::size_type)\n" - " std::vector< std::string >::resize(std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_strVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::iterator arg2 ; - std::vector< std::string >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< std::string >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:strVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_insert" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } - } - { - std::string *ptr = (std::string *)0; - res3 = SWIG_AsPtr_std_string(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "strVector_insert" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_insert" "', argument " "3"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg3 = ptr; - } - result = (arg1)->insert(arg2,(std::vector< std::string >::value_type const &)*arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< std::string >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::iterator arg2 ; - std::vector< std::string >::size_type arg3 ; - std::vector< std::string >::value_type *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - size_t val3 ; - int ecode3 = 0 ; - int res4 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:strVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_insert" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "strVector_insert" "', argument " "2"" of type '" "std::vector< std::string >::iterator""'"); - } - } - ecode3 = SWIG_AsVal_size_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "strVector_insert" "', argument " "3"" of type '" "std::vector< std::string >::size_type""'"); - } - arg3 = static_cast< std::vector< std::string >::size_type >(val3); - { - std::string *ptr = (std::string *)0; - res4 = SWIG_AsPtr_std_string(obj3, &ptr); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "strVector_insert" "', argument " "4"" of type '" "std::vector< std::string >::value_type const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "strVector_insert" "', argument " "4"" of type '" "std::vector< std::string >::value_type const &""'"); - } - arg4 = ptr; - } - (arg1)->insert(arg2,arg3,(std::vector< std::string >::value_type const &)*arg4); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res4)) delete arg4; - return resultobj; -fail: - if (SWIG_IsNewObj(res4)) delete arg4; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_insert(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_strVector_insert__SWIG_0(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = SWIG_AsPtr_std_string(argv[3], (std::string**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_strVector_insert__SWIG_1(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'strVector_insert'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< std::string >::insert(std::vector< std::string >::iterator,std::vector< std::string >::value_type const &)\n" - " std::vector< std::string >::insert(std::vector< std::string >::iterator,std::vector< std::string >::size_type,std::vector< std::string >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_strVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - std::vector< std::string >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:strVector_reserve",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_reserve" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "strVector_reserve" "', argument " "2"" of type '" "std::vector< std::string >::size_type""'"); - } - arg2 = static_cast< std::vector< std::string >::size_type >(val2); - (arg1)->reserve(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_strVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< std::string >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:strVector_capacity",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "strVector_capacity" "', argument " "1"" of type '" "std::vector< std::string > const *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - result = ((std::vector< std::string > const *)arg1)->capacity(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_strVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< std::string > *arg1 = (std::vector< std::string > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_strVector",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_strVector" "', argument " "1"" of type '" "std::vector< std::string > *""'"); - } - arg1 = reinterpret_cast< std::vector< std::string > * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *strVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_intVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - PyObject **arg2 = (PyObject **) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - arg2 = &obj0; - if (!PyArg_ParseTuple(args,(char *)"O:intVector_iterator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_iterator" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (swig::SwigPyIterator *)std_vector_Sl_int_Sg__iterator(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector___nonzero__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___nonzero__" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (bool)std_vector_Sl_int_Sg____nonzero__((std::vector< int > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector___bool__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___bool__" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (bool)std_vector_Sl_int_Sg____bool__((std::vector< int > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector___len__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___len__" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = std_vector_Sl_int_Sg____len__((std::vector< int > const *)arg1); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_pop",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_pop" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - try { - result = (std::vector< int >::value_type)std_vector_Sl_int_Sg__pop(arg1); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_From_int(static_cast< int >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::difference_type arg2 ; - std::vector< int >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< int,std::allocator< int > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___getslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___getslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); - } - arg2 = static_cast< std::vector< int >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___getslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); - } - arg3 = static_cast< std::vector< int >::difference_type >(val3); - try { - result = (std::vector< int,std::allocator< int > > *)std_vector_Sl_int_Sg____getslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::difference_type arg2 ; - std::vector< int >::difference_type arg3 ; - std::vector< int,std::allocator< int > > *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - int res4 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:intVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___setslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); - } - arg2 = static_cast< std::vector< int >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___setslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); - } - arg3 = static_cast< std::vector< int >::difference_type >(val3); - { - std::vector > *ptr = (std::vector > *)0; - res4 = swig::asptr(obj3, &ptr); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "intVector___setslice__" "', argument " "4"" of type '" "std::vector< int,std::allocator< int > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "intVector___setslice__" "', argument " "4"" of type '" "std::vector< int,std::allocator< int > > const &""'"); - } - arg4 = ptr; - } - try { - std_vector_Sl_int_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< int,std::allocator< int > > const &)*arg4); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res4)) delete arg4; - return resultobj; -fail: - if (SWIG_IsNewObj(res4)) delete arg4; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::difference_type arg2 ; - std::vector< int >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___setslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); - } - arg2 = static_cast< std::vector< int >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___setslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); - } - arg3 = static_cast< std::vector< int >::difference_type >(val3); - try { - std_vector_Sl_int_Sg____setslice____SWIG_0(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___setslice__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector___setslice____SWIG_1(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = swig::asptr(argv[3], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_intVector___setslice____SWIG_0(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___setslice__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::__setslice__(std::vector< int >::difference_type,std::vector< int >::difference_type,std::vector< int,std::allocator< int > > const &)\n" - " std::vector< int >::__setslice__(std::vector< int >::difference_type,std::vector< int >::difference_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_intVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::difference_type arg2 ; - std::vector< int >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___delslice__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___delslice__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); - } - arg2 = static_cast< std::vector< int >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___delslice__" "', argument " "3"" of type '" "std::vector< int >::difference_type""'"); - } - arg3 = static_cast< std::vector< int >::difference_type >(val3); - try { - std_vector_Sl_int_Sg____delslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___delitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___delitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); - } - arg2 = static_cast< std::vector< int >::difference_type >(val2); - try { - std_vector_Sl_int_Sg____delitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< int,std::allocator< int > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___getitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - result = (std::vector< int,std::allocator< int > > *)std_vector_Sl_int_Sg____getitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - std::vector< int,std::allocator< int > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "intVector___setitem__" "', argument " "3"" of type '" "std::vector< int,std::allocator< int > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "intVector___setitem__" "', argument " "3"" of type '" "std::vector< int,std::allocator< int > > const &""'"); - } - arg3 = ptr; - } - try { - std_vector_Sl_int_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< int,std::allocator< int > > const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector___setitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_int_Sg____setitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___delitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_int_Sg____delitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___delitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_intVector___delitem____SWIG_1(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector___delitem____SWIG_0(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___delitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::__delitem__(std::vector< int >::difference_type)\n" - " std::vector< int >::__delitem__(PySliceObject *)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_intVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< int >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___getitem__" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___getitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); - } - arg2 = static_cast< std::vector< int >::difference_type >(val2); - try { - result = (std::vector< int >::value_type *) &std_vector_Sl_int_Sg____getitem____SWIG_1((std::vector< int > const *)arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_From_int(static_cast< int >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___getitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_intVector___getitem____SWIG_0(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector___getitem____SWIG_1(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___getitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::__getitem__(PySliceObject *)\n" - " std::vector< int >::__getitem__(std::vector< int >::difference_type) const\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_intVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::difference_type arg2 ; - std::vector< int >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - std::vector< int >::value_type temp3 ; - int val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector___setitem__" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector___setitem__" "', argument " "2"" of type '" "std::vector< int >::difference_type""'"); - } - arg2 = static_cast< std::vector< int >::difference_type >(val2); - ecode3 = SWIG_AsVal_int(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector___setitem__" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); - } - temp3 = static_cast< std::vector< int >::value_type >(val3); - arg3 = &temp3; - try { - std_vector_Sl_int_Sg____setitem____SWIG_2(arg1,arg2,(int const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector___setitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_intVector___setitem____SWIG_1(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - int res = swig::asptr(argv[2], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_intVector___setitem____SWIG_0(self, args); - } - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_int(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector___setitem____SWIG_2(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector___setitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::__setitem__(PySliceObject *,std::vector< int,std::allocator< int > > const &)\n" - " std::vector< int >::__setitem__(PySliceObject *)\n" - " std::vector< int >::__setitem__(std::vector< int >::difference_type,std::vector< int >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_intVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::value_type *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - std::vector< int >::value_type temp2 ; - int val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector_append",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_append" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_append" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); - } - temp2 = static_cast< std::vector< int >::value_type >(val2); - arg2 = &temp2; - std_vector_Sl_int_Sg__append(arg1,(int const &)*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_intVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_intVector")) SWIG_fail; - result = (std::vector< int > *)new std::vector< int >(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_intVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = 0 ; - int res1 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - std::vector< int > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_intVector",&obj0)) SWIG_fail; - { - std::vector > *ptr = (std::vector > *)0; - res1 = swig::asptr(obj0, &ptr); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int > const &""'"); - } - arg1 = ptr; - } - result = (std::vector< int > *)new std::vector< int >((std::vector< int > const &)*arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); - if (SWIG_IsNewObj(res1)) delete arg1; - return resultobj; -fail: - if (SWIG_IsNewObj(res1)) delete arg1; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_empty",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_empty" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (bool)((std::vector< int > const *)arg1)->empty(); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_size",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_size" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = ((std::vector< int > const *)arg1)->size(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_clear",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_clear" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - (arg1)->clear(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int > *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector_swap",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_swap" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "intVector_swap" "', argument " "2"" of type '" "std::vector< int > &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "intVector_swap" "', argument " "2"" of type '" "std::vector< int > &""'"); - } - arg2 = reinterpret_cast< std::vector< int > * >(argp2); - (arg1)->swap(*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - SwigValueWrapper< std::allocator< int > > result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_get_allocator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_get_allocator" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = ((std::vector< int > const *)arg1)->get_allocator(); - resultobj = SWIG_NewPointerObj((new std::vector< int >::allocator_type(static_cast< const std::vector< int >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_int_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_begin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_begin" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (arg1)->begin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_end",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_end" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (arg1)->end(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_rbegin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_rbegin" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (arg1)->rbegin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_rend",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_rend" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (arg1)->rend(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_intVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int >::size_type arg1 ; - size_t val1 ; - int ecode1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_intVector",&obj0)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int >::size_type""'"); - } - arg1 = static_cast< std::vector< int >::size_type >(val1); - result = (std::vector< int > *)new std::vector< int >(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_pop_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_pop_back" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - (arg1)->pop_back(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector_resize",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_resize" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_resize" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); - } - arg2 = static_cast< std::vector< int >::size_type >(val2); - (arg1)->resize(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::iterator arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< int >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector_erase",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_erase" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } - } - result = (arg1)->erase(arg2); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::iterator arg2 ; - std::vector< int >::iterator arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - swig::SwigPyIterator *iter3 = 0 ; - int res3 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< int >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_erase" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } - } - res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res3) || !iter3) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "3"" of type '" "std::vector< int >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); - if (iter_t) { - arg3 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_erase" "', argument " "3"" of type '" "std::vector< int >::iterator""'"); - } - } - result = (arg1)->erase(arg2,arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_erase(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_intVector_erase__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_intVector_erase__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector_erase'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::erase(std::vector< int >::iterator)\n" - " std::vector< int >::erase(std::vector< int >::iterator,std::vector< int >::iterator)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_new_intVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int >::size_type arg1 ; - std::vector< int >::value_type *arg2 = 0 ; - size_t val1 ; - int ecode1 = 0 ; - std::vector< int >::value_type temp2 ; - int val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< int > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:new_intVector",&obj0,&obj1)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_intVector" "', argument " "1"" of type '" "std::vector< int >::size_type""'"); - } - arg1 = static_cast< std::vector< int >::size_type >(val1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_intVector" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); - } - temp2 = static_cast< std::vector< int >::value_type >(val2); - arg2 = &temp2; - result = (std::vector< int > *)new std::vector< int >(arg1,(std::vector< int >::value_type const &)*arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_intVector(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 0) { - return _wrap_new_intVector__SWIG_0(self, args); - } - if (argc == 1) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_new_intVector__SWIG_2(self, args); - } - } - if (argc == 1) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_intVector__SWIG_1(self, args); - } - } - if (argc == 2) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_int(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_new_intVector__SWIG_3(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_intVector'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::vector()\n" - " std::vector< int >::vector(std::vector< int > const &)\n" - " std::vector< int >::vector(std::vector< int >::size_type)\n" - " std::vector< int >::vector(std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_intVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::value_type *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - std::vector< int >::value_type temp2 ; - int val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector_push_back",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_push_back" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_push_back" "', argument " "2"" of type '" "std::vector< int >::value_type""'"); - } - temp2 = static_cast< std::vector< int >::value_type >(val2); - arg2 = &temp2; - (arg1)->push_back((std::vector< int >::value_type const &)*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_front",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_front" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (std::vector< int >::value_type *) &((std::vector< int > const *)arg1)->front(); - resultobj = SWIG_From_int(static_cast< int >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_back" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = (std::vector< int >::value_type *) &((std::vector< int > const *)arg1)->back(); - resultobj = SWIG_From_int(static_cast< int >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::size_type arg2 ; - std::vector< int >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - std::vector< int >::value_type temp3 ; - int val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_assign" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_assign" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); - } - arg2 = static_cast< std::vector< int >::size_type >(val2); - ecode3 = SWIG_AsVal_int(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_assign" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); - } - temp3 = static_cast< std::vector< int >::value_type >(val3); - arg3 = &temp3; - (arg1)->assign(arg2,(std::vector< int >::value_type const &)*arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::size_type arg2 ; - std::vector< int >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - std::vector< int >::value_type temp3 ; - int val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_resize" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_resize" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); - } - arg2 = static_cast< std::vector< int >::size_type >(val2); - ecode3 = SWIG_AsVal_int(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_resize" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); - } - temp3 = static_cast< std::vector< int >::value_type >(val3); - arg3 = &temp3; - (arg1)->resize(arg2,(std::vector< int >::value_type const &)*arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_resize(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector_resize__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_int(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector_resize__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector_resize'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::resize(std::vector< int >::size_type)\n" - " std::vector< int >::resize(std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_intVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::iterator arg2 ; - std::vector< int >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - std::vector< int >::value_type temp3 ; - int val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< int >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:intVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_insert" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } - } - ecode3 = SWIG_AsVal_int(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_insert" "', argument " "3"" of type '" "std::vector< int >::value_type""'"); - } - temp3 = static_cast< std::vector< int >::value_type >(val3); - arg3 = &temp3; - result = (arg1)->insert(arg2,(std::vector< int >::value_type const &)*arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< int >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::iterator arg2 ; - std::vector< int >::size_type arg3 ; - std::vector< int >::value_type *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - size_t val3 ; - int ecode3 = 0 ; - std::vector< int >::value_type temp4 ; - int val4 ; - int ecode4 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:intVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_insert" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "intVector_insert" "', argument " "2"" of type '" "std::vector< int >::iterator""'"); - } - } - ecode3 = SWIG_AsVal_size_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "intVector_insert" "', argument " "3"" of type '" "std::vector< int >::size_type""'"); - } - arg3 = static_cast< std::vector< int >::size_type >(val3); - ecode4 = SWIG_AsVal_int(obj3, &val4); - if (!SWIG_IsOK(ecode4)) { - SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "intVector_insert" "', argument " "4"" of type '" "std::vector< int >::value_type""'"); - } - temp4 = static_cast< std::vector< int >::value_type >(val4); - arg4 = &temp4; - (arg1)->insert(arg2,arg3,(std::vector< int >::value_type const &)*arg4); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_insert(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - { - int res = SWIG_AsVal_int(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector_insert__SWIG_0(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_int(argv[3], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_intVector_insert__SWIG_1(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'intVector_insert'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< int >::insert(std::vector< int >::iterator,std::vector< int >::value_type const &)\n" - " std::vector< int >::insert(std::vector< int >::iterator,std::vector< int >::size_type,std::vector< int >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_intVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - std::vector< int >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:intVector_reserve",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_reserve" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "intVector_reserve" "', argument " "2"" of type '" "std::vector< int >::size_type""'"); - } - arg2 = static_cast< std::vector< int >::size_type >(val2); - (arg1)->reserve(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_intVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:intVector_capacity",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "intVector_capacity" "', argument " "1"" of type '" "std::vector< int > const *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - result = ((std::vector< int > const *)arg1)->capacity(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_intVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< int > *arg1 = (std::vector< int > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_intVector",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_intVector" "', argument " "1"" of type '" "std::vector< int > *""'"); - } - arg1 = reinterpret_cast< std::vector< int > * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *intVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_floatVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - PyObject **arg2 = (PyObject **) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - arg2 = &obj0; - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_iterator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_iterator" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (swig::SwigPyIterator *)std_vector_Sl_float_Sg__iterator(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector___nonzero__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___nonzero__" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (bool)std_vector_Sl_float_Sg____nonzero__((std::vector< float > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector___bool__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___bool__" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (bool)std_vector_Sl_float_Sg____bool__((std::vector< float > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector___len__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___len__" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = std_vector_Sl_float_Sg____len__((std::vector< float > const *)arg1); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_pop",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_pop" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - try { - result = (std::vector< float >::value_type)std_vector_Sl_float_Sg__pop(arg1); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_From_float(static_cast< float >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::difference_type arg2 ; - std::vector< float >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< float,std::allocator< float > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___getslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___getslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); - } - arg2 = static_cast< std::vector< float >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___getslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); - } - arg3 = static_cast< std::vector< float >::difference_type >(val3); - try { - result = (std::vector< float,std::allocator< float > > *)std_vector_Sl_float_Sg____getslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::difference_type arg2 ; - std::vector< float >::difference_type arg3 ; - std::vector< float,std::allocator< float > > *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - int res4 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:floatVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___setslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); - } - arg2 = static_cast< std::vector< float >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___setslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); - } - arg3 = static_cast< std::vector< float >::difference_type >(val3); - { - std::vector > *ptr = (std::vector > *)0; - res4 = swig::asptr(obj3, &ptr); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "floatVector___setslice__" "', argument " "4"" of type '" "std::vector< float,std::allocator< float > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "floatVector___setslice__" "', argument " "4"" of type '" "std::vector< float,std::allocator< float > > const &""'"); - } - arg4 = ptr; - } - try { - std_vector_Sl_float_Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< float,std::allocator< float > > const &)*arg4); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res4)) delete arg4; - return resultobj; -fail: - if (SWIG_IsNewObj(res4)) delete arg4; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::difference_type arg2 ; - std::vector< float >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___setslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); - } - arg2 = static_cast< std::vector< float >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___setslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); - } - arg3 = static_cast< std::vector< float >::difference_type >(val3); - try { - std_vector_Sl_float_Sg____setslice____SWIG_0(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___setslice__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector___setslice____SWIG_1(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = swig::asptr(argv[3], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_floatVector___setslice____SWIG_0(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___setslice__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::__setslice__(std::vector< float >::difference_type,std::vector< float >::difference_type,std::vector< float,std::allocator< float > > const &)\n" - " std::vector< float >::__setslice__(std::vector< float >::difference_type,std::vector< float >::difference_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_floatVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::difference_type arg2 ; - std::vector< float >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___delslice__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___delslice__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); - } - arg2 = static_cast< std::vector< float >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___delslice__" "', argument " "3"" of type '" "std::vector< float >::difference_type""'"); - } - arg3 = static_cast< std::vector< float >::difference_type >(val3); - try { - std_vector_Sl_float_Sg____delslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___delitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___delitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); - } - arg2 = static_cast< std::vector< float >::difference_type >(val2); - try { - std_vector_Sl_float_Sg____delitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< float,std::allocator< float > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___getitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - result = (std::vector< float,std::allocator< float > > *)std_vector_Sl_float_Sg____getitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - std::vector< float,std::allocator< float > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "floatVector___setitem__" "', argument " "3"" of type '" "std::vector< float,std::allocator< float > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "floatVector___setitem__" "', argument " "3"" of type '" "std::vector< float,std::allocator< float > > const &""'"); - } - arg3 = ptr; - } - try { - std_vector_Sl_float_Sg____setitem____SWIG_0(arg1,arg2,(std::vector< float,std::allocator< float > > const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___setitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_float_Sg____setitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___delitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_float_Sg____delitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___delitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_floatVector___delitem____SWIG_1(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector___delitem____SWIG_0(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___delitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::__delitem__(std::vector< float >::difference_type)\n" - " std::vector< float >::__delitem__(PySliceObject *)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_floatVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< float >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___getitem__" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___getitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); - } - arg2 = static_cast< std::vector< float >::difference_type >(val2); - try { - result = (std::vector< float >::value_type *) &std_vector_Sl_float_Sg____getitem____SWIG_1((std::vector< float > const *)arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_From_float(static_cast< float >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___getitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_floatVector___getitem____SWIG_0(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector___getitem____SWIG_1(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___getitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::__getitem__(PySliceObject *)\n" - " std::vector< float >::__getitem__(std::vector< float >::difference_type) const\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_floatVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::difference_type arg2 ; - std::vector< float >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - std::vector< float >::value_type temp3 ; - float val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector___setitem__" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector___setitem__" "', argument " "2"" of type '" "std::vector< float >::difference_type""'"); - } - arg2 = static_cast< std::vector< float >::difference_type >(val2); - ecode3 = SWIG_AsVal_float(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector___setitem__" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); - } - temp3 = static_cast< std::vector< float >::value_type >(val3); - arg3 = &temp3; - try { - std_vector_Sl_float_Sg____setitem____SWIG_2(arg1,arg2,(float const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector___setitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_floatVector___setitem____SWIG_1(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - int res = swig::asptr(argv[2], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_floatVector___setitem____SWIG_0(self, args); - } - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_float(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector___setitem____SWIG_2(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector___setitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::__setitem__(PySliceObject *,std::vector< float,std::allocator< float > > const &)\n" - " std::vector< float >::__setitem__(PySliceObject *)\n" - " std::vector< float >::__setitem__(std::vector< float >::difference_type,std::vector< float >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_floatVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::value_type *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - std::vector< float >::value_type temp2 ; - float val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_append",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_append" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_float(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_append" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); - } - temp2 = static_cast< std::vector< float >::value_type >(val2); - arg2 = &temp2; - std_vector_Sl_float_Sg__append(arg1,(float const &)*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_floatVector")) SWIG_fail; - result = (std::vector< float > *)new std::vector< float >(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = 0 ; - int res1 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - std::vector< float > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_floatVector",&obj0)) SWIG_fail; - { - std::vector > *ptr = (std::vector > *)0; - res1 = swig::asptr(obj0, &ptr); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float > const &""'"); - } - arg1 = ptr; - } - result = (std::vector< float > *)new std::vector< float >((std::vector< float > const &)*arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); - if (SWIG_IsNewObj(res1)) delete arg1; - return resultobj; -fail: - if (SWIG_IsNewObj(res1)) delete arg1; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_empty",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_empty" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (bool)((std::vector< float > const *)arg1)->empty(); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_size",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_size" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = ((std::vector< float > const *)arg1)->size(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_clear",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_clear" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - (arg1)->clear(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float > *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_swap",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_swap" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "floatVector_swap" "', argument " "2"" of type '" "std::vector< float > &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "floatVector_swap" "', argument " "2"" of type '" "std::vector< float > &""'"); - } - arg2 = reinterpret_cast< std::vector< float > * >(argp2); - (arg1)->swap(*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - SwigValueWrapper< std::allocator< float > > result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_get_allocator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_get_allocator" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = ((std::vector< float > const *)arg1)->get_allocator(); - resultobj = SWIG_NewPointerObj((new std::vector< float >::allocator_type(static_cast< const std::vector< float >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_float_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_begin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_begin" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (arg1)->begin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_end",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_end" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (arg1)->end(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_rbegin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_rbegin" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (arg1)->rbegin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_rend",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_rend" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (arg1)->rend(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float >::size_type arg1 ; - size_t val1 ; - int ecode1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_floatVector",&obj0)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float >::size_type""'"); - } - arg1 = static_cast< std::vector< float >::size_type >(val1); - result = (std::vector< float > *)new std::vector< float >(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_pop_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_pop_back" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - (arg1)->pop_back(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_resize",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_resize" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_resize" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); - } - arg2 = static_cast< std::vector< float >::size_type >(val2); - (arg1)->resize(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::iterator arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< float >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_erase",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_erase" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } - } - result = (arg1)->erase(arg2); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::iterator arg2 ; - std::vector< float >::iterator arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - swig::SwigPyIterator *iter3 = 0 ; - int res3 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< float >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_erase" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } - } - res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res3) || !iter3) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "3"" of type '" "std::vector< float >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); - if (iter_t) { - arg3 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_erase" "', argument " "3"" of type '" "std::vector< float >::iterator""'"); - } - } - result = (arg1)->erase(arg2,arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_erase(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_floatVector_erase__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_floatVector_erase__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector_erase'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::erase(std::vector< float >::iterator)\n" - " std::vector< float >::erase(std::vector< float >::iterator,std::vector< float >::iterator)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_new_floatVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float >::size_type arg1 ; - std::vector< float >::value_type *arg2 = 0 ; - size_t val1 ; - int ecode1 = 0 ; - std::vector< float >::value_type temp2 ; - float val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< float > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:new_floatVector",&obj0,&obj1)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_floatVector" "', argument " "1"" of type '" "std::vector< float >::size_type""'"); - } - arg1 = static_cast< std::vector< float >::size_type >(val1); - ecode2 = SWIG_AsVal_float(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_floatVector" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); - } - temp2 = static_cast< std::vector< float >::value_type >(val2); - arg2 = &temp2; - result = (std::vector< float > *)new std::vector< float >(arg1,(std::vector< float >::value_type const &)*arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_floatVector(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 0) { - return _wrap_new_floatVector__SWIG_0(self, args); - } - if (argc == 1) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_new_floatVector__SWIG_2(self, args); - } - } - if (argc == 1) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_floatVector__SWIG_1(self, args); - } - } - if (argc == 2) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_float(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_new_floatVector__SWIG_3(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_floatVector'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::vector()\n" - " std::vector< float >::vector(std::vector< float > const &)\n" - " std::vector< float >::vector(std::vector< float >::size_type)\n" - " std::vector< float >::vector(std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_floatVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::value_type *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - std::vector< float >::value_type temp2 ; - float val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_push_back",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_push_back" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_float(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_push_back" "', argument " "2"" of type '" "std::vector< float >::value_type""'"); - } - temp2 = static_cast< std::vector< float >::value_type >(val2); - arg2 = &temp2; - (arg1)->push_back((std::vector< float >::value_type const &)*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_front",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_front" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (std::vector< float >::value_type *) &((std::vector< float > const *)arg1)->front(); - resultobj = SWIG_From_float(static_cast< float >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::value_type *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_back" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = (std::vector< float >::value_type *) &((std::vector< float > const *)arg1)->back(); - resultobj = SWIG_From_float(static_cast< float >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::size_type arg2 ; - std::vector< float >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - std::vector< float >::value_type temp3 ; - float val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_assign" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_assign" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); - } - arg2 = static_cast< std::vector< float >::size_type >(val2); - ecode3 = SWIG_AsVal_float(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_assign" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); - } - temp3 = static_cast< std::vector< float >::value_type >(val3); - arg3 = &temp3; - (arg1)->assign(arg2,(std::vector< float >::value_type const &)*arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::size_type arg2 ; - std::vector< float >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - std::vector< float >::value_type temp3 ; - float val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_resize" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_resize" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); - } - arg2 = static_cast< std::vector< float >::size_type >(val2); - ecode3 = SWIG_AsVal_float(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_resize" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); - } - temp3 = static_cast< std::vector< float >::value_type >(val3); - arg3 = &temp3; - (arg1)->resize(arg2,(std::vector< float >::value_type const &)*arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_resize(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector_resize__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_float(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector_resize__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector_resize'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::resize(std::vector< float >::size_type)\n" - " std::vector< float >::resize(std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_floatVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::iterator arg2 ; - std::vector< float >::value_type *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - std::vector< float >::value_type temp3 ; - float val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< float >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:floatVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_insert" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } - } - ecode3 = SWIG_AsVal_float(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_insert" "', argument " "3"" of type '" "std::vector< float >::value_type""'"); - } - temp3 = static_cast< std::vector< float >::value_type >(val3); - arg3 = &temp3; - result = (arg1)->insert(arg2,(std::vector< float >::value_type const &)*arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< float >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::iterator arg2 ; - std::vector< float >::size_type arg3 ; - std::vector< float >::value_type *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - size_t val3 ; - int ecode3 = 0 ; - std::vector< float >::value_type temp4 ; - float val4 ; - int ecode4 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:floatVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_insert" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "floatVector_insert" "', argument " "2"" of type '" "std::vector< float >::iterator""'"); - } - } - ecode3 = SWIG_AsVal_size_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "floatVector_insert" "', argument " "3"" of type '" "std::vector< float >::size_type""'"); - } - arg3 = static_cast< std::vector< float >::size_type >(val3); - ecode4 = SWIG_AsVal_float(obj3, &val4); - if (!SWIG_IsOK(ecode4)) { - SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "floatVector_insert" "', argument " "4"" of type '" "std::vector< float >::value_type""'"); - } - temp4 = static_cast< std::vector< float >::value_type >(val4); - arg4 = &temp4; - (arg1)->insert(arg2,arg3,(std::vector< float >::value_type const &)*arg4); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_insert(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - { - int res = SWIG_AsVal_float(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector_insert__SWIG_0(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_float(argv[3], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_floatVector_insert__SWIG_1(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'floatVector_insert'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< float >::insert(std::vector< float >::iterator,std::vector< float >::value_type const &)\n" - " std::vector< float >::insert(std::vector< float >::iterator,std::vector< float >::size_type,std::vector< float >::value_type const &)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_floatVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - std::vector< float >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:floatVector_reserve",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_reserve" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "floatVector_reserve" "', argument " "2"" of type '" "std::vector< float >::size_type""'"); - } - arg2 = static_cast< std::vector< float >::size_type >(val2); - (arg1)->reserve(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< float >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatVector_capacity",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatVector_capacity" "', argument " "1"" of type '" "std::vector< float > const *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - result = ((std::vector< float > const *)arg1)->capacity(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_floatVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< float > *arg1 = (std::vector< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_floatVector",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_floatVector" "', argument " "1"" of type '" "std::vector< float > *""'"); - } - arg1 = reinterpret_cast< std::vector< float > * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *floatVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_layerVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - PyObject **arg2 = (PyObject **) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - arg2 = &obj0; - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_iterator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_iterator" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (swig::SwigPyIterator *)std_vector_Sl_singa_Layer_Sm__Sg__iterator(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector___nonzero__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___nonzero__" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (bool)std_vector_Sl_singa_Layer_Sm__Sg____nonzero__((std::vector< singa::Layer * > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector___bool__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___bool__" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (bool)std_vector_Sl_singa_Layer_Sm__Sg____bool__((std::vector< singa::Layer * > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector___len__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___len__" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = std_vector_Sl_singa_Layer_Sm__Sg____len__((std::vector< singa::Layer * > const *)arg1); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_pop",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_pop" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - try { - result = (std::vector< singa::Layer * >::value_type)std_vector_Sl_singa_Layer_Sm__Sg__pop(arg1); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::difference_type arg2 ; - std::vector< singa::Layer * >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___getslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___getslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___getslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); - try { - result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *)std_vector_Sl_singa_Layer_Sm__Sg____getslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::difference_type arg2 ; - std::vector< singa::Layer * >::difference_type arg3 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - int res4 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:layerVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___setslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___setslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); - { - std::vector > *ptr = (std::vector > *)0; - res4 = swig::asptr(obj3, &ptr); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "layerVector___setslice__" "', argument " "4"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "layerVector___setslice__" "', argument " "4"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - arg4 = ptr; - } - try { - std_vector_Sl_singa_Layer_Sm__Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg4); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res4)) delete arg4; - return resultobj; -fail: - if (SWIG_IsNewObj(res4)) delete arg4; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::difference_type arg2 ; - std::vector< singa::Layer * >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___setslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___setslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); - try { - std_vector_Sl_singa_Layer_Sm__Sg____setslice____SWIG_0(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___setslice__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_layerVector___setslice____SWIG_1(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = swig::asptr(argv[3], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_layerVector___setslice____SWIG_0(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___setslice__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::__setslice__(std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)\n" - " std::vector< singa::Layer * >::__setslice__(std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer * >::difference_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_layerVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::difference_type arg2 ; - std::vector< singa::Layer * >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___delslice__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___delslice__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector___delslice__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Layer * >::difference_type >(val3); - try { - std_vector_Sl_singa_Layer_Sm__Sg____delslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___delitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___delitem__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); - try { - std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___getitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *)std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "layerVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - arg3 = ptr; - } - try { - std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_0(arg1,arg2,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___setitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___delitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_singa_Layer_Sm__Sg____delitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___delitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_layerVector___delitem____SWIG_1(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_layerVector___delitem____SWIG_0(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___delitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::__delitem__(std::vector< singa::Layer * >::difference_type)\n" - " std::vector< singa::Layer * >::__delitem__(PySliceObject *)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_layerVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Layer * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___getitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___getitem__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); - try { - result = (std::vector< singa::Layer * >::value_type)std_vector_Sl_singa_Layer_Sm__Sg____getitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___getitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_layerVector___getitem____SWIG_0(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_layerVector___getitem____SWIG_1(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___getitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::__getitem__(PySliceObject *)\n" - " std::vector< singa::Layer * >::__getitem__(std::vector< singa::Layer * >::difference_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_layerVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::difference_type arg2 ; - std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector___setitem__" "', argument " "2"" of type '" "std::vector< singa::Layer * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::difference_type >(val2); - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); - try { - std_vector_Sl_singa_Layer_Sm__Sg____setitem____SWIG_2(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector___setitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_layerVector___setitem____SWIG_1(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - int res = swig::asptr(argv[2], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_layerVector___setitem____SWIG_0(self, args); - } - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Layer, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_layerVector___setitem____SWIG_2(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector___setitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::__setitem__(PySliceObject *,std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)\n" - " std::vector< singa::Layer * >::__setitem__(PySliceObject *)\n" - " std::vector< singa::Layer * >::__setitem__(std::vector< singa::Layer * >::difference_type,std::vector< singa::Layer * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_layerVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::value_type arg2 = (std::vector< singa::Layer * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_append",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_append" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "layerVector_append" "', argument " "2"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp2); - std_vector_Sl_singa_Layer_Sm__Sg__append(arg1,arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_layerVector")) SWIG_fail; - result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = 0 ; - int res1 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_layerVector",&obj0)) SWIG_fail; - { - std::vector > *ptr = (std::vector > *)0; - res1 = swig::asptr(obj0, &ptr); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * > const &""'"); - } - arg1 = ptr; - } - result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >((std::vector< singa::Layer * > const &)*arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); - if (SWIG_IsNewObj(res1)) delete arg1; - return resultobj; -fail: - if (SWIG_IsNewObj(res1)) delete arg1; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_empty",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_empty" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (bool)((std::vector< singa::Layer * > const *)arg1)->empty(); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_size",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_size" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = ((std::vector< singa::Layer * > const *)arg1)->size(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_clear",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_clear" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - (arg1)->clear(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * > *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_swap",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_swap" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "layerVector_swap" "', argument " "2"" of type '" "std::vector< singa::Layer * > &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "layerVector_swap" "', argument " "2"" of type '" "std::vector< singa::Layer * > &""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Layer * > * >(argp2); - (arg1)->swap(*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - SwigValueWrapper< std::allocator< singa::Layer * > > result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_get_allocator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_get_allocator" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = ((std::vector< singa::Layer * > const *)arg1)->get_allocator(); - resultobj = SWIG_NewPointerObj((new std::vector< singa::Layer * >::allocator_type(static_cast< const std::vector< singa::Layer * >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_singa__Layer_p_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_begin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_begin" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (arg1)->begin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_end",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_end" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (arg1)->end(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_rbegin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_rbegin" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (arg1)->rbegin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_rend",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_rend" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (arg1)->rend(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * >::size_type arg1 ; - size_t val1 ; - int ecode1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_layerVector",&obj0)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * >::size_type""'"); - } - arg1 = static_cast< std::vector< singa::Layer * >::size_type >(val1); - result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_pop_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_pop_back" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - (arg1)->pop_back(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_resize",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_resize" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_resize" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); - (arg1)->resize(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::iterator arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Layer * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_erase",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_erase" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } - } - result = (arg1)->erase(arg2); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::iterator arg2 ; - std::vector< singa::Layer * >::iterator arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - swig::SwigPyIterator *iter3 = 0 ; - int res3 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< singa::Layer * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_erase" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } - } - res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res3) || !iter3) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "3"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); - if (iter_t) { - arg3 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_erase" "', argument " "3"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } - } - result = (arg1)->erase(arg2,arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_erase(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_layerVector_erase__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_layerVector_erase__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector_erase'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::erase(std::vector< singa::Layer * >::iterator)\n" - " std::vector< singa::Layer * >::erase(std::vector< singa::Layer * >::iterator,std::vector< singa::Layer * >::iterator)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_new_layerVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * >::size_type arg1 ; - std::vector< singa::Layer * >::value_type arg2 = (std::vector< singa::Layer * >::value_type) 0 ; - size_t val1 ; - int ecode1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Layer * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:new_layerVector",&obj0,&obj1)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * >::size_type""'"); - } - arg1 = static_cast< std::vector< singa::Layer * >::size_type >(val1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_layerVector" "', argument " "2"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp2); - result = (std::vector< singa::Layer * > *)new std::vector< singa::Layer * >(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_layerVector(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 0) { - return _wrap_new_layerVector__SWIG_0(self, args); - } - if (argc == 1) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_new_layerVector__SWIG_2(self, args); - } - } - if (argc == 1) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_layerVector__SWIG_1(self, args); - } - } - if (argc == 2) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_singa__Layer, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_layerVector__SWIG_3(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_layerVector'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::vector()\n" - " std::vector< singa::Layer * >::vector(std::vector< singa::Layer * > const &)\n" - " std::vector< singa::Layer * >::vector(std::vector< singa::Layer * >::size_type)\n" - " std::vector< singa::Layer * >::vector(std::vector< singa::Layer * >::size_type,std::vector< singa::Layer * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_layerVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::value_type arg2 = (std::vector< singa::Layer * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_push_back",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_push_back" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "layerVector_push_back" "', argument " "2"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp2); - (arg1)->push_back(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_front",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_front" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (std::vector< singa::Layer * >::value_type)((std::vector< singa::Layer * > const *)arg1)->front(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_back" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = (std::vector< singa::Layer * >::value_type)((std::vector< singa::Layer * > const *)arg1)->back(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::size_type arg2 ; - std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_assign" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_assign" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector_assign" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); - (arg1)->assign(arg2,arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::size_type arg2 ; - std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_resize" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_resize" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector_resize" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); - (arg1)->resize(arg2,arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_resize(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_layerVector_resize__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Layer, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_layerVector_resize__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector_resize'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::resize(std::vector< singa::Layer * >::size_type)\n" - " std::vector< singa::Layer * >::resize(std::vector< singa::Layer * >::size_type,std::vector< singa::Layer * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_layerVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::iterator arg2 ; - std::vector< singa::Layer * >::value_type arg3 = (std::vector< singa::Layer * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< singa::Layer * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:layerVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_insert" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } - } - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "layerVector_insert" "', argument " "3"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp3); - result = (arg1)->insert(arg2,arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Layer * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::iterator arg2 ; - std::vector< singa::Layer * >::size_type arg3 ; - std::vector< singa::Layer * >::value_type arg4 = (std::vector< singa::Layer * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - size_t val3 ; - int ecode3 = 0 ; - void *argp4 = 0 ; - int res4 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:layerVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_insert" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "layerVector_insert" "', argument " "2"" of type '" "std::vector< singa::Layer * >::iterator""'"); - } - } - ecode3 = SWIG_AsVal_size_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "layerVector_insert" "', argument " "3"" of type '" "std::vector< singa::Layer * >::size_type""'"); - } - arg3 = static_cast< std::vector< singa::Layer * >::size_type >(val3); - res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "layerVector_insert" "', argument " "4"" of type '" "std::vector< singa::Layer * >::value_type""'"); - } - arg4 = reinterpret_cast< std::vector< singa::Layer * >::value_type >(argp4); - (arg1)->insert(arg2,arg3,arg4); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_insert(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Layer, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_layerVector_insert__SWIG_0(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_singa__Layer, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_layerVector_insert__SWIG_1(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'layerVector_insert'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Layer * >::insert(std::vector< singa::Layer * >::iterator,std::vector< singa::Layer * >::value_type)\n" - " std::vector< singa::Layer * >::insert(std::vector< singa::Layer * >::iterator,std::vector< singa::Layer * >::size_type,std::vector< singa::Layer * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_layerVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - std::vector< singa::Layer * >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:layerVector_reserve",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_reserve" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "layerVector_reserve" "', argument " "2"" of type '" "std::vector< singa::Layer * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Layer * >::size_type >(val2); - (arg1)->reserve(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_layerVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer * >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:layerVector_capacity",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "layerVector_capacity" "', argument " "1"" of type '" "std::vector< singa::Layer * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - result = ((std::vector< singa::Layer * > const *)arg1)->capacity(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_layerVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Layer * > *arg1 = (std::vector< singa::Layer * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_layerVector",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_layerVector" "', argument " "1"" of type '" "std::vector< singa::Layer * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Layer * > * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *layerVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_paramVector_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - PyObject **arg2 = (PyObject **) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - swig::SwigPyIterator *result = 0 ; - - arg2 = &obj0; - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_iterator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_iterator" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (swig::SwigPyIterator *)std_vector_Sl_singa_Param_Sm__Sg__iterator(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_swig__SwigPyIterator, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___nonzero__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector___nonzero__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___nonzero__" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (bool)std_vector_Sl_singa_Param_Sm__Sg____nonzero__((std::vector< singa::Param * > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___bool__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector___bool__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___bool__" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (bool)std_vector_Sl_singa_Param_Sm__Sg____bool__((std::vector< singa::Param * > const *)arg1); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector___len__",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___len__" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = std_vector_Sl_singa_Param_Sm__Sg____len__((std::vector< singa::Param * > const *)arg1); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_pop(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_pop",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_pop" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - try { - result = (std::vector< singa::Param * >::value_type)std_vector_Sl_singa_Param_Sm__Sg__pop(arg1); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Param, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___getslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::difference_type arg2 ; - std::vector< singa::Param * >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< singa::Param *,std::allocator< singa::Param * > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector___getslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___getslice__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector___getslice__" "', argument " "2"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "paramVector___getslice__" "', argument " "3"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Param * >::difference_type >(val3); - try { - result = (std::vector< singa::Param *,std::allocator< singa::Param * > > *)std_vector_Sl_singa_Param_Sm__Sg____getslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___setslice____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::difference_type arg2 ; - std::vector< singa::Param * >::difference_type arg3 ; - std::vector< singa::Param *,std::allocator< singa::Param * > > *arg4 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - int res4 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:paramVector___setslice__",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___setslice__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector___setslice__" "', argument " "2"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "paramVector___setslice__" "', argument " "3"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Param * >::difference_type >(val3); - { - std::vector > *ptr = (std::vector > *)0; - res4 = swig::asptr(obj3, &ptr); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "paramVector___setslice__" "', argument " "4"" of type '" "std::vector< singa::Param *,std::allocator< singa::Param * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "paramVector___setslice__" "', argument " "4"" of type '" "std::vector< singa::Param *,std::allocator< singa::Param * > > const &""'"); - } - arg4 = ptr; - } - try { - std_vector_Sl_singa_Param_Sm__Sg____setslice____SWIG_0(arg1,arg2,arg3,(std::vector< singa::Param *,std::allocator< singa::Param * > > const &)*arg4); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res4)) delete arg4; - return resultobj; -fail: - if (SWIG_IsNewObj(res4)) delete arg4; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___setslice____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::difference_type arg2 ; - std::vector< singa::Param * >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector___setslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___setslice__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector___setslice__" "', argument " "2"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "paramVector___setslice__" "', argument " "3"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Param * >::difference_type >(val3); - try { - std_vector_Sl_singa_Param_Sm__Sg____setslice____SWIG_0(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___setslice__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_paramVector___setslice____SWIG_1(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - int res = swig::asptr(argv[3], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_paramVector___setslice____SWIG_0(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'paramVector___setslice__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::__setslice__(std::vector< singa::Param * >::difference_type,std::vector< singa::Param * >::difference_type,std::vector< singa::Param *,std::allocator< singa::Param * > > const &)\n" - " std::vector< singa::Param * >::__setslice__(std::vector< singa::Param * >::difference_type,std::vector< singa::Param * >::difference_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_paramVector___delslice__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::difference_type arg2 ; - std::vector< singa::Param * >::difference_type arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - ptrdiff_t val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector___delslice__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___delslice__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector___delslice__" "', argument " "2"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::difference_type >(val2); - ecode3 = SWIG_AsVal_ptrdiff_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "paramVector___delslice__" "', argument " "3"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg3 = static_cast< std::vector< singa::Param * >::difference_type >(val3); - try { - std_vector_Sl_singa_Param_Sm__Sg____delslice__(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___delitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___delitem__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector___delitem__" "', argument " "2"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::difference_type >(val2); - try { - std_vector_Sl_singa_Param_Sm__Sg____delitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Param *,std::allocator< singa::Param * > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___getitem__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector___getitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - result = (std::vector< singa::Param *,std::allocator< singa::Param * > > *)std_vector_Sl_singa_Param_Sm__Sg____getitem____SWIG_0(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - std::vector< singa::Param *,std::allocator< singa::Param * > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "paramVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Param *,std::allocator< singa::Param * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "paramVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Param *,std::allocator< singa::Param * > > const &""'"); - } - arg3 = ptr; - } - try { - std_vector_Sl_singa_Param_Sm__Sg____setitem____SWIG_0(arg1,arg2,(std::vector< singa::Param *,std::allocator< singa::Param * > > const &)*arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector___setitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector___setitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_singa_Param_Sm__Sg____setitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___delitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - PySliceObject *arg2 = (PySliceObject *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector___delitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___delitem__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - { - if (!PySlice_Check(obj1)) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector___delitem__" "', argument " "2"" of type '" "PySliceObject *""'"); - } - arg2 = (PySliceObject *) obj1; - } - try { - std_vector_Sl_singa_Param_Sm__Sg____delitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - catch(std::invalid_argument &_e) { - SWIG_exception_fail(SWIG_ValueError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___delitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_paramVector___delitem____SWIG_1(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_paramVector___delitem____SWIG_0(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'paramVector___delitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::__delitem__(std::vector< singa::Param * >::difference_type)\n" - " std::vector< singa::Param * >::__delitem__(PySliceObject *)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_paramVector___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::difference_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Param * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector___getitem__",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___getitem__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector___getitem__" "', argument " "2"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::difference_type >(val2); - try { - result = (std::vector< singa::Param * >::value_type)std_vector_Sl_singa_Param_Sm__Sg____getitem____SWIG_1(arg1,arg2); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Param, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___getitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_paramVector___getitem____SWIG_0(self, args); - } - } - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_paramVector___getitem____SWIG_1(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'paramVector___getitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::__getitem__(PySliceObject *)\n" - " std::vector< singa::Param * >::__getitem__(std::vector< singa::Param * >::difference_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_paramVector___setitem____SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::difference_type arg2 ; - std::vector< singa::Param * >::value_type arg3 = (std::vector< singa::Param * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - ptrdiff_t val2 ; - int ecode2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector___setitem__",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector___setitem__" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_ptrdiff_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector___setitem__" "', argument " "2"" of type '" "std::vector< singa::Param * >::difference_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::difference_type >(val2); - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "paramVector___setitem__" "', argument " "3"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp3); - try { - std_vector_Sl_singa_Param_Sm__Sg____setitem____SWIG_2(arg1,arg2,arg3); - } - catch(std::out_of_range &_e) { - SWIG_exception_fail(SWIG_IndexError, (&_e)->what()); - } - - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector___setitem__(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - return _wrap_paramVector___setitem____SWIG_1(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - _v = PySlice_Check(argv[1]); - } - if (_v) { - int res = swig::asptr(argv[2], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_paramVector___setitem____SWIG_0(self, args); - } - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_ptrdiff_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Param, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_paramVector___setitem____SWIG_2(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'paramVector___setitem__'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::__setitem__(PySliceObject *,std::vector< singa::Param *,std::allocator< singa::Param * > > const &)\n" - " std::vector< singa::Param * >::__setitem__(PySliceObject *)\n" - " std::vector< singa::Param * >::__setitem__(std::vector< singa::Param * >::difference_type,std::vector< singa::Param * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_paramVector_append(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::value_type arg2 = (std::vector< singa::Param * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector_append",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_append" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "paramVector_append" "', argument " "2"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp2); - std_vector_Sl_singa_Param_Sm__Sg__append(arg1,arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_paramVector__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_paramVector")) SWIG_fail; - result = (std::vector< singa::Param * > *)new std::vector< singa::Param * >(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_paramVector__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = 0 ; - int res1 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_paramVector",&obj0)) SWIG_fail; - { - std::vector > *ptr = (std::vector > *)0; - res1 = swig::asptr(obj0, &ptr); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_paramVector" "', argument " "1"" of type '" "std::vector< singa::Param * > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_paramVector" "', argument " "1"" of type '" "std::vector< singa::Param * > const &""'"); - } - arg1 = ptr; - } - result = (std::vector< singa::Param * > *)new std::vector< singa::Param * >((std::vector< singa::Param * > const &)*arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_POINTER_NEW | 0 ); - if (SWIG_IsNewObj(res1)) delete arg1; - return resultobj; -fail: - if (SWIG_IsNewObj(res1)) delete arg1; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_empty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - bool result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_empty",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_empty" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (bool)((std::vector< singa::Param * > const *)arg1)->empty(); - resultobj = SWIG_From_bool(static_cast< bool >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_size",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_size" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = ((std::vector< singa::Param * > const *)arg1)->size(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_clear",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_clear" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - (arg1)->clear(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_swap(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * > *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector_swap",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_swap" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "paramVector_swap" "', argument " "2"" of type '" "std::vector< singa::Param * > &""'"); - } - if (!argp2) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "paramVector_swap" "', argument " "2"" of type '" "std::vector< singa::Param * > &""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Param * > * >(argp2); - (arg1)->swap(*arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_get_allocator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - SwigValueWrapper< std::allocator< singa::Param * > > result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_get_allocator",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_get_allocator" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = ((std::vector< singa::Param * > const *)arg1)->get_allocator(); - resultobj = SWIG_NewPointerObj((new std::vector< singa::Param * >::allocator_type(static_cast< const std::vector< singa::Param * >::allocator_type& >(result))), SWIGTYPE_p_std__allocatorT_singa__Param_p_t, SWIG_POINTER_OWN | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_begin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_begin" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (arg1)->begin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Param * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_end",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_end" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (arg1)->end(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Param * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_rbegin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_rbegin",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_rbegin" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (arg1)->rbegin(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Param * >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_rend(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::reverse_iterator result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_rend",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_rend" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (arg1)->rend(); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Param * >::reverse_iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_paramVector__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * >::size_type arg1 ; - size_t val1 ; - int ecode1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:new_paramVector",&obj0)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_paramVector" "', argument " "1"" of type '" "std::vector< singa::Param * >::size_type""'"); - } - arg1 = static_cast< std::vector< singa::Param * >::size_type >(val1); - result = (std::vector< singa::Param * > *)new std::vector< singa::Param * >(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_pop_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_pop_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_pop_back" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - (arg1)->pop_back(); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_resize__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector_resize",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_resize" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector_resize" "', argument " "2"" of type '" "std::vector< singa::Param * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::size_type >(val2); - (arg1)->resize(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_erase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::iterator arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Param * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector_erase",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_erase" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_erase" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_erase" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } - } - result = (arg1)->erase(arg2); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Param * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_erase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::iterator arg2 ; - std::vector< singa::Param * >::iterator arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - swig::SwigPyIterator *iter3 = 0 ; - int res3 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< singa::Param * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector_erase",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_erase" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_erase" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_erase" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } - } - res3 = SWIG_ConvertPtr(obj2, SWIG_as_voidptrptr(&iter3), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res3) || !iter3) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_erase" "', argument " "3"" of type '" "std::vector< singa::Param * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter3); - if (iter_t) { - arg3 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_erase" "', argument " "3"" of type '" "std::vector< singa::Param * >::iterator""'"); - } - } - result = (arg1)->erase(arg2,arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Param * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_erase(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_paramVector_erase__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[2], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - return _wrap_paramVector_erase__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'paramVector_erase'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::erase(std::vector< singa::Param * >::iterator)\n" - " std::vector< singa::Param * >::erase(std::vector< singa::Param * >::iterator,std::vector< singa::Param * >::iterator)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_new_paramVector__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * >::size_type arg1 ; - std::vector< singa::Param * >::value_type arg2 = (std::vector< singa::Param * >::value_type) 0 ; - size_t val1 ; - int ecode1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Param * > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:new_paramVector",&obj0,&obj1)) SWIG_fail; - ecode1 = SWIG_AsVal_size_t(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_paramVector" "', argument " "1"" of type '" "std::vector< singa::Param * >::size_type""'"); - } - arg1 = static_cast< std::vector< singa::Param * >::size_type >(val1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_paramVector" "', argument " "2"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp2); - result = (std::vector< singa::Param * > *)new std::vector< singa::Param * >(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_paramVector(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[3]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 2) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 0) { - return _wrap_new_paramVector__SWIG_0(self, args); - } - if (argc == 1) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_new_paramVector__SWIG_2(self, args); - } - } - if (argc == 1) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_paramVector__SWIG_1(self, args); - } - } - if (argc == 2) { - int _v; - { - int res = SWIG_AsVal_size_t(argv[0], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_singa__Param, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_new_paramVector__SWIG_3(self, args); - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_paramVector'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::vector()\n" - " std::vector< singa::Param * >::vector(std::vector< singa::Param * > const &)\n" - " std::vector< singa::Param * >::vector(std::vector< singa::Param * >::size_type)\n" - " std::vector< singa::Param * >::vector(std::vector< singa::Param * >::size_type,std::vector< singa::Param * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_paramVector_push_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::value_type arg2 = (std::vector< singa::Param * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector_push_back",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_push_back" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "paramVector_push_back" "', argument " "2"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg2 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp2); - (arg1)->push_back(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_front(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_front",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_front" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (std::vector< singa::Param * >::value_type)((std::vector< singa::Param * > const *)arg1)->front(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Param, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_back(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::value_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_back",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_back" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = (std::vector< singa::Param * >::value_type)((std::vector< singa::Param * > const *)arg1)->back(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Param, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_assign(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::size_type arg2 ; - std::vector< singa::Param * >::value_type arg3 = (std::vector< singa::Param * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector_assign",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_assign" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector_assign" "', argument " "2"" of type '" "std::vector< singa::Param * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::size_type >(val2); - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "paramVector_assign" "', argument " "3"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp3); - (arg1)->assign(arg2,arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_resize__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::size_type arg2 ; - std::vector< singa::Param * >::value_type arg3 = (std::vector< singa::Param * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector_resize",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_resize" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector_resize" "', argument " "2"" of type '" "std::vector< singa::Param * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::size_type >(val2); - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "paramVector_resize" "', argument " "3"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp3); - (arg1)->resize(arg2,arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_resize(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[4]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 3) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 2) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - return _wrap_paramVector_resize__SWIG_0(self, args); - } - } - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[1], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Param, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_paramVector_resize__SWIG_1(self, args); - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'paramVector_resize'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::resize(std::vector< singa::Param * >::size_type)\n" - " std::vector< singa::Param * >::resize(std::vector< singa::Param * >::size_type,std::vector< singa::Param * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_paramVector_insert__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::iterator arg2 ; - std::vector< singa::Param * >::value_type arg3 = (std::vector< singa::Param * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - void *argp3 = 0 ; - int res3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::vector< singa::Param * >::iterator result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:paramVector_insert",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_insert" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_insert" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_insert" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } - } - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "paramVector_insert" "', argument " "3"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg3 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp3); - result = (arg1)->insert(arg2,arg3); - resultobj = SWIG_NewPointerObj(swig::make_output_iterator(static_cast< const std::vector< singa::Param * >::iterator & >(result)), - swig::SwigPyIterator::descriptor(),SWIG_POINTER_OWN); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_insert__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::iterator arg2 ; - std::vector< singa::Param * >::size_type arg3 ; - std::vector< singa::Param * >::value_type arg4 = (std::vector< singa::Param * >::value_type) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - swig::SwigPyIterator *iter2 = 0 ; - int res2 ; - size_t val3 ; - int ecode3 = 0 ; - void *argp4 = 0 ; - int res4 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:paramVector_insert",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_insert" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - res2 = SWIG_ConvertPtr(obj1, SWIG_as_voidptrptr(&iter2), swig::SwigPyIterator::descriptor(), 0); - if (!SWIG_IsOK(res2) || !iter2) { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_insert" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } else { - swig::SwigPyIterator_T::iterator > *iter_t = dynamic_cast::iterator > *>(iter2); - if (iter_t) { - arg2 = iter_t->get_current(); - } else { - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "paramVector_insert" "', argument " "2"" of type '" "std::vector< singa::Param * >::iterator""'"); - } - } - ecode3 = SWIG_AsVal_size_t(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "paramVector_insert" "', argument " "3"" of type '" "std::vector< singa::Param * >::size_type""'"); - } - arg3 = static_cast< std::vector< singa::Param * >::size_type >(val3); - res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res4)) { - SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "paramVector_insert" "', argument " "4"" of type '" "std::vector< singa::Param * >::value_type""'"); - } - arg4 = reinterpret_cast< std::vector< singa::Param * >::value_type >(argp4); - (arg1)->insert(arg2,arg3,arg4); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_insert(PyObject *self, PyObject *args) { - int argc; - PyObject *argv[5]; - int ii; - - if (!PyTuple_Check(args)) SWIG_fail; - argc = args ? (int)PyObject_Length(args) : 0; - for (ii = 0; (ii < 4) && (ii < argc); ii++) { - argv[ii] = PyTuple_GET_ITEM(args,ii); - } - if (argc == 3) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_singa__Param, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_paramVector_insert__SWIG_0(self, args); - } - } - } - } - if (argc == 4) { - int _v; - int res = swig::asptr(argv[0], (std::vector >**)(0)); - _v = SWIG_CheckState(res); - if (_v) { - swig::SwigPyIterator *iter = 0; - int res = SWIG_ConvertPtr(argv[1], SWIG_as_voidptrptr(&iter), swig::SwigPyIterator::descriptor(), 0); - _v = (SWIG_IsOK(res) && iter && (dynamic_cast::iterator > *>(iter) != 0)); - if (_v) { - { - int res = SWIG_AsVal_size_t(argv[2], NULL); - _v = SWIG_CheckState(res); - } - if (_v) { - void *vptr = 0; - int res = SWIG_ConvertPtr(argv[3], &vptr, SWIGTYPE_p_singa__Param, 0); - _v = SWIG_CheckState(res); - if (_v) { - return _wrap_paramVector_insert__SWIG_1(self, args); - } - } - } - } - } - -fail: - SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'paramVector_insert'.\n" - " Possible C/C++ prototypes are:\n" - " std::vector< singa::Param * >::insert(std::vector< singa::Param * >::iterator,std::vector< singa::Param * >::value_type)\n" - " std::vector< singa::Param * >::insert(std::vector< singa::Param * >::iterator,std::vector< singa::Param * >::size_type,std::vector< singa::Param * >::value_type)\n"); - return 0; -} - - -SWIGINTERN PyObject *_wrap_paramVector_reserve(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - std::vector< singa::Param * >::size_type arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - size_t val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:paramVector_reserve",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_reserve" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - ecode2 = SWIG_AsVal_size_t(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "paramVector_reserve" "', argument " "2"" of type '" "std::vector< singa::Param * >::size_type""'"); - } - arg2 = static_cast< std::vector< singa::Param * >::size_type >(val2); - (arg1)->reserve(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_paramVector_capacity(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param * >::size_type result; - - if (!PyArg_ParseTuple(args,(char *)"O:paramVector_capacity",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "paramVector_capacity" "', argument " "1"" of type '" "std::vector< singa::Param * > const *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - result = ((std::vector< singa::Param * > const *)arg1)->capacity(); - resultobj = SWIG_From_size_t(static_cast< size_t >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_paramVector(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::vector< singa::Param * > *arg1 = (std::vector< singa::Param * > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_paramVector",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_paramVector" "', argument " "1"" of type '" "std::vector< singa::Param * > *""'"); - } - arg1 = reinterpret_cast< std::vector< singa::Param * > * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *paramVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_Driver_Train(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Driver *arg1 = (singa::Driver *) 0 ; - bool arg2 ; - std::string arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - bool val2 ; - int ecode2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:Driver_Train",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Driver, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Driver_Train" "', argument " "1"" of type '" "singa::Driver *""'"); - } - arg1 = reinterpret_cast< singa::Driver * >(argp1); - ecode2 = SWIG_AsVal_bool(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Driver_Train" "', argument " "2"" of type '" "bool""'"); - } - arg2 = static_cast< bool >(val2); - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj2, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "Driver_Train" "', argument " "3"" of type '" "std::string const""'"); - } - arg3 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - (arg1)->Train(arg2,arg3); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Driver_Init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Driver *arg1 = (singa::Driver *) 0 ; - int arg2 ; - char **arg3 = (char **) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res2 ; - char **argv2 = 0 ; - size_t argc2 = 0 ; - int owner2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:Driver_Init",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Driver, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Driver_Init" "', argument " "1"" of type '" "singa::Driver *""'"); - } - arg1 = reinterpret_cast< singa::Driver * >(argp1); - res2 = SWIG_AsArgcArgv(obj1, SWIGTYPE_p_p_char, &argc2, &argv2, &owner2); - if (!SWIG_IsOK(res2)) { - arg2 = 0; arg3 = 0; - SWIG_exception_fail(SWIG_ArgError(SWIG_TypeError), "in method '" "Driver_Init" "', argument " "2"" of type '" "int ARGC, char **ARGV""'"); - } else { - arg2 = static_cast< int >(argc2); - arg3 = static_cast< char ** >(argv2); - } - (arg1)->Init(arg2,arg3); - resultobj = SWIG_Py_Void(); - if (owner2) { - size_t i = argc2; - while (i) { - delete[] argv2[--i]; - } - delete[] argv2; - } - return resultobj; -fail: - if (owner2) { - size_t i = argc2; - while (i) { - delete[] argv2[--i]; - } - delete[] argv2; - } - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Driver_InitLog(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Driver *arg1 = (singa::Driver *) 0 ; - char *arg2 = (char *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res2 ; - char *buf2 = 0 ; - int alloc2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:Driver_InitLog",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Driver, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Driver_InitLog" "', argument " "1"" of type '" "singa::Driver *""'"); - } - arg1 = reinterpret_cast< singa::Driver * >(argp1); - res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Driver_InitLog" "', argument " "2"" of type '" "char *""'"); - } - arg2 = reinterpret_cast< char * >(buf2); - (arg1)->InitLog(arg2); - resultobj = SWIG_Py_Void(); - if (alloc2 == SWIG_NEWOBJ) delete[] buf2; - return resultobj; -fail: - if (alloc2 == SWIG_NEWOBJ) delete[] buf2; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Driver_Test(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Driver *arg1 = (singa::Driver *) 0 ; - std::string arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:Driver_Test",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Driver, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Driver_Test" "', argument " "1"" of type '" "singa::Driver *""'"); - } - arg1 = reinterpret_cast< singa::Driver * >(argp1); - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj1, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "Driver_Test" "', argument " "2"" of type '" "std::string const""'"); - } - arg2 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - (arg1)->Test(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_Driver(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Driver *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_Driver")) SWIG_fail; - result = (singa::Driver *)new singa::Driver(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Driver, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_Driver(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Driver *arg1 = (singa::Driver *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_Driver",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Driver, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Driver" "', argument " "1"" of type '" "singa::Driver *""'"); - } - arg1 = reinterpret_cast< singa::Driver * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *Driver_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_singa__Driver, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_NeuralNet_CreateFromStr(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::string arg1 ; - PyObject * obj0 = 0 ; - singa::NeuralNet *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:NeuralNet_CreateFromStr",&obj0)) SWIG_fail; - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj0, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "NeuralNet_CreateFromStr" "', argument " "1"" of type '" "std::string const""'"); - } - arg1 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - result = (singa::NeuralNet *)singa::NeuralNet::CreateFromStr(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_NeuralNet_Load(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; - std::vector< std::string,std::allocator< std::string > > *arg2 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res2 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:NeuralNet_Load",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "NeuralNet_Load" "', argument " "1"" of type '" "singa::NeuralNet *""'"); - } - arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); - { - std::vector > *ptr = (std::vector > *)0; - res2 = swig::asptr(obj1, &ptr); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "NeuralNet_Load" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "NeuralNet_Load" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); - } - arg2 = ptr; - } - (arg1)->Load((std::vector< std::string,std::allocator< std::string > > const &)*arg2); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res2)) delete arg2; - return resultobj; -fail: - if (SWIG_IsNewObj(res2)) delete arg2; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_NeuralNet_layers(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:NeuralNet_layers",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "NeuralNet_layers" "', argument " "1"" of type '" "singa::NeuralNet *""'"); - } - arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); - result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *) &(arg1)->layers(); - resultobj = swig::from(static_cast< std::vector > >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_NeuralNet_srclayers(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; - singa::Layer *arg2 = (singa::Layer *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:NeuralNet_srclayers",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "NeuralNet_srclayers" "', argument " "1"" of type '" "singa::NeuralNet *""'"); - } - arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "NeuralNet_srclayers" "', argument " "2"" of type '" "singa::Layer const *""'"); - } - arg2 = reinterpret_cast< singa::Layer * >(argp2); - result = (std::vector< singa::Layer *,std::allocator< singa::Layer * > > *) &(arg1)->srclayers((singa::Layer const *)arg2); - resultobj = swig::from(static_cast< std::vector > >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_NeuralNet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::NeuralNet *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_NeuralNet")) SWIG_fail; - result = (singa::NeuralNet *)new singa::NeuralNet(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__NeuralNet, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_NeuralNet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::NeuralNet *arg1 = (singa::NeuralNet *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_NeuralNet",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__NeuralNet, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_NeuralNet" "', argument " "1"" of type '" "singa::NeuralNet *""'"); - } - arg1 = reinterpret_cast< singa::NeuralNet * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *NeuralNet_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_singa__NeuralNet, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_DummyLayer_Setup(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::DummyLayer *arg1 = (singa::DummyLayer *) 0 ; - std::string arg2 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:DummyLayer_Setup",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__DummyLayer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DummyLayer_Setup" "', argument " "1"" of type '" "singa::DummyLayer *""'"); - } - arg1 = reinterpret_cast< singa::DummyLayer * >(argp1); - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj1, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "DummyLayer_Setup" "', argument " "2"" of type '" "std::string const""'"); - } - arg2 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "DummyLayer_Setup" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "DummyLayer_Setup" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - arg3 = ptr; - } - (arg1)->Setup(arg2,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg3); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_DummyLayer_Feed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::DummyLayer *arg1 = (singa::DummyLayer *) 0 ; - std::vector< int,std::allocator< int > > arg2 ; - std::vector< float,std::allocator< float > > *arg3 = (std::vector< float,std::allocator< float > > *) 0 ; - int arg4 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - int val4 ; - int ecode4 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:DummyLayer_Feed",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__DummyLayer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DummyLayer_Feed" "', argument " "1"" of type '" "singa::DummyLayer *""'"); - } - arg1 = reinterpret_cast< singa::DummyLayer * >(argp1); - { - std::vector > *ptr = (std::vector > *)0; - int res = swig::asptr(obj1, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "DummyLayer_Feed" "', argument " "2"" of type '" "std::vector< int,std::allocator< int > >""'"); - } - arg2 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_std__vectorT_float_std__allocatorT_float_t_t, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "DummyLayer_Feed" "', argument " "3"" of type '" "std::vector< float,std::allocator< float > > *""'"); - } - arg3 = reinterpret_cast< std::vector< float,std::allocator< float > > * >(argp3); - ecode4 = SWIG_AsVal_int(obj3, &val4); - if (!SWIG_IsOK(ecode4)) { - SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "DummyLayer_Feed" "', argument " "4"" of type '" "int""'"); - } - arg4 = static_cast< int >(val4); - (arg1)->Feed(arg2,arg3,arg4); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_DummyLayer_ToLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::DummyLayer *arg1 = (singa::DummyLayer *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - singa::Layer *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:DummyLayer_ToLayer",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__DummyLayer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DummyLayer_ToLayer" "', argument " "1"" of type '" "singa::DummyLayer *""'"); - } - arg1 = reinterpret_cast< singa::DummyLayer * >(argp1); - result = (singa::Layer *)(arg1)->ToLayer(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_DummyLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::DummyLayer *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_DummyLayer")) SWIG_fail; - result = (singa::DummyLayer *)new singa::DummyLayer(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__DummyLayer, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_DummyLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::DummyLayer *arg1 = (singa::DummyLayer *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_DummyLayer",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__DummyLayer, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_DummyLayer" "', argument " "1"" of type '" "singa::DummyLayer *""'"); - } - arg1 = reinterpret_cast< singa::DummyLayer * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *DummyLayer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_singa__DummyLayer, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_Layer_CreateLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::string arg1 ; - PyObject * obj0 = 0 ; - singa::Layer *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:Layer_CreateLayer",&obj0)) SWIG_fail; - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj0, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "Layer_CreateLayer" "', argument " "1"" of type '" "std::string const""'"); - } - arg1 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - result = (singa::Layer *)singa::Layer::CreateLayer(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Layer, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Layer_SetupLayer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Layer *arg1 = (singa::Layer *) 0 ; - std::string arg2 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:Layer_SetupLayer",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_SetupLayer" "', argument " "1"" of type '" "singa::Layer *""'"); - } - arg1 = reinterpret_cast< singa::Layer * >(argp1); - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj1, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "Layer_SetupLayer" "', argument " "2"" of type '" "std::string const""'"); - } - arg2 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Layer_SetupLayer" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Layer_SetupLayer" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - arg3 = ptr; - } - singa::Layer::SetupLayer(arg1,arg2,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg3); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Layer_ComputeFeature(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Layer *arg1 = (singa::Layer *) 0 ; - int arg2 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int val2 ; - int ecode2 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:Layer_ComputeFeature",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_ComputeFeature" "', argument " "1"" of type '" "singa::Layer *""'"); - } - arg1 = reinterpret_cast< singa::Layer * >(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Layer_ComputeFeature" "', argument " "2"" of type '" "int""'"); - } - arg2 = static_cast< int >(val2); - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Layer_ComputeFeature" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Layer_ComputeFeature" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - arg3 = ptr; - } - (arg1)->ComputeFeature(arg2,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg3); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Layer_ComputeGradient(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Layer *arg1 = (singa::Layer *) 0 ; - int arg2 ; - std::vector< singa::Layer *,std::allocator< singa::Layer * > > *arg3 = 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - int val2 ; - int ecode2 = 0 ; - int res3 = SWIG_OLDOBJ ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOO:Layer_ComputeGradient",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_ComputeGradient" "', argument " "1"" of type '" "singa::Layer *""'"); - } - arg1 = reinterpret_cast< singa::Layer * >(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Layer_ComputeGradient" "', argument " "2"" of type '" "int""'"); - } - arg2 = static_cast< int >(val2); - { - std::vector > *ptr = (std::vector > *)0; - res3 = swig::asptr(obj2, &ptr); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Layer_ComputeGradient" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - if (!ptr) { - SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Layer_ComputeGradient" "', argument " "3"" of type '" "std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &""'"); - } - arg3 = ptr; - } - (arg1)->ComputeGradient(arg2,(std::vector< singa::Layer *,std::allocator< singa::Layer * > > const &)*arg3); - resultobj = SWIG_Py_Void(); - if (SWIG_IsNewObj(res3)) delete arg3; - return resultobj; -fail: - if (SWIG_IsNewObj(res3)) delete arg3; - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Layer_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Layer *arg1 = (singa::Layer *) 0 ; - singa::Layer *arg2 = (singa::Layer *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - void *argp2 = 0 ; - int res2 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - singa::Blob< float > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:Layer_data",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_data" "', argument " "1"" of type '" "singa::Layer *""'"); - } - arg1 = reinterpret_cast< singa::Layer * >(argp1); - res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res2)) { - SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Layer_data" "', argument " "2"" of type '" "singa::Layer const *""'"); - } - arg2 = reinterpret_cast< singa::Layer * >(argp2); - result = (singa::Blob< float > *) &(arg1)->data((singa::Layer const *)arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__BlobT_float_t, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Layer_GetParams(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Layer *arg1 = (singa::Layer *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< singa::Param *,std::allocator< singa::Param * > > result; - - if (!PyArg_ParseTuple(args,(char *)"O:Layer_GetParams",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_GetParams" "', argument " "1"" of type '" "singa::Layer *""'"); - } - arg1 = reinterpret_cast< singa::Layer * >(argp1); - result = (arg1)->GetParams(); - resultobj = swig::from(static_cast< std::vector > >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Layer_ToString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Layer *arg1 = (singa::Layer *) 0 ; - bool arg2 ; - int arg3 ; - void *argp1 = 0 ; - int res1 = 0 ; - bool val2 ; - int ecode2 = 0 ; - int val3 ; - int ecode3 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - std::string result; - - if (!PyArg_ParseTuple(args,(char *)"OOO:Layer_ToString",&obj0,&obj1,&obj2)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_ToString" "', argument " "1"" of type '" "singa::Layer *""'"); - } - arg1 = reinterpret_cast< singa::Layer * >(argp1); - ecode2 = SWIG_AsVal_bool(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Layer_ToString" "', argument " "2"" of type '" "bool""'"); - } - arg2 = static_cast< bool >(val2); - ecode3 = SWIG_AsVal_int(obj2, &val3); - if (!SWIG_IsOK(ecode3)) { - SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Layer_ToString" "', argument " "3"" of type '" "int""'"); - } - arg3 = static_cast< int >(val3); - result = (arg1)->ToString(arg2,arg3); - resultobj = SWIG_From_std_string(static_cast< std::string >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Layer_SetParams(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Layer *arg1 = (singa::Layer *) 0 ; - std::vector< singa::Param *,std::allocator< singa::Param * > > arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:Layer_SetParams",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Layer, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_SetParams" "', argument " "1"" of type '" "singa::Layer *""'"); - } - arg1 = reinterpret_cast< singa::Layer * >(argp1); - { - std::vector > *ptr = (std::vector > *)0; - int res = swig::asptr(obj1, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "Layer_SetParams" "', argument " "2"" of type '" "std::vector< singa::Param *,std::allocator< singa::Param * > >""'"); - } - arg2 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - (arg1)->SetParams(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *Layer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_singa__Layer, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_Updater_CreateUpdater(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - std::string arg1 ; - PyObject * obj0 = 0 ; - singa::Updater *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:Updater_CreateUpdater",&obj0)) SWIG_fail; - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj0, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "Updater_CreateUpdater" "', argument " "1"" of type '" "std::string const""'"); - } - arg1 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - result = (singa::Updater *)singa::Updater::CreateUpdater(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Updater, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Updater_Update(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Updater *arg1 = (singa::Updater *) 0 ; - int arg2 ; - singa::Param *arg3 = (singa::Param *) 0 ; - float arg4 ; - void *argp1 = 0 ; - int res1 = 0 ; - int val2 ; - int ecode2 = 0 ; - void *argp3 = 0 ; - int res3 = 0 ; - float val4 ; - int ecode4 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject * obj2 = 0 ; - PyObject * obj3 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OOOO:Updater_Update",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Updater, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Updater_Update" "', argument " "1"" of type '" "singa::Updater *""'"); - } - arg1 = reinterpret_cast< singa::Updater * >(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Updater_Update" "', argument " "2"" of type '" "int""'"); - } - arg2 = static_cast< int >(val2); - res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res3)) { - SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Updater_Update" "', argument " "3"" of type '" "singa::Param *""'"); - } - arg3 = reinterpret_cast< singa::Param * >(argp3); - ecode4 = SWIG_AsVal_float(obj3, &val4); - if (!SWIG_IsOK(ecode4)) { - SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "Updater_Update" "', argument " "4"" of type '" "float""'"); - } - arg4 = static_cast< float >(val4); - (arg1)->Update(arg2,arg3,arg4); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *Updater_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_singa__Updater, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_Param_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Param *arg1 = (singa::Param *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - int result; - - if (!PyArg_ParseTuple(args,(char *)"O:Param_size",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Param_size" "', argument " "1"" of type '" "singa::Param *""'"); - } - arg1 = reinterpret_cast< singa::Param * >(argp1); - result = (int)(arg1)->size(); - resultobj = SWIG_From_int(static_cast< int >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Param_shape(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Param *arg1 = (singa::Param *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int,std::allocator< int > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:Param_shape",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Param_shape" "', argument " "1"" of type '" "singa::Param *""'"); - } - arg1 = reinterpret_cast< singa::Param * >(argp1); - result = (std::vector< int,std::allocator< int > > *) &(arg1)->shape(); - resultobj = swig::from(static_cast< std::vector > >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Param_mutable_cpu_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Param *arg1 = (singa::Param *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - float *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:Param_mutable_cpu_data",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Param_mutable_cpu_data" "', argument " "1"" of type '" "singa::Param *""'"); - } - arg1 = reinterpret_cast< singa::Param * >(argp1); - result = (float *)(arg1)->mutable_cpu_data(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_float, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_Param_FromProto(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Param *arg1 = (singa::Param *) 0 ; - std::string arg2 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"OO:Param_FromProto",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Param, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Param_FromProto" "', argument " "1"" of type '" "singa::Param *""'"); - } - arg1 = reinterpret_cast< singa::Param * >(argp1); - { - std::string *ptr = (std::string *)0; - int res = SWIG_AsPtr_std_string(obj1, &ptr); - if (!SWIG_IsOK(res) || !ptr) { - SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "Param_FromProto" "', argument " "2"" of type '" "std::string const""'"); - } - arg2 = *ptr; - if (SWIG_IsNewObj(res)) delete ptr; - } - (arg1)->FromProto(arg2); - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_Param(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Param *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_Param")) SWIG_fail; - result = (singa::Param *)new singa::Param(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__Param, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_Param(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Param *arg1 = (singa::Param *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_Param",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__Param, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Param" "', argument " "1"" of type '" "singa::Param *""'"); - } - arg1 = reinterpret_cast< singa::Param * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *Param_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_singa__Param, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -SWIGINTERN PyObject *_wrap_floatBlob_count(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Blob< float > *arg1 = (singa::Blob< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - int result; - - if (!PyArg_ParseTuple(args,(char *)"O:floatBlob_count",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__BlobT_float_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatBlob_count" "', argument " "1"" of type '" "singa::Blob< float > *""'"); - } - arg1 = reinterpret_cast< singa::Blob< float > * >(argp1); - result = (int)(arg1)->count(); - resultobj = SWIG_From_int(static_cast< int >(result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatBlob_shape(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Blob< float > *arg1 = (singa::Blob< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - std::vector< int,std::allocator< int > > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatBlob_shape",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__BlobT_float_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatBlob_shape" "', argument " "1"" of type '" "singa::Blob< float > *""'"); - } - arg1 = reinterpret_cast< singa::Blob< float > * >(argp1); - result = (std::vector< int,std::allocator< int > > *) &(arg1)->shape(); - resultobj = swig::from(static_cast< std::vector > >(*result)); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatBlob_mutable_cpu_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Blob< float > *arg1 = (singa::Blob< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - float *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatBlob_mutable_cpu_data",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__BlobT_float_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatBlob_mutable_cpu_data" "', argument " "1"" of type '" "singa::Blob< float > *""'"); - } - arg1 = reinterpret_cast< singa::Blob< float > * >(argp1); - result = (float *)(arg1)->mutable_cpu_data(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_float, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_floatBlob_cpu_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Blob< float > *arg1 = (singa::Blob< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - float *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:floatBlob_cpu_data",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__BlobT_float_t, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "floatBlob_cpu_data" "', argument " "1"" of type '" "singa::Blob< float > *""'"); - } - arg1 = reinterpret_cast< singa::Blob< float > * >(argp1); - result = (float *)(arg1)->cpu_data(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_float, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_new_floatBlob(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Blob< float > *result = 0 ; - - if (!PyArg_ParseTuple(args,(char *)":new_floatBlob")) SWIG_fail; - result = (singa::Blob< float > *)new singa::Blob< float >(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_singa__BlobT_float_t, SWIG_POINTER_NEW | 0 ); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *_wrap_delete_floatBlob(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *resultobj = 0; - singa::Blob< float > *arg1 = (singa::Blob< float > *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject * obj0 = 0 ; - - if (!PyArg_ParseTuple(args,(char *)"O:delete_floatBlob",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_singa__BlobT_float_t, SWIG_POINTER_DISOWN | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_floatBlob" "', argument " "1"" of type '" "singa::Blob< float > *""'"); - } - arg1 = reinterpret_cast< singa::Blob< float > * >(argp1); - delete arg1; - resultobj = SWIG_Py_Void(); - return resultobj; -fail: - return NULL; -} - - -SWIGINTERN PyObject *floatBlob_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { - PyObject *obj; - if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL; - SWIG_TypeNewClientData(SWIGTYPE_p_singa__BlobT_float_t, SWIG_NewClientData(obj)); - return SWIG_Py_Void(); -} - -static PyMethodDef SwigMethods[] = { - { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, - { (char *)"delete_SwigPyIterator", _wrap_delete_SwigPyIterator, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_value", _wrap_SwigPyIterator_value, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_incr", _wrap_SwigPyIterator_incr, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_decr", _wrap_SwigPyIterator_decr, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_distance", _wrap_SwigPyIterator_distance, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_equal", _wrap_SwigPyIterator_equal, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_copy", _wrap_SwigPyIterator_copy, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_next", _wrap_SwigPyIterator_next, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator___next__", _wrap_SwigPyIterator___next__, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_previous", _wrap_SwigPyIterator_previous, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_advance", _wrap_SwigPyIterator_advance, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator___eq__", _wrap_SwigPyIterator___eq__, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator___ne__", _wrap_SwigPyIterator___ne__, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator___iadd__", _wrap_SwigPyIterator___iadd__, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator___isub__", _wrap_SwigPyIterator___isub__, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator___add__", _wrap_SwigPyIterator___add__, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator___sub__", _wrap_SwigPyIterator___sub__, METH_VARARGS, NULL}, - { (char *)"SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_VARARGS, NULL}, - { (char *)"new_floatArray", _wrap_new_floatArray, METH_VARARGS, NULL}, - { (char *)"delete_floatArray", _wrap_delete_floatArray, METH_VARARGS, NULL}, - { (char *)"floatArray___getitem__", _wrap_floatArray___getitem__, METH_VARARGS, NULL}, - { (char *)"floatArray___setitem__", _wrap_floatArray___setitem__, METH_VARARGS, NULL}, - { (char *)"floatArray_cast", _wrap_floatArray_cast, METH_VARARGS, NULL}, - { (char *)"floatArray_frompointer", _wrap_floatArray_frompointer, METH_VARARGS, NULL}, - { (char *)"floatArray_swigregister", floatArray_swigregister, METH_VARARGS, NULL}, - { (char *)"strVector_iterator", _wrap_strVector_iterator, METH_VARARGS, NULL}, - { (char *)"strVector___nonzero__", _wrap_strVector___nonzero__, METH_VARARGS, NULL}, - { (char *)"strVector___bool__", _wrap_strVector___bool__, METH_VARARGS, NULL}, - { (char *)"strVector___len__", _wrap_strVector___len__, METH_VARARGS, NULL}, - { (char *)"strVector_pop", _wrap_strVector_pop, METH_VARARGS, NULL}, - { (char *)"strVector___getslice__", _wrap_strVector___getslice__, METH_VARARGS, NULL}, - { (char *)"strVector___setslice__", _wrap_strVector___setslice__, METH_VARARGS, NULL}, - { (char *)"strVector___delslice__", _wrap_strVector___delslice__, METH_VARARGS, NULL}, - { (char *)"strVector___delitem__", _wrap_strVector___delitem__, METH_VARARGS, NULL}, - { (char *)"strVector___getitem__", _wrap_strVector___getitem__, METH_VARARGS, NULL}, - { (char *)"strVector___setitem__", _wrap_strVector___setitem__, METH_VARARGS, NULL}, - { (char *)"strVector_append", _wrap_strVector_append, METH_VARARGS, NULL}, - { (char *)"strVector_empty", _wrap_strVector_empty, METH_VARARGS, NULL}, - { (char *)"strVector_size", _wrap_strVector_size, METH_VARARGS, NULL}, - { (char *)"strVector_clear", _wrap_strVector_clear, METH_VARARGS, NULL}, - { (char *)"strVector_swap", _wrap_strVector_swap, METH_VARARGS, NULL}, - { (char *)"strVector_get_allocator", _wrap_strVector_get_allocator, METH_VARARGS, NULL}, - { (char *)"strVector_begin", _wrap_strVector_begin, METH_VARARGS, NULL}, - { (char *)"strVector_end", _wrap_strVector_end, METH_VARARGS, NULL}, - { (char *)"strVector_rbegin", _wrap_strVector_rbegin, METH_VARARGS, NULL}, - { (char *)"strVector_rend", _wrap_strVector_rend, METH_VARARGS, NULL}, - { (char *)"strVector_pop_back", _wrap_strVector_pop_back, METH_VARARGS, NULL}, - { (char *)"strVector_erase", _wrap_strVector_erase, METH_VARARGS, NULL}, - { (char *)"new_strVector", _wrap_new_strVector, METH_VARARGS, NULL}, - { (char *)"strVector_push_back", _wrap_strVector_push_back, METH_VARARGS, NULL}, - { (char *)"strVector_front", _wrap_strVector_front, METH_VARARGS, NULL}, - { (char *)"strVector_back", _wrap_strVector_back, METH_VARARGS, NULL}, - { (char *)"strVector_assign", _wrap_strVector_assign, METH_VARARGS, NULL}, - { (char *)"strVector_resize", _wrap_strVector_resize, METH_VARARGS, NULL}, - { (char *)"strVector_insert", _wrap_strVector_insert, METH_VARARGS, NULL}, - { (char *)"strVector_reserve", _wrap_strVector_reserve, METH_VARARGS, NULL}, - { (char *)"strVector_capacity", _wrap_strVector_capacity, METH_VARARGS, NULL}, - { (char *)"delete_strVector", _wrap_delete_strVector, METH_VARARGS, NULL}, - { (char *)"strVector_swigregister", strVector_swigregister, METH_VARARGS, NULL}, - { (char *)"intVector_iterator", _wrap_intVector_iterator, METH_VARARGS, NULL}, - { (char *)"intVector___nonzero__", _wrap_intVector___nonzero__, METH_VARARGS, NULL}, - { (char *)"intVector___bool__", _wrap_intVector___bool__, METH_VARARGS, NULL}, - { (char *)"intVector___len__", _wrap_intVector___len__, METH_VARARGS, NULL}, - { (char *)"intVector_pop", _wrap_intVector_pop, METH_VARARGS, NULL}, - { (char *)"intVector___getslice__", _wrap_intVector___getslice__, METH_VARARGS, NULL}, - { (char *)"intVector___setslice__", _wrap_intVector___setslice__, METH_VARARGS, NULL}, - { (char *)"intVector___delslice__", _wrap_intVector___delslice__, METH_VARARGS, NULL}, - { (char *)"intVector___delitem__", _wrap_intVector___delitem__, METH_VARARGS, NULL}, - { (char *)"intVector___getitem__", _wrap_intVector___getitem__, METH_VARARGS, NULL}, - { (char *)"intVector___setitem__", _wrap_intVector___setitem__, METH_VARARGS, NULL}, - { (char *)"intVector_append", _wrap_intVector_append, METH_VARARGS, NULL}, - { (char *)"intVector_empty", _wrap_intVector_empty, METH_VARARGS, NULL}, - { (char *)"intVector_size", _wrap_intVector_size, METH_VARARGS, NULL}, - { (char *)"intVector_clear", _wrap_intVector_clear, METH_VARARGS, NULL}, - { (char *)"intVector_swap", _wrap_intVector_swap, METH_VARARGS, NULL}, - { (char *)"intVector_get_allocator", _wrap_intVector_get_allocator, METH_VARARGS, NULL}, - { (char *)"intVector_begin", _wrap_intVector_begin, METH_VARARGS, NULL}, - { (char *)"intVector_end", _wrap_intVector_end, METH_VARARGS, NULL}, - { (char *)"intVector_rbegin", _wrap_intVector_rbegin, METH_VARARGS, NULL}, - { (char *)"intVector_rend", _wrap_intVector_rend, METH_VARARGS, NULL}, - { (char *)"intVector_pop_back", _wrap_intVector_pop_back, METH_VARARGS, NULL}, - { (char *)"intVector_erase", _wrap_intVector_erase, METH_VARARGS, NULL}, - { (char *)"new_intVector", _wrap_new_intVector, METH_VARARGS, NULL}, - { (char *)"intVector_push_back", _wrap_intVector_push_back, METH_VARARGS, NULL}, - { (char *)"intVector_front", _wrap_intVector_front, METH_VARARGS, NULL}, - { (char *)"intVector_back", _wrap_intVector_back, METH_VARARGS, NULL}, - { (char *)"intVector_assign", _wrap_intVector_assign, METH_VARARGS, NULL}, - { (char *)"intVector_resize", _wrap_intVector_resize, METH_VARARGS, NULL}, - { (char *)"intVector_insert", _wrap_intVector_insert, METH_VARARGS, NULL}, - { (char *)"intVector_reserve", _wrap_intVector_reserve, METH_VARARGS, NULL}, - { (char *)"intVector_capacity", _wrap_intVector_capacity, METH_VARARGS, NULL}, - { (char *)"delete_intVector", _wrap_delete_intVector, METH_VARARGS, NULL}, - { (char *)"intVector_swigregister", intVector_swigregister, METH_VARARGS, NULL}, - { (char *)"floatVector_iterator", _wrap_floatVector_iterator, METH_VARARGS, NULL}, - { (char *)"floatVector___nonzero__", _wrap_floatVector___nonzero__, METH_VARARGS, NULL}, - { (char *)"floatVector___bool__", _wrap_floatVector___bool__, METH_VARARGS, NULL}, - { (char *)"floatVector___len__", _wrap_floatVector___len__, METH_VARARGS, NULL}, - { (char *)"floatVector_pop", _wrap_floatVector_pop, METH_VARARGS, NULL}, - { (char *)"floatVector___getslice__", _wrap_floatVector___getslice__, METH_VARARGS, NULL}, - { (char *)"floatVector___setslice__", _wrap_floatVector___setslice__, METH_VARARGS, NULL}, - { (char *)"floatVector___delslice__", _wrap_floatVector___delslice__, METH_VARARGS, NULL}, - { (char *)"floatVector___delitem__", _wrap_floatVector___delitem__, METH_VARARGS, NULL}, - { (char *)"floatVector___getitem__", _wrap_floatVector___getitem__, METH_VARARGS, NULL}, - { (char *)"floatVector___setitem__", _wrap_floatVector___setitem__, METH_VARARGS, NULL}, - { (char *)"floatVector_append", _wrap_floatVector_append, METH_VARARGS, NULL}, - { (char *)"floatVector_empty", _wrap_floatVector_empty, METH_VARARGS, NULL}, - { (char *)"floatVector_size", _wrap_floatVector_size, METH_VARARGS, NULL}, - { (char *)"floatVector_clear", _wrap_floatVector_clear, METH_VARARGS, NULL}, - { (char *)"floatVector_swap", _wrap_floatVector_swap, METH_VARARGS, NULL}, - { (char *)"floatVector_get_allocator", _wrap_floatVector_get_allocator, METH_VARARGS, NULL}, - { (char *)"floatVector_begin", _wrap_floatVector_begin, METH_VARARGS, NULL}, - { (char *)"floatVector_end", _wrap_floatVector_end, METH_VARARGS, NULL}, - { (char *)"floatVector_rbegin", _wrap_floatVector_rbegin, METH_VARARGS, NULL}, - { (char *)"floatVector_rend", _wrap_floatVector_rend, METH_VARARGS, NULL}, - { (char *)"floatVector_pop_back", _wrap_floatVector_pop_back, METH_VARARGS, NULL}, - { (char *)"floatVector_erase", _wrap_floatVector_erase, METH_VARARGS, NULL}, - { (char *)"new_floatVector", _wrap_new_floatVector, METH_VARARGS, NULL}, - { (char *)"floatVector_push_back", _wrap_floatVector_push_back, METH_VARARGS, NULL}, - { (char *)"floatVector_front", _wrap_floatVector_front, METH_VARARGS, NULL}, - { (char *)"floatVector_back", _wrap_floatVector_back, METH_VARARGS, NULL}, - { (char *)"floatVector_assign", _wrap_floatVector_assign, METH_VARARGS, NULL}, - { (char *)"floatVector_resize", _wrap_floatVector_resize, METH_VARARGS, NULL}, - { (char *)"floatVector_insert", _wrap_floatVector_insert, METH_VARARGS, NULL}, - { (char *)"floatVector_reserve", _wrap_floatVector_reserve, METH_VARARGS, NULL}, - { (char *)"floatVector_capacity", _wrap_floatVector_capacity, METH_VARARGS, NULL}, - { (char *)"delete_floatVector", _wrap_delete_floatVector, METH_VARARGS, NULL}, - { (char *)"floatVector_swigregister", floatVector_swigregister, METH_VARARGS, NULL}, - { (char *)"layerVector_iterator", _wrap_layerVector_iterator, METH_VARARGS, NULL}, - { (char *)"layerVector___nonzero__", _wrap_layerVector___nonzero__, METH_VARARGS, NULL}, - { (char *)"layerVector___bool__", _wrap_layerVector___bool__, METH_VARARGS, NULL}, - { (char *)"layerVector___len__", _wrap_layerVector___len__, METH_VARARGS, NULL}, - { (char *)"layerVector_pop", _wrap_layerVector_pop, METH_VARARGS, NULL}, - { (char *)"layerVector___getslice__", _wrap_layerVector___getslice__, METH_VARARGS, NULL}, - { (char *)"layerVector___setslice__", _wrap_layerVector___setslice__, METH_VARARGS, NULL}, - { (char *)"layerVector___delslice__", _wrap_layerVector___delslice__, METH_VARARGS, NULL}, - { (char *)"layerVector___delitem__", _wrap_layerVector___delitem__, METH_VARARGS, NULL}, - { (char *)"layerVector___getitem__", _wrap_layerVector___getitem__, METH_VARARGS, NULL}, - { (char *)"layerVector___setitem__", _wrap_layerVector___setitem__, METH_VARARGS, NULL}, - { (char *)"layerVector_append", _wrap_layerVector_append, METH_VARARGS, NULL}, - { (char *)"layerVector_empty", _wrap_layerVector_empty, METH_VARARGS, NULL}, - { (char *)"layerVector_size", _wrap_layerVector_size, METH_VARARGS, NULL}, - { (char *)"layerVector_clear", _wrap_layerVector_clear, METH_VARARGS, NULL}, - { (char *)"layerVector_swap", _wrap_layerVector_swap, METH_VARARGS, NULL}, - { (char *)"layerVector_get_allocator", _wrap_layerVector_get_allocator, METH_VARARGS, NULL}, - { (char *)"layerVector_begin", _wrap_layerVector_begin, METH_VARARGS, NULL}, - { (char *)"layerVector_end", _wrap_layerVector_end, METH_VARARGS, NULL}, - { (char *)"layerVector_rbegin", _wrap_layerVector_rbegin, METH_VARARGS, NULL}, - { (char *)"layerVector_rend", _wrap_layerVector_rend, METH_VARARGS, NULL}, - { (char *)"layerVector_pop_back", _wrap_layerVector_pop_back, METH_VARARGS, NULL}, - { (char *)"layerVector_erase", _wrap_layerVector_erase, METH_VARARGS, NULL}, - { (char *)"new_layerVector", _wrap_new_layerVector, METH_VARARGS, NULL}, - { (char *)"layerVector_push_back", _wrap_layerVector_push_back, METH_VARARGS, NULL}, - { (char *)"layerVector_front", _wrap_layerVector_front, METH_VARARGS, NULL}, - { (char *)"layerVector_back", _wrap_layerVector_back, METH_VARARGS, NULL}, - { (char *)"layerVector_assign", _wrap_layerVector_assign, METH_VARARGS, NULL}, - { (char *)"layerVector_resize", _wrap_layerVector_resize, METH_VARARGS, NULL}, - { (char *)"layerVector_insert", _wrap_layerVector_insert, METH_VARARGS, NULL}, - { (char *)"layerVector_reserve", _wrap_layerVector_reserve, METH_VARARGS, NULL}, - { (char *)"layerVector_capacity", _wrap_layerVector_capacity, METH_VARARGS, NULL}, - { (char *)"delete_layerVector", _wrap_delete_layerVector, METH_VARARGS, NULL}, - { (char *)"layerVector_swigregister", layerVector_swigregister, METH_VARARGS, NULL}, - { (char *)"paramVector_iterator", _wrap_paramVector_iterator, METH_VARARGS, NULL}, - { (char *)"paramVector___nonzero__", _wrap_paramVector___nonzero__, METH_VARARGS, NULL}, - { (char *)"paramVector___bool__", _wrap_paramVector___bool__, METH_VARARGS, NULL}, - { (char *)"paramVector___len__", _wrap_paramVector___len__, METH_VARARGS, NULL}, - { (char *)"paramVector_pop", _wrap_paramVector_pop, METH_VARARGS, NULL}, - { (char *)"paramVector___getslice__", _wrap_paramVector___getslice__, METH_VARARGS, NULL}, - { (char *)"paramVector___setslice__", _wrap_paramVector___setslice__, METH_VARARGS, NULL}, - { (char *)"paramVector___delslice__", _wrap_paramVector___delslice__, METH_VARARGS, NULL}, - { (char *)"paramVector___delitem__", _wrap_paramVector___delitem__, METH_VARARGS, NULL}, - { (char *)"paramVector___getitem__", _wrap_paramVector___getitem__, METH_VARARGS, NULL}, - { (char *)"paramVector___setitem__", _wrap_paramVector___setitem__, METH_VARARGS, NULL}, - { (char *)"paramVector_append", _wrap_paramVector_append, METH_VARARGS, NULL}, - { (char *)"paramVector_empty", _wrap_paramVector_empty, METH_VARARGS, NULL}, - { (char *)"paramVector_size", _wrap_paramVector_size, METH_VARARGS, NULL}, - { (char *)"paramVector_clear", _wrap_paramVector_clear, METH_VARARGS, NULL}, - { (char *)"paramVector_swap", _wrap_paramVector_swap, METH_VARARGS, NULL}, - { (char *)"paramVector_get_allocator", _wrap_paramVector_get_allocator, METH_VARARGS, NULL}, - { (char *)"paramVector_begin", _wrap_paramVector_begin, METH_VARARGS, NULL}, - { (char *)"paramVector_end", _wrap_paramVector_end, METH_VARARGS, NULL}, - { (char *)"paramVector_rbegin", _wrap_paramVector_rbegin, METH_VARARGS, NULL}, - { (char *)"paramVector_rend", _wrap_paramVector_rend, METH_VARARGS, NULL}, - { (char *)"paramVector_pop_back", _wrap_paramVector_pop_back, METH_VARARGS, NULL}, - { (char *)"paramVector_erase", _wrap_paramVector_erase, METH_VARARGS, NULL}, - { (char *)"new_paramVector", _wrap_new_paramVector, METH_VARARGS, NULL}, - { (char *)"paramVector_push_back", _wrap_paramVector_push_back, METH_VARARGS, NULL}, - { (char *)"paramVector_front", _wrap_paramVector_front, METH_VARARGS, NULL}, - { (char *)"paramVector_back", _wrap_paramVector_back, METH_VARARGS, NULL}, - { (char *)"paramVector_assign", _wrap_paramVector_assign, METH_VARARGS, NULL}, - { (char *)"paramVector_resize", _wrap_paramVector_resize, METH_VARARGS, NULL}, - { (char *)"paramVector_insert", _wrap_paramVector_insert, METH_VARARGS, NULL}, - { (char *)"paramVector_reserve", _wrap_paramVector_reserve, METH_VARARGS, NULL}, - { (char *)"paramVector_capacity", _wrap_paramVector_capacity, METH_VARARGS, NULL}, - { (char *)"delete_paramVector", _wrap_delete_paramVector, METH_VARARGS, NULL}, - { (char *)"paramVector_swigregister", paramVector_swigregister, METH_VARARGS, NULL}, - { (char *)"Driver_Train", _wrap_Driver_Train, METH_VARARGS, NULL}, - { (char *)"Driver_Init", _wrap_Driver_Init, METH_VARARGS, NULL}, - { (char *)"Driver_InitLog", _wrap_Driver_InitLog, METH_VARARGS, NULL}, - { (char *)"Driver_Test", _wrap_Driver_Test, METH_VARARGS, NULL}, - { (char *)"new_Driver", _wrap_new_Driver, METH_VARARGS, NULL}, - { (char *)"delete_Driver", _wrap_delete_Driver, METH_VARARGS, NULL}, - { (char *)"Driver_swigregister", Driver_swigregister, METH_VARARGS, NULL}, - { (char *)"NeuralNet_CreateFromStr", _wrap_NeuralNet_CreateFromStr, METH_VARARGS, NULL}, - { (char *)"NeuralNet_Load", _wrap_NeuralNet_Load, METH_VARARGS, NULL}, - { (char *)"NeuralNet_layers", _wrap_NeuralNet_layers, METH_VARARGS, NULL}, - { (char *)"NeuralNet_srclayers", _wrap_NeuralNet_srclayers, METH_VARARGS, NULL}, - { (char *)"new_NeuralNet", _wrap_new_NeuralNet, METH_VARARGS, NULL}, - { (char *)"delete_NeuralNet", _wrap_delete_NeuralNet, METH_VARARGS, NULL}, - { (char *)"NeuralNet_swigregister", NeuralNet_swigregister, METH_VARARGS, NULL}, - { (char *)"DummyLayer_Setup", _wrap_DummyLayer_Setup, METH_VARARGS, NULL}, - { (char *)"DummyLayer_Feed", _wrap_DummyLayer_Feed, METH_VARARGS, NULL}, - { (char *)"DummyLayer_ToLayer", _wrap_DummyLayer_ToLayer, METH_VARARGS, NULL}, - { (char *)"new_DummyLayer", _wrap_new_DummyLayer, METH_VARARGS, NULL}, - { (char *)"delete_DummyLayer", _wrap_delete_DummyLayer, METH_VARARGS, NULL}, - { (char *)"DummyLayer_swigregister", DummyLayer_swigregister, METH_VARARGS, NULL}, - { (char *)"Layer_CreateLayer", _wrap_Layer_CreateLayer, METH_VARARGS, NULL}, - { (char *)"Layer_SetupLayer", _wrap_Layer_SetupLayer, METH_VARARGS, NULL}, - { (char *)"Layer_ComputeFeature", _wrap_Layer_ComputeFeature, METH_VARARGS, NULL}, - { (char *)"Layer_ComputeGradient", _wrap_Layer_ComputeGradient, METH_VARARGS, NULL}, - { (char *)"Layer_data", _wrap_Layer_data, METH_VARARGS, NULL}, - { (char *)"Layer_GetParams", _wrap_Layer_GetParams, METH_VARARGS, NULL}, - { (char *)"Layer_ToString", _wrap_Layer_ToString, METH_VARARGS, NULL}, - { (char *)"Layer_SetParams", _wrap_Layer_SetParams, METH_VARARGS, NULL}, - { (char *)"Layer_swigregister", Layer_swigregister, METH_VARARGS, NULL}, - { (char *)"Updater_CreateUpdater", _wrap_Updater_CreateUpdater, METH_VARARGS, NULL}, - { (char *)"Updater_Update", _wrap_Updater_Update, METH_VARARGS, NULL}, - { (char *)"Updater_swigregister", Updater_swigregister, METH_VARARGS, NULL}, - { (char *)"Param_size", _wrap_Param_size, METH_VARARGS, NULL}, - { (char *)"Param_shape", _wrap_Param_shape, METH_VARARGS, NULL}, - { (char *)"Param_mutable_cpu_data", _wrap_Param_mutable_cpu_data, METH_VARARGS, NULL}, - { (char *)"Param_FromProto", _wrap_Param_FromProto, METH_VARARGS, NULL}, - { (char *)"new_Param", _wrap_new_Param, METH_VARARGS, NULL}, - { (char *)"delete_Param", _wrap_delete_Param, METH_VARARGS, NULL}, - { (char *)"Param_swigregister", Param_swigregister, METH_VARARGS, NULL}, - { (char *)"floatBlob_count", _wrap_floatBlob_count, METH_VARARGS, NULL}, - { (char *)"floatBlob_shape", _wrap_floatBlob_shape, METH_VARARGS, NULL}, - { (char *)"floatBlob_mutable_cpu_data", _wrap_floatBlob_mutable_cpu_data, METH_VARARGS, NULL}, - { (char *)"floatBlob_cpu_data", _wrap_floatBlob_cpu_data, METH_VARARGS, NULL}, - { (char *)"new_floatBlob", _wrap_new_floatBlob, METH_VARARGS, NULL}, - { (char *)"delete_floatBlob", _wrap_delete_floatBlob, METH_VARARGS, NULL}, - { (char *)"floatBlob_swigregister", floatBlob_swigregister, METH_VARARGS, NULL}, - { NULL, NULL, 0, NULL } -}; - - -/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ - -static void *_p_floatArrayTo_p_float(void *x, int *SWIGUNUSEDPARM(newmemory)) { - return (void *)((float *) ((floatArray *) x)); -} -static swig_type_info _swigt__p_allocator_type = {"_p_allocator_type", "allocator_type *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_const_reference = {"_p_const_reference", "const_reference *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_difference_type = {"_p_difference_type", "difference_type *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_float = {"_p_float", "float *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_floatArray = {"_p_floatArray", "floatArray *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_p_PyObject = {"_p_p_PyObject", "PyObject **", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_reference = {"_p_reference", "reference *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_singa__BlobT_float_t = {"_p_singa__BlobT_float_t", "singa::Blob< float > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_singa__Driver = {"_p_singa__Driver", "singa::Driver *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_singa__DummyLayer = {"_p_singa__DummyLayer", "singa::DummyLayer *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_singa__Layer = {"_p_singa__Layer", "std::vector< singa::Layer * >::value_type|singa::Layer *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_singa__NeuralNet = {"_p_singa__NeuralNet", "singa::NeuralNet *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_singa__Param = {"_p_singa__Param", "std::vector< singa::Param * >::value_type|singa::Param *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_singa__Updater = {"_p_singa__Updater", "singa::Updater *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_size_type = {"_p_size_type", "size_type *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__allocatorT_float_t = {"_p_std__allocatorT_float_t", "std::vector< float >::allocator_type *|std::allocator< float > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__allocatorT_int_t = {"_p_std__allocatorT_int_t", "std::vector< int >::allocator_type *|std::allocator< int > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__allocatorT_singa__Layer_p_t = {"_p_std__allocatorT_singa__Layer_p_t", "std::vector< singa::Layer * >::allocator_type *|std::allocator< singa::Layer * > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__allocatorT_singa__Param_p_t = {"_p_std__allocatorT_singa__Param_p_t", "std::vector< singa::Param * >::allocator_type *|std::allocator< singa::Param * > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__allocatorT_std__string_t = {"_p_std__allocatorT_std__string_t", "std::vector< std::string >::allocator_type *|std::allocator< std::string > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__invalid_argument = {"_p_std__invalid_argument", "std::invalid_argument *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__vectorT__Tp__Alloc_t = {"_p_std__vectorT__Tp__Alloc_t", "std::vector< _Tp,_Alloc > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__vectorT__Tp_p__Alloc_t = {"_p_std__vectorT__Tp_p__Alloc_t", "std::vector< _Tp *,_Alloc > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__vectorT_float_std__allocatorT_float_t_t = {"_p_std__vectorT_float_std__allocatorT_float_t_t", "std::vector< float > *|std::vector< float,std::allocator< float > > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__vectorT_int_std__allocatorT_int_t_t = {"_p_std__vectorT_int_std__allocatorT_int_t_t", "std::vector< int,std::allocator< int > > *|std::vector< int > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t = {"_p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t", "std::vector< singa::Layer *,std::allocator< singa::Layer * > > *|std::vector< singa::Layer * > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t = {"_p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t", "std::vector< singa::Param *,std::allocator< singa::Param * > > *|std::vector< singa::Param * > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t = {"_p_std__vectorT_std__string_std__allocatorT_std__string_t_t", "std::vector< std::string,std::allocator< std::string > > *|std::vector< std::string > *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_swig__SwigPyIterator = {"_p_swig__SwigPyIterator", "swig::SwigPyIterator *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0, 0, (void*)0, 0}; - -static swig_type_info *swig_type_initial[] = { - &_swigt__p_allocator_type, - &_swigt__p_char, - &_swigt__p_const_reference, - &_swigt__p_difference_type, - &_swigt__p_float, - &_swigt__p_floatArray, - &_swigt__p_p_PyObject, - &_swigt__p_p_char, - &_swigt__p_reference, - &_swigt__p_singa__BlobT_float_t, - &_swigt__p_singa__Driver, - &_swigt__p_singa__DummyLayer, - &_swigt__p_singa__Layer, - &_swigt__p_singa__NeuralNet, - &_swigt__p_singa__Param, - &_swigt__p_singa__Updater, - &_swigt__p_size_type, - &_swigt__p_std__allocatorT_float_t, - &_swigt__p_std__allocatorT_int_t, - &_swigt__p_std__allocatorT_singa__Layer_p_t, - &_swigt__p_std__allocatorT_singa__Param_p_t, - &_swigt__p_std__allocatorT_std__string_t, - &_swigt__p_std__invalid_argument, - &_swigt__p_std__vectorT__Tp__Alloc_t, - &_swigt__p_std__vectorT__Tp_p__Alloc_t, - &_swigt__p_std__vectorT_float_std__allocatorT_float_t_t, - &_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, - &_swigt__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, - &_swigt__p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, - &_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, - &_swigt__p_swig__SwigPyIterator, - &_swigt__p_value_type, -}; - -static swig_cast_info _swigc__p_allocator_type[] = { {&_swigt__p_allocator_type, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_const_reference[] = { {&_swigt__p_const_reference, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_difference_type[] = { {&_swigt__p_difference_type, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_float[] = { {&_swigt__p_float, 0, 0, 0}, {&_swigt__p_floatArray, _p_floatArrayTo_p_float, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_floatArray[] = { {&_swigt__p_floatArray, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_p_PyObject[] = { {&_swigt__p_p_PyObject, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_reference[] = { {&_swigt__p_reference, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_singa__BlobT_float_t[] = { {&_swigt__p_singa__BlobT_float_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_singa__Driver[] = { {&_swigt__p_singa__Driver, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_singa__DummyLayer[] = { {&_swigt__p_singa__DummyLayer, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_singa__Layer[] = { {&_swigt__p_singa__Layer, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_singa__NeuralNet[] = { {&_swigt__p_singa__NeuralNet, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_singa__Param[] = { {&_swigt__p_singa__Param, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_singa__Updater[] = { {&_swigt__p_singa__Updater, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_size_type[] = { {&_swigt__p_size_type, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__allocatorT_float_t[] = { {&_swigt__p_std__allocatorT_float_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__allocatorT_int_t[] = { {&_swigt__p_std__allocatorT_int_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__allocatorT_singa__Layer_p_t[] = { {&_swigt__p_std__allocatorT_singa__Layer_p_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__allocatorT_singa__Param_p_t[] = { {&_swigt__p_std__allocatorT_singa__Param_p_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__allocatorT_std__string_t[] = { {&_swigt__p_std__allocatorT_std__string_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__invalid_argument[] = { {&_swigt__p_std__invalid_argument, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__vectorT__Tp__Alloc_t[] = { {&_swigt__p_std__vectorT__Tp__Alloc_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__vectorT__Tp_p__Alloc_t[] = { {&_swigt__p_std__vectorT__Tp_p__Alloc_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__vectorT_float_std__allocatorT_float_t_t[] = { {&_swigt__p_std__vectorT_float_std__allocatorT_float_t_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__vectorT_int_std__allocatorT_int_t_t[] = { {&_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t[] = { {&_swigt__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t[] = { {&_swigt__p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t[] = { {&_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_swig__SwigPyIterator[] = { {&_swigt__p_swig__SwigPyIterator, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_value_type[] = { {&_swigt__p_value_type, 0, 0, 0},{0, 0, 0, 0}}; - -static swig_cast_info *swig_cast_initial[] = { - _swigc__p_allocator_type, - _swigc__p_char, - _swigc__p_const_reference, - _swigc__p_difference_type, - _swigc__p_float, - _swigc__p_floatArray, - _swigc__p_p_PyObject, - _swigc__p_p_char, - _swigc__p_reference, - _swigc__p_singa__BlobT_float_t, - _swigc__p_singa__Driver, - _swigc__p_singa__DummyLayer, - _swigc__p_singa__Layer, - _swigc__p_singa__NeuralNet, - _swigc__p_singa__Param, - _swigc__p_singa__Updater, - _swigc__p_size_type, - _swigc__p_std__allocatorT_float_t, - _swigc__p_std__allocatorT_int_t, - _swigc__p_std__allocatorT_singa__Layer_p_t, - _swigc__p_std__allocatorT_singa__Param_p_t, - _swigc__p_std__allocatorT_std__string_t, - _swigc__p_std__invalid_argument, - _swigc__p_std__vectorT__Tp__Alloc_t, - _swigc__p_std__vectorT__Tp_p__Alloc_t, - _swigc__p_std__vectorT_float_std__allocatorT_float_t_t, - _swigc__p_std__vectorT_int_std__allocatorT_int_t_t, - _swigc__p_std__vectorT_singa__Layer_p_std__allocatorT_singa__Layer_p_t_t, - _swigc__p_std__vectorT_singa__Param_p_std__allocatorT_singa__Param_p_t_t, - _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, - _swigc__p_swig__SwigPyIterator, - _swigc__p_value_type, -}; - - -/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ - -static swig_const_info swig_const_table[] = { -{0, 0, 0, 0.0, 0, 0}}; - -#ifdef __cplusplus -} -#endif -/* ----------------------------------------------------------------------------- - * Type initialization: - * This problem is tough by the requirement that no dynamic - * memory is used. Also, since swig_type_info structures store pointers to - * swig_cast_info structures and swig_cast_info structures store pointers back - * to swig_type_info structures, we need some lookup code at initialization. - * The idea is that swig generates all the structures that are needed. - * The runtime then collects these partially filled structures. - * The SWIG_InitializeModule function takes these initial arrays out of - * swig_module, and does all the lookup, filling in the swig_module.types - * array with the correct data and linking the correct swig_cast_info - * structures together. - * - * The generated swig_type_info structures are assigned staticly to an initial - * array. We just loop through that array, and handle each type individually. - * First we lookup if this type has been already loaded, and if so, use the - * loaded structure instead of the generated one. Then we have to fill in the - * cast linked list. The cast data is initially stored in something like a - * two-dimensional array. Each row corresponds to a type (there are the same - * number of rows as there are in the swig_type_initial array). Each entry in - * a column is one of the swig_cast_info structures for that type. - * The cast_initial array is actually an array of arrays, because each row has - * a variable number of columns. So to actually build the cast linked list, - * we find the array of casts associated with the type, and loop through it - * adding the casts to the list. The one last trick we need to do is making - * sure the type pointer in the swig_cast_info struct is correct. - * - * First off, we lookup the cast->type name to see if it is already loaded. - * There are three cases to handle: - * 1) If the cast->type has already been loaded AND the type we are adding - * casting info to has not been loaded (it is in this module), THEN we - * replace the cast->type pointer with the type pointer that has already - * been loaded. - * 2) If BOTH types (the one we are adding casting info to, and the - * cast->type) are loaded, THEN the cast info has already been loaded by - * the previous module so we just ignore it. - * 3) Finally, if cast->type has not already been loaded, then we add that - * swig_cast_info to the linked list (because the cast->type) pointer will - * be correct. - * ----------------------------------------------------------------------------- */ - -#ifdef __cplusplus -extern "C" { -#if 0 -} /* c-mode */ -#endif -#endif - -#if 0 -#define SWIGRUNTIME_DEBUG -#endif - - -SWIGRUNTIME void -SWIG_InitializeModule(void *clientdata) { - size_t i; - swig_module_info *module_head, *iter; - int found, init; - - /* check to see if the circular list has been setup, if not, set it up */ - if (swig_module.next==0) { - /* Initialize the swig_module */ - swig_module.type_initial = swig_type_initial; - swig_module.cast_initial = swig_cast_initial; - swig_module.next = &swig_module; - init = 1; - } else { - init = 0; - } - - /* Try and load any already created modules */ - module_head = SWIG_GetModule(clientdata); - if (!module_head) { - /* This is the first module loaded for this interpreter */ - /* so set the swig module into the interpreter */ - SWIG_SetModule(clientdata, &swig_module); - module_head = &swig_module; - } else { - /* the interpreter has loaded a SWIG module, but has it loaded this one? */ - found=0; - iter=module_head; - do { - if (iter==&swig_module) { - found=1; - break; - } - iter=iter->next; - } while (iter!= module_head); - - /* if the is found in the list, then all is done and we may leave */ - if (found) return; - /* otherwise we must add out module into the list */ - swig_module.next = module_head->next; - module_head->next = &swig_module; - } - - /* When multiple interpreters are used, a module could have already been initialized in - a different interpreter, but not yet have a pointer in this interpreter. - In this case, we do not want to continue adding types... everything should be - set up already */ - if (init == 0) return; - - /* Now work on filling in swig_module.types */ -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: size %d\n", swig_module.size); -#endif - for (i = 0; i < swig_module.size; ++i) { - swig_type_info *type = 0; - swig_type_info *ret; - swig_cast_info *cast; - -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); -#endif - - /* if there is another module already loaded */ - if (swig_module.next != &swig_module) { - type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); - } - if (type) { - /* Overwrite clientdata field */ -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found type %s\n", type->name); -#endif - if (swig_module.type_initial[i]->clientdata) { - type->clientdata = swig_module.type_initial[i]->clientdata; -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); -#endif - } - } else { - type = swig_module.type_initial[i]; - } - - /* Insert casting types */ - cast = swig_module.cast_initial[i]; - while (cast->type) { - /* Don't need to add information already in the list */ - ret = 0; -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); -#endif - if (swig_module.next != &swig_module) { - ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); -#ifdef SWIGRUNTIME_DEBUG - if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); -#endif - } - if (ret) { - if (type == swig_module.type_initial[i]) { -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: skip old type %s\n", ret->name); -#endif - cast->type = ret; - ret = 0; - } else { - /* Check for casting already in the list */ - swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); -#ifdef SWIGRUNTIME_DEBUG - if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); -#endif - if (!ocast) ret = 0; - } - } - - if (!ret) { -#ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); -#endif - if (type->cast) { - type->cast->prev = cast; - cast->next = type->cast; - } - type->cast = cast; - } - cast++; - } - /* Set entry in modules->types array equal to the type */ - swig_module.types[i] = type; - } - swig_module.types[i] = 0; - -#ifdef SWIGRUNTIME_DEBUG - printf("**** SWIG_InitializeModule: Cast List ******\n"); - for (i = 0; i < swig_module.size; ++i) { - int j = 0; - swig_cast_info *cast = swig_module.cast_initial[i]; - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); - while (cast->type) { - printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); - cast++; - ++j; - } - printf("---- Total casts: %d\n",j); - } - printf("**** SWIG_InitializeModule: Cast List ******\n"); -#endif -} - -/* This function will propagate the clientdata field of type to -* any new swig_type_info structures that have been added into the list -* of equivalent types. It is like calling -* SWIG_TypeClientData(type, clientdata) a second time. -*/ -SWIGRUNTIME void -SWIG_PropagateClientData(void) { - size_t i; - swig_cast_info *equiv; - static int init_run = 0; - - if (init_run) return; - init_run = 1; - - for (i = 0; i < swig_module.size; i++) { - if (swig_module.types[i]->clientdata) { - equiv = swig_module.types[i]->cast; - while (equiv) { - if (!equiv->converter) { - if (equiv->type && !equiv->type->clientdata) - SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); - } - equiv = equiv->next; - } - } - } -} - -#ifdef __cplusplus -#if 0 -{ - /* c-mode */ -#endif -} -#endif - - - -#ifdef __cplusplus -extern "C" { -#endif - - /* Python-specific SWIG API */ -#define SWIG_newvarlink() SWIG_Python_newvarlink() -#define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) -#define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) - - /* ----------------------------------------------------------------------------- - * global variable support code. - * ----------------------------------------------------------------------------- */ - - typedef struct swig_globalvar { - char *name; /* Name of global variable */ - PyObject *(*get_attr)(void); /* Return the current value */ - int (*set_attr)(PyObject *); /* Set the value */ - struct swig_globalvar *next; - } swig_globalvar; - - typedef struct swig_varlinkobject { - PyObject_HEAD - swig_globalvar *vars; - } swig_varlinkobject; - - SWIGINTERN PyObject * - swig_varlink_repr(swig_varlinkobject *SWIGUNUSEDPARM(v)) { -#if PY_VERSION_HEX >= 0x03000000 - return PyUnicode_InternFromString(""); -#else - return PyString_FromString(""); -#endif - } - - SWIGINTERN PyObject * - swig_varlink_str(swig_varlinkobject *v) { -#if PY_VERSION_HEX >= 0x03000000 - PyObject *str = PyUnicode_InternFromString("("); - PyObject *tail; - PyObject *joined; - swig_globalvar *var; - for (var = v->vars; var; var=var->next) { - tail = PyUnicode_FromString(var->name); - joined = PyUnicode_Concat(str, tail); - Py_DecRef(str); - Py_DecRef(tail); - str = joined; - if (var->next) { - tail = PyUnicode_InternFromString(", "); - joined = PyUnicode_Concat(str, tail); - Py_DecRef(str); - Py_DecRef(tail); - str = joined; - } - } - tail = PyUnicode_InternFromString(")"); - joined = PyUnicode_Concat(str, tail); - Py_DecRef(str); - Py_DecRef(tail); - str = joined; -#else - PyObject *str = PyString_FromString("("); - swig_globalvar *var; - for (var = v->vars; var; var=var->next) { - PyString_ConcatAndDel(&str,PyString_FromString(var->name)); - if (var->next) PyString_ConcatAndDel(&str,PyString_FromString(", ")); - } - PyString_ConcatAndDel(&str,PyString_FromString(")")); -#endif - return str; - } - - SWIGINTERN int - swig_varlink_print(swig_varlinkobject *v, FILE *fp, int SWIGUNUSEDPARM(flags)) { - char *tmp; - PyObject *str = swig_varlink_str(v); - fprintf(fp,"Swig global variables "); - fprintf(fp,"%s\n", tmp = SWIG_Python_str_AsChar(str)); - SWIG_Python_str_DelForPy3(tmp); - Py_DECREF(str); - return 0; - } - - SWIGINTERN void - swig_varlink_dealloc(swig_varlinkobject *v) { - swig_globalvar *var = v->vars; - while (var) { - swig_globalvar *n = var->next; - free(var->name); - free(var); - var = n; - } - } - - SWIGINTERN PyObject * - swig_varlink_getattr(swig_varlinkobject *v, char *n) { - PyObject *res = NULL; - swig_globalvar *var = v->vars; - while (var) { - if (strcmp(var->name,n) == 0) { - res = (*var->get_attr)(); - break; - } - var = var->next; - } - if (res == NULL && !PyErr_Occurred()) { - PyErr_SetString(PyExc_NameError,"Unknown C global variable"); - } - return res; - } - - SWIGINTERN int - swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) { - int res = 1; - swig_globalvar *var = v->vars; - while (var) { - if (strcmp(var->name,n) == 0) { - res = (*var->set_attr)(p); - break; - } - var = var->next; - } - if (res == 1 && !PyErr_Occurred()) { - PyErr_SetString(PyExc_NameError,"Unknown C global variable"); - } - return res; - } - - SWIGINTERN PyTypeObject* - swig_varlink_type(void) { - static char varlink__doc__[] = "Swig var link object"; - static PyTypeObject varlink_type; - static int type_init = 0; - if (!type_init) { - const PyTypeObject tmp = { - /* PyObject header changed in Python 3 */ -#if PY_VERSION_HEX >= 0x03000000 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ -#endif - (char *)"swigvarlink", /* tp_name */ - sizeof(swig_varlinkobject), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor) swig_varlink_dealloc, /* tp_dealloc */ - (printfunc) swig_varlink_print, /* tp_print */ - (getattrfunc) swig_varlink_getattr, /* tp_getattr */ - (setattrfunc) swig_varlink_setattr, /* tp_setattr */ - 0, /* tp_compare */ - (reprfunc) swig_varlink_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - (reprfunc) swig_varlink_str, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - 0, /* tp_flags */ - varlink__doc__, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ -#if PY_VERSION_HEX >= 0x02020000 - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* tp_iter -> tp_weaklist */ -#endif -#if PY_VERSION_HEX >= 0x02030000 - 0, /* tp_del */ -#endif -#if PY_VERSION_HEX >= 0x02060000 - 0, /* tp_version */ -#endif -#ifdef COUNT_ALLOCS - 0,0,0,0 /* tp_alloc -> tp_next */ -#endif - }; - varlink_type = tmp; - type_init = 1; -#if PY_VERSION_HEX < 0x02020000 - varlink_type.ob_type = &PyType_Type; -#else - if (PyType_Ready(&varlink_type) < 0) - return NULL; -#endif - } - return &varlink_type; - } - - /* Create a variable linking object for use later */ - SWIGINTERN PyObject * - SWIG_Python_newvarlink(void) { - swig_varlinkobject *result = PyObject_NEW(swig_varlinkobject, swig_varlink_type()); - if (result) { - result->vars = 0; - } - return ((PyObject*) result); - } - - SWIGINTERN void - SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) { - swig_varlinkobject *v = (swig_varlinkobject *) p; - swig_globalvar *gv = (swig_globalvar *) malloc(sizeof(swig_globalvar)); - if (gv) { - size_t size = strlen(name)+1; - gv->name = (char *)malloc(size); - if (gv->name) { - strncpy(gv->name,name,size); - gv->get_attr = get_attr; - gv->set_attr = set_attr; - gv->next = v->vars; - } - } - v->vars = gv; - } - - SWIGINTERN PyObject * - SWIG_globals(void) { - static PyObject *_SWIG_globals = 0; - if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); - return _SWIG_globals; - } - - /* ----------------------------------------------------------------------------- - * constants/methods manipulation - * ----------------------------------------------------------------------------- */ - - /* Install Constants */ - SWIGINTERN void - SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { - PyObject *obj = 0; - size_t i; - for (i = 0; constants[i].type; ++i) { - switch(constants[i].type) { - case SWIG_PY_POINTER: - obj = SWIG_InternalNewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0); - break; - case SWIG_PY_BINARY: - obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype)); - break; - default: - obj = 0; - break; - } - if (obj) { - PyDict_SetItemString(d, constants[i].name, obj); - Py_DECREF(obj); - } - } - } - - /* -----------------------------------------------------------------------------*/ - /* Fix SwigMethods to carry the callback ptrs when needed */ - /* -----------------------------------------------------------------------------*/ - - SWIGINTERN void - SWIG_Python_FixMethods(PyMethodDef *methods, - swig_const_info *const_table, - swig_type_info **types, - swig_type_info **types_initial) { - size_t i; - for (i = 0; methods[i].ml_name; ++i) { - const char *c = methods[i].ml_doc; - if (c && (c = strstr(c, "swig_ptr: "))) { - int j; - swig_const_info *ci = 0; - const char *name = c + 10; - for (j = 0; const_table[j].type; ++j) { - if (strncmp(const_table[j].name, name, - strlen(const_table[j].name)) == 0) { - ci = &(const_table[j]); - break; - } - } - if (ci) { - void *ptr = (ci->type == SWIG_PY_POINTER) ? ci->pvalue : 0; - if (ptr) { - size_t shift = (ci->ptype) - types; - swig_type_info *ty = types_initial[shift]; - size_t ldoc = (c - methods[i].ml_doc); - size_t lptr = strlen(ty->name)+2*sizeof(void*)+2; - char *ndoc = (char*)malloc(ldoc + lptr + 10); - if (ndoc) { - char *buff = ndoc; - strncpy(buff, methods[i].ml_doc, ldoc); - buff += ldoc; - strncpy(buff, "swig_ptr: ", 10); - buff += 10; - SWIG_PackVoidPtr(buff, ptr, ty->name, lptr); - methods[i].ml_doc = ndoc; - } - } - } - } - } - } - -#ifdef __cplusplus -} -#endif - -/* -----------------------------------------------------------------------------* - * Partial Init method - * -----------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" -#endif - -SWIGEXPORT -#if PY_VERSION_HEX >= 0x03000000 -PyObject* -#else -void -#endif -SWIG_init(void) { - PyObject *m, *d, *md; -#if PY_VERSION_HEX >= 0x03000000 - static struct PyModuleDef SWIG_module = { -# if PY_VERSION_HEX >= 0x03020000 - PyModuleDef_HEAD_INIT, -# else - { - PyObject_HEAD_INIT(NULL) - NULL, /* m_init */ - 0, /* m_index */ - NULL, /* m_copy */ - }, -# endif - (char *) SWIG_name, - NULL, - -1, - SwigMethods, - NULL, - NULL, - NULL, - NULL - }; -#endif - -#if defined(SWIGPYTHON_BUILTIN) - static SwigPyClientData SwigPyObject_clientdata = { - 0, 0, 0, 0, 0, 0, 0 - }; - static PyGetSetDef this_getset_def = { - (char *)"this", &SwigPyBuiltin_ThisClosure, NULL, NULL, NULL - }; - static SwigPyGetSet thisown_getset_closure = { - (PyCFunction) SwigPyObject_own, - (PyCFunction) SwigPyObject_own - }; - static PyGetSetDef thisown_getset_def = { - (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure - }; - PyObject *metatype_args; - PyTypeObject *builtin_pytype; - int builtin_base_count; - swig_type_info *builtin_basetype; - PyObject *tuple; - PyGetSetDescrObject *static_getset; - PyTypeObject *metatype; - SwigPyClientData *cd; - PyObject *public_interface, *public_symbol; - PyObject *this_descr; - PyObject *thisown_descr; - int i; - - (void)builtin_pytype; - (void)builtin_base_count; - (void)builtin_basetype; - (void)tuple; - (void)static_getset; - - /* metatype is used to implement static member variables. */ - metatype_args = Py_BuildValue("(s(O){})", "SwigPyObjectType", &PyType_Type); - assert(metatype_args); - metatype = (PyTypeObject *) PyType_Type.tp_call((PyObject *) &PyType_Type, metatype_args, NULL); - assert(metatype); - Py_DECREF(metatype_args); - metatype->tp_setattro = (setattrofunc) &SwigPyObjectType_setattro; - assert(PyType_Ready(metatype) >= 0); -#endif - - /* Fix SwigMethods to carry the callback ptrs when needed */ - SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); - -#if PY_VERSION_HEX >= 0x03000000 - m = PyModule_Create(&SWIG_module); -#else - m = Py_InitModule((char *) SWIG_name, SwigMethods); -#endif - md = d = PyModule_GetDict(m); - (void)md; - - SWIG_InitializeModule(0); - -#ifdef SWIGPYTHON_BUILTIN - SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject"); - assert(SwigPyObject_stype); - cd = (SwigPyClientData*) SwigPyObject_stype->clientdata; - if (!cd) { - SwigPyObject_stype->clientdata = &SwigPyObject_clientdata; - SwigPyObject_clientdata.pytype = SwigPyObject_TypeOnce(); - } else if (SwigPyObject_TypeOnce()->tp_basicsize != cd->pytype->tp_basicsize) { - PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules."); -# if PY_VERSION_HEX >= 0x03000000 - return NULL; -# else - return; -# endif - } - - /* All objects have a 'this' attribute */ - this_descr = PyDescr_NewGetSet(SwigPyObject_type(), &this_getset_def); - (void)this_descr; - - /* All objects have a 'thisown' attribute */ - thisown_descr = PyDescr_NewGetSet(SwigPyObject_type(), &thisown_getset_def); - (void)thisown_descr; - - public_interface = PyList_New(0); - public_symbol = 0; - (void)public_symbol; - - PyDict_SetItemString(md, "__all__", public_interface); - Py_DECREF(public_interface); - for (i = 0; SwigMethods[i].ml_name != NULL; ++i) - SwigPyBuiltin_AddPublicSymbol(public_interface, SwigMethods[i].ml_name); - for (i = 0; swig_const_table[i].name != 0; ++i) - SwigPyBuiltin_AddPublicSymbol(public_interface, swig_const_table[i].name); -#endif - - SWIG_InstallConstants(d,swig_const_table); - -#if PY_VERSION_HEX >= 0x03000000 - return m; -#else - return; -#endif -} - From 250171d29f4bda4610528cde5afa29fa5679cd03 Mon Sep 17 00:00:00 2001 From: chonho Date: Wed, 30 Mar 2016 00:17:04 +0800 Subject: [PATCH 20/26] SINGA-126 Python Binding for Interactive Training - Add methods in singa/model.py . save_model_parameter . load_model_parameter - Add functions in src/worker.cc, revise driver.i . Checkpoint . InitNetParams - Add setup() method in singa/layer.py - Revise exampels . train_mnist.py, train_cifar10.py - Examples for Rafiki . create user workspace, e.g., user1-cifar10 . in the workspace - neuralnet (model) in model.py - training in main.py Note, original user1-cifar10, user2-mnist is removed --- include/singa/neuralnet/neuralnet.h | 2 +- include/singa/worker.h | 3 + src/neuralnet/neuralnet.cc | 2 +- src/worker.cc | 44 +++++++ tool/python/examples/train_cifar10.py | 57 ++++----- tool/python/examples/train_cifar10_2.py | 123 -------------------- tool/python/examples/train_mnist.py | 60 ++++------ tool/python/examples/train_mnist_2.py | 107 ----------------- tool/python/examples/user1-cifar10/main.py | 84 +++++++++++++ tool/python/examples/user1-cifar10/model.py | 56 +++++++++ tool/python/singa/driver.i | 13 ++- tool/python/singa/layer.py | 97 ++++++++++++--- tool/python/singa/model.py | 41 +++++++ 13 files changed, 364 insertions(+), 325 deletions(-) delete mode 100755 tool/python/examples/train_cifar10_2.py delete mode 100755 tool/python/examples/train_mnist_2.py create mode 100644 tool/python/examples/user1-cifar10/main.py create mode 100644 tool/python/examples/user1-cifar10/model.py diff --git a/include/singa/neuralnet/neuralnet.h b/include/singa/neuralnet/neuralnet.h index 771a7ee9e9..60887e0d71 100644 --- a/include/singa/neuralnet/neuralnet.h +++ b/include/singa/neuralnet/neuralnet.h @@ -62,7 +62,7 @@ class NeuralNet { * Create for python binding, production test mode * */ - static NeuralNet* CreateFromStr(const string str); + static NeuralNet* CreateNeuralNet(const string str); NeuralNet() {}; static const NetProto Unrolling(const NetProto& net_conf); diff --git a/include/singa/worker.h b/include/singa/worker.h index 34c8000371..d53e54ba41 100644 --- a/include/singa/worker.h +++ b/include/singa/worker.h @@ -61,6 +61,7 @@ class Worker { * * @return a pointer to the instance of the Worker subclass. */ + static Worker* CreateWorker(const std::string str); static Worker* Create(const AlgProto& conf); virtual ~Worker(); /** @@ -129,6 +130,7 @@ class Worker { * initialized. */ void InitNetParams(const JobProto& job_conf, NeuralNet* net); + void InitNetParams(const std::string& folder, vector net); /** * Checkpoint all Param objects owned by the worker onto disk. * The serialization is done using BlobProtos which includes the name, version @@ -140,6 +142,7 @@ class Worker { * @param net the training net whose Param objects will be dumped. */ void Checkpoint(int step, const std::string& folder, NeuralNet* net); + void Checkpoint(int step, const std::string& folder, vector net); /** * Train one mini-batch. * Test/Validation is done before training. diff --git a/src/neuralnet/neuralnet.cc b/src/neuralnet/neuralnet.cc index 44d642a375..226d8d97a8 100644 --- a/src/neuralnet/neuralnet.cc +++ b/src/neuralnet/neuralnet.cc @@ -58,7 +58,7 @@ const NetProto NetConfPreprocess(const NetProto& conf) { return proto; } -NeuralNet* NeuralNet::CreateFromStr(const string str) { +NeuralNet* NeuralNet::CreateNeuralNet(const string str) { NetProto net_conf; net_conf.ParseFromString(str); return NeuralNet::Create(net_conf,singa::kTest,1); diff --git a/src/worker.cc b/src/worker.cc index 2afa8b06fe..a6f1bbe3a8 100644 --- a/src/worker.cc +++ b/src/worker.cc @@ -35,6 +35,12 @@ namespace singa { using std::string; +Worker* Worker::CreateWorker(const string str) { + AlgProto alg_proto; + alg_proto.ParseFromString(str); + return Worker::Create(alg_proto); +} + Worker* Worker::Create(const AlgProto& conf) { auto factory = Singleton>::Instance(); Worker* worker = nullptr; @@ -160,6 +166,23 @@ void Worker::InitSockets(const NeuralNet* net) { } } +void Worker::InitNetParams(const std::string& folder, vector net) { + + std::unordered_map name2param; + for (auto layer : net) { + for (auto param : layer->GetParams()) { + // only owners fill the memory of parameter values. + //if (param->owner() == param->id()) { + CHECK(name2param.find(param->name()) == name2param.end()); + name2param[param->name()] = param; + //} + } + } + vector paths; + paths.push_back(folder); + NeuralNet::Load(paths, name2param); +} + void Worker::InitNetParams(const JobProto& job_conf, NeuralNet* net) { // for each server grp, its first subscriber worker grp does the param init if (grp_id_ % Cluster::Get()->nworker_groups_per_server_group() == 0) { @@ -215,6 +238,27 @@ void Worker::InitNetParams(const JobProto& job_conf, NeuralNet* net) { } } +void Worker::Checkpoint(int step, const std::string& folder, vector net) { + BlobProtos bps; + for (auto layer : net) { + //if (layer->partition_id() == id_) { + for (auto param : layer->GetParams()) { + // only owners fill the memory of parameter values. + //if (param->owner() == param->id()) { + auto *blob = bps.add_blob(); + param->ToProto(blob); + bps.add_version(param->version()); + bps.add_name(param->name()); + //} + } + //} + } + char buf[256]; + snprintf(buf, sizeof(buf), "%s/step%d-worker0", folder.c_str(), step); + LOG(INFO) << "checkpoint to " << buf; + WriteProtoToBinaryFile(bps, buf); +} + void Worker::Checkpoint(int step, const std::string& folder, NeuralNet* net) { BlobProtos bps; for (auto layer : net->layers()) { diff --git a/tool/python/examples/train_cifar10.py b/tool/python/examples/train_cifar10.py index f04b4ac90b..4238cdf0a2 100755 --- a/tool/python/examples/train_cifar10.py +++ b/tool/python/examples/train_cifar10.py @@ -77,24 +77,23 @@ def get_labellist(): input = Dummy() label = Dummy() -conv1 = Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2) -pool1 = MaxPooling2D(pool_size=(3,3), stride=2) -act1 = Activation('relu') -lrn1 = LRN2D(3, alpha=0.00005, beta=0.75) - -conv2 = Convolution2D(32, 5, 1, 2, b_lr=2) -act2 = Activation('relu') -pool2 = AvgPooling2D(pool_size=(3,3), stride=2) -lrn2 = LRN2D(3, alpha=0.00005, beta=0.75) - -conv3 = Convolution2D(64, 5, 1, 2) -act3 = Activation('relu') -pool3 = AvgPooling2D(pool_size=(3,3), stride=2) - -inner1 = Dense(10, w_wd=250, b_lr=2, b_wd=0) -#act4 = Activation('softmax') +nn = [] +nn.append(input) +nn.append(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) +nn.append(MaxPooling2D(pool_size=(3,3), stride=2)) +nn.append(Activation('relu')) +nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) +nn.append(Convolution2D(32, 5, 1, 2, b_lr=2)) +nn.append(Activation('relu')) +nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) +nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) +nn.append(Convolution2D(64, 5, 1, 2)) +nn.append(Activation('relu')) +nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) +nn.append(Dense(10, w_wd=250, b_lr=2, b_wd=0)) loss = Loss('softmaxloss') +# updater sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) #------------------------------------------------------------------- @@ -108,29 +107,13 @@ def get_labellist(): x, y = load_dataset(dataset_id%5+1) for i in range(x.shape[0] / batchsize): - xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb, 3, 0) - label.SetData(yb, 1, 1) - - conv1.ComputeFeature(input) - pool1.ComputeFeature(conv1) - act1.ComputeFeature(pool1) - lrn1.ComputeFeature(act1) - - conv2.ComputeFeature(lrn1) - act2.ComputeFeature(conv2) - pool2.ComputeFeature(act2) - lrn2.ComputeFeature(pool2) - - conv3.ComputeFeature(lrn2) - act3.ComputeFeature(conv3) - pool3.ComputeFeature(act3) - - inner1.ComputeFeature(pool3) - loss.ComputeFeature(inner1, label) + nn[0].Feed(xb, 3, 0) + label.Feed(yb, 1, 1) + for h in range(1, len(nn)): + nn[h].ComputeFeature(nn[h-1]) + loss.ComputeFeature(nn[-1], label) if (i+1)%disp_freq == 0: print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), loss.display() - loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/train_cifar10_2.py b/tool/python/examples/train_cifar10_2.py deleted file mode 100755 index 15cae0a1c3..0000000000 --- a/tool/python/examples/train_cifar10_2.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python - -#/************************************************************ -#* -#* Licensed to the Apache Software Foundation (ASF) under one -#* or more contributor license agreements. See the NOTICE file -#* distributed with this work for additional information -#* regarding copyright ownership. The ASF licenses this file -#* to you under the Apache License, Version 2.0 (the -#* "License"); you may not use this file except in compliance -#* with the License. You may obtain a copy of the License at -#* -#* http://www.apache.org/licenses/LICENSE-2.0 -#* -#* Unless required by applicable law or agreed to in writing, -#* software distributed under the License is distributed on an -#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -#* KIND, either express or implied. See the License for the -#* specific language governing permissions and limitations -#* under the License. -#* -#*************************************************************/ - -import os, sys, string -import numpy as np - -current_path_ = os.path.dirname(__file__) -singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) -sys.path.append(os.path.join(singa_root_,'tool','python')) - -from singa.driver import Driver -from singa.layer import * -from singa.model import * -from singa.utils.utility import swap32 -from google.protobuf.text_format import Merge - -''' -Example of CNN with cifar10 dataset -''' - -fname_mean_image = 'tool/python/examples/datasets/cifar10_mean_image' -mean_image = np.fromfile(fname_mean_image) - -def load_dataset(did=1): - ''' - 5 binary dataset, each contains 10000 images - 1 row (1 image) includes 1 label & 3072 pixels - 3072 pixels are 3 channels of a 32x32 image - ''' - print '[Loading CIFAR10 dataset]', did - dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" - fname_train_data = dataset_dir_ + "/data_batch_{}.bin".format(did) - - nb_samples = 10000 - nb_pixels = 3 * 1024 - d = np.fromfile(fname_train_data, dtype=np.uint8) - d = d.reshape(nb_samples, nb_pixels + 1) # +1 for label - x = d[:, 1:] - x = x - mean_image - print ' data x:', x.shape - y = d[:, 0] - y = y.reshape(nb_samples, 1) - print ' label y:', y.shape - return x, y - -def get_labellist(): - dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" - fname_label_list = dataset_dir_ + "/batches.meta.txt" - label_list_ = np.genfromtxt(fname_label_list, dtype=str) - return label_list_ - -#------------------------------------------------------------------- -print '[Layer registration/declaration]' -d = Driver() -d.Init(sys.argv) - -input = Dummy() -label = Dummy() - -nn = [] # neural net (hidden layers) -nn.append(Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2)) -nn.append(MaxPooling2D(pool_size=(3,3), stride=2)) -nn.append(Activation('relu')) -nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) -nn.append(Convolution2D(32, 5, 1, 2, b_lr=2)) -nn.append(Activation('relu')) -nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) -nn.append(LRN2D(3, alpha=0.00005, beta=0.75)) -nn.append(Convolution2D(64, 5, 1, 2)) -nn.append(Activation('relu')) -nn.append(AvgPooling2D(pool_size=(3,3), stride=2)) -nn.append(Dense(10, w_wd=250, b_lr=2, b_wd=0)) - -loss = Loss('softmaxloss') -sgd = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) - -#------------------------------------------------------------------- -print '[Start training]' -batchsize = 100 -disp_freq = 50 -train_step = 1000 - -for dataset_id in range(train_step / batchsize): - - x, y = load_dataset(dataset_id%5+1) - - for i in range(x.shape[0] / batchsize): - - xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb, 3, 0) - label.SetData(yb, 1, 1) - - for h in range(len(nn)): - if h == 0: - nn[h].ComputeFeature(input) - else: - nn[h].ComputeFeature(nn[h-1]) - loss.ComputeFeature(nn[-1], label) - if (i+1)%disp_freq == 0: - print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), - loss.display() - - loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/train_mnist.py b/tool/python/examples/train_mnist.py index c1350e127a..ed6bb63fc4 100755 --- a/tool/python/examples/train_mnist.py +++ b/tool/python/examples/train_mnist.py @@ -67,56 +67,40 @@ def load_dataset(): input = Dummy() label = Dummy() -''' -(TODO) clee: need to think ... can we do this??? -inner1 = Dense(2500, init='uniform', activation='stanh') -inner2 = Dense(2000, init='uniform', activation='stanh') -inner3 = Dense(1000, init='uniform', activation='stanh') -inner4 = Dense(500, init='uniform', activation='stanh') -inner5 = Dense(10, init='uniform', activation='softmax') -''' -inner1 = Dense(2500, init='uniform') -inner2 = Dense(2000, init='uniform') -inner3 = Dense(1500, init='uniform') -inner4 = Dense(1000, init='uniform') -inner5 = Dense(500, init='uniform') -inner6 = Dense(10, init='uniform') -act1 = Activation('stanh') -act2 = Activation('stanh') -act3 = Activation('stanh') -act4 = Activation('stanh') -act5 = Activation('stanh') + +nn = [] +nn.append(input) +nn.append(Dense(2500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(2000, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(1500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(1000, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(500, init='uniform')) +nn.append(Activation('stanh')) +nn.append(Dense(10, init='uniform')) loss = Loss('softmaxloss') +# updater sgd = SGD(lr=0.001, lr_type='step') #------------------------------------------------------------------- -x, y = load_dataset() - print '[Start training]' batchsize = 64 disp_freq = 10 +x, y = load_dataset() + for i in range(x.shape[0] / batchsize): xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb) - label.SetData(yb, is_label=1) - inner1.ComputeFeature(input) - act1.ComputeFeature(inner1) - inner2.ComputeFeature(act1) - act2.ComputeFeature(inner2) - inner3.ComputeFeature(act2) - act3.ComputeFeature(inner3) - inner4.ComputeFeature(act3) - act4.ComputeFeature(inner4) - inner5.ComputeFeature(act4) - act5.ComputeFeature(inner5) - inner6.ComputeFeature(act5) - #w6, b6 = inner6.GetParams() - #d6 = inner6.GetData() - loss.ComputeFeature(inner6, label) + nn[0].Feed(xb) + label.Feed(yb, is_label=1) + for h in range(1, len(nn)): + nn[h].ComputeFeature(nn[h-1]) + loss.ComputeFeature(nn[-1], label) if (i+1)%disp_freq == 0: print ' Step {:>3}: '.format(i+1), loss.display() - loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/train_mnist_2.py b/tool/python/examples/train_mnist_2.py deleted file mode 100755 index 3ed1563fce..0000000000 --- a/tool/python/examples/train_mnist_2.py +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python - -#/************************************************************ -#* -#* Licensed to the Apache Software Foundation (ASF) under one -#* or more contributor license agreements. See the NOTICE file -#* distributed with this work for additional information -#* regarding copyright ownership. The ASF licenses this file -#* to you under the Apache License, Version 2.0 (the -#* "License"); you may not use this file except in compliance -#* with the License. You may obtain a copy of the License at -#* -#* http://www.apache.org/licenses/LICENSE-2.0 -#* -#* Unless required by applicable law or agreed to in writing, -#* software distributed under the License is distributed on an -#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -#* KIND, either express or implied. See the License for the -#* specific language governing permissions and limitations -#* under the License. -#* -#*************************************************************/ - -import os, sys, string -import numpy as np - -current_path_ = os.path.dirname(__file__) -singa_root_=os.path.abspath(os.path.join(current_path_,'../../..')) -sys.path.append(os.path.join(singa_root_,'tool','python')) - -from singa.driver import Driver -from singa.layer import * -from singa.model import * -from singa.utils.utility import swap32 -from google.protobuf.text_format import Merge - -''' -Example of MLP with MNIST dataset -''' - -def load_dataset(): - ''' - train-images: 4 int32 headers & int8 pixels - train-labels: 2 int32 headers & int8 labels - ''' - print '[Loading MNIST dataset]' - fname_train_data = "examples/mnist/train-images-idx3-ubyte" - fname_train_label = "examples/mnist/train-labels-idx1-ubyte" - info = swap32(np.fromfile(fname_train_data, dtype=np.uint32, count=4)) - nb_samples = info[1] - shape = (info[2],info[3]) - - x = np.fromfile(fname_train_data, dtype=np.uint8) - x = x[4*4:] # skip header - x = x.reshape(nb_samples, shape[0]*shape[1]) - print ' data x:', x.shape - y = np.fromfile(fname_train_label, dtype=np.uint8) - y = y[4*2:] # skip header - y = y.reshape(nb_samples, 1) - print ' label y:', y.shape - return x, y - -#------------------------------------------------------------------- -print '[Layer registration/declaration]' -d = Driver() -d.Init(sys.argv) - -input = Dummy() -label = Dummy() - -nn = [] # neural net (hidden layers) -nn.append(Dense(2500, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(2000, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(1500, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(1000, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(500, init='uniform')) -nn.append(Activation('stanh')) -nn.append(Dense(10, init='uniform')) -loss = Loss('softmaxloss') - -sgd = SGD(lr=0.001, lr_type='step') - -#------------------------------------------------------------------- -print '[Start training]' -batchsize = 64 -disp_freq = 10 - -x, y = load_dataset() - -for i in range(x.shape[0] / batchsize): - xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - input.SetData(xb) - label.SetData(yb, is_label=1) - for h in range(len(nn)): - if h == 0: - nn[h].ComputeFeature(input) - else: - nn[h].ComputeFeature(nn[h-1]) - loss.ComputeFeature(nn[-1], label) - if (i+1)%disp_freq == 0: - print ' Step {:>3}: '.format(i+1), - loss.display() - loss.ComputeGradient(i+1, sgd) diff --git a/tool/python/examples/user1-cifar10/main.py b/tool/python/examples/user1-cifar10/main.py new file mode 100644 index 0000000000..b2d1a959e0 --- /dev/null +++ b/tool/python/examples/user1-cifar10/main.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from model import neuralnet, updater +from singa.driver import Driver +from singa.layer import * +from singa.model import save_model_parameter, load_model_parameter +from singa.utils.utility import swap32 + +''' +Example of CNN with cifar10 dataset +''' +def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint): + print '[Layer registration/declaration]' + # TODO change layer registration methods + d = Driver() + d.Init(sys.argv) + + print '[Start training]' + + #if need to load checkpoint + if checkpoint: + load_model_parameter(workspace+checkpoint, neuralnet, batchsize) + + for i in range(0,train_step): + + for h in range(len(neuralnet)): + #Fetch data for input layer + if neuralnet[h].layer.type==kDummy: + neuralnet[h].FetchData(batchsize) + else: + neuralnet[h].ComputeFeature() + + neuralnet[-1].ComputeGradient(i+1, updater) + + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1), + neuralnet[h].display() + + if (i+1)%check_freq == 0: + save_model_parameter(i+1, workspace, neuralnet) + + + print '[Finish training]' + +def main(): + train( + batchsize = 100, + disp_freq = 10, + check_freq = 1000, + train_step = 1000, + workspace = 'tool/python/examples/user1-cifar10/', + checkpoint = 'step100-worker0' + ) + +if __name__=='__main__': + main() diff --git a/tool/python/examples/user1-cifar10/model.py b/tool/python/examples/user1-cifar10/model.py new file mode 100644 index 0000000000..d225793eda --- /dev/null +++ b/tool/python/examples/user1-cifar10/model.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from singa.driver import Driver +from singa.layer import * +from singa.model import * +from singa.utils.utility import swap32 + +data1=Dummy(shape=[50000,3,32,32],path="tool/python/examples/data/out/train.bin",dtype='byte',src=[]) +data2=Dummy(shape=[50000,1],path="tool/python/examples/data/out/train.label.bin",dtype='int',src=[]) +c1=Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2,src=[data1]) +p1=MaxPooling2D(pool_size=(3,3), stride=2,src=[c1]) +a1=Activation('relu',src=[p1]) +l1=LRN2D(3, alpha=0.00005, beta=0.75,src=[a1]) +c2=Convolution2D(32, 5, 1, 2, b_lr=2,src=[l1]) +a2=Activation('relu',src=[c2]) +p2=AvgPooling2D(pool_size=(3,3), stride=2,src=[a2]) +l2=LRN2D(3, alpha=0.00005, beta=0.75,src=[p2]) +c3=Convolution2D(64, 5, 1, 2,src=[l2]) +a3=Activation('relu',src=[c3]) +p3=AvgPooling2D(pool_size=(3,3), stride=2,src=[a3]) +d=Dense(10, w_wd=250, b_lr=2, b_wd=0,src=[p3]) +loss=Loss('softmaxloss',src=[d,data2]) + +neuralnet = [data1, data2, c1, p1, a1, l1, c2, a2, p2, l2, c3, a3, p3, d, loss] + +#algorithm +updater = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) + diff --git a/tool/python/singa/driver.i b/tool/python/singa/driver.i index 5dc3fc9547..253ab9fc0d 100644 --- a/tool/python/singa/driver.i +++ b/tool/python/singa/driver.i @@ -31,6 +31,7 @@ %apply (int ARGC, char **ARGV) { (int argc, char **argv) } %{ #include "singa/driver.h" +#include "singa/worker.h" #include "singa/neuralnet/neuralnet.h" #include "singa/neuralnet/layer.h" #include "singa/neuralnet/neuron_layer.h" @@ -61,11 +62,19 @@ namespace singa{ class NeuralNet{ public: - static NeuralNet* CreateFromStr(const std::string str); + static NeuralNet* CreateNeuralNet(const std::string str); void Load(const std::vector& paths); inline const std::vector& layers(); inline const std::vector& srclayers(const singa::Layer* layer); }; + + %nodefault Worker; + class Worker{ + public: + static singa::Worker* CreateWorker(const std::string str); + void InitNetParams(const std::string& folder, std::vector net); + void Checkpoint(int step, const std::string& folder, std::vector net); + }; class DummyLayer{ public: @@ -111,6 +120,8 @@ namespace singa{ inline const std::vector& shape(); inline float* mutable_cpu_data(); void FromProto(const std::string str); + /*void ToProto(singa::BlobProto* blob); + */ }; %template(floatBlob) Blob; diff --git a/tool/python/singa/layer.py b/tool/python/singa/layer.py index 6f5ef4f1b4..040b70cc94 100644 --- a/tool/python/singa/layer.py +++ b/tool/python/singa/layer.py @@ -53,10 +53,26 @@ def __init__(self, **kwargs): # layer connectivity is set in Model.build() self.is_datalayer = False - self.singalayer = None self.srclayers = [] + # set src for Rafiki + if 'src' in kwargs: + self.src = kwargs['src'] + else: + self.src = None + + def setup(self, srclys): + # create singa::Layer and store srclayers + if self.singalayer == None: + self.singalayer = SingaLayer.CreateLayer(self.layer.SerializeToString()) + self.singaSrclayerVector = layerVector(len(srclys)) + for i in range(len(srclys)): + self.srclayers.append(srclys[i]) + self.singaSrclayerVector[i] = srclys[i].get_singalayer() + # set up the layer + SingaLayer.SetupLayer(self.singalayer, self.layer.SerializeToString(), self.singaSrclayerVector) + def ComputeFeature(self, *srclys): ''' The method creates and sets up singa::Layer and maintains its source layers @@ -67,6 +83,8 @@ def ComputeFeature(self, *srclys): # create singa::Layer and store srclayers if self.singalayer == None: + if self.src != None: + srclys = self.src self.singalayer = SingaLayer.CreateLayer(self.layer.SerializeToString()) self.singaSrclayerVector = layerVector(len(srclys)) for i in range(len(srclys)): @@ -77,7 +95,6 @@ def ComputeFeature(self, *srclys): self.singalayer.ComputeFeature(1, self.singaSrclayerVector) - def ComputeGradient(self, step, upd=None): ''' The method creates singa::Updater and calls ComputeGradient for gradient computation @@ -156,15 +173,61 @@ def get_singalayer(self): class Dummy(object): - def __init__(self): + def __init__(self, shape=[], path='', dtype='', src=[]): + ''' Dummy layer is used for data layer + shape = (list) // [# of samples, # of channels, img h, img w] + path = (string) // path to dataset + ''' self.is_datalayer = True self.srclayers = None self.singalayer = None + # create layer proto for Dummy layer kwargs = {'name':'dummy', 'type':kDummy} self.layer = Message('Layer', **kwargs).proto - def SetData(self, data, nb_channel=1, is_label=0): + # if dataset path is not specified, skip + # otherwise, load dataset + if path == '': + return + + self.shape = shape + self.path = path + self.src = None + self.batch_index = 0 + + import numpy as np + nb_samples = shape[0] + nb_pixels = shape[1] + for i in range(len(shape)-2): + nb_pixels *= shape[i+2] + if dtype=='byte': + self.is_label = 0 + d = np.fromfile(path, dtype=np.int8) + elif dtype=='int': + self.is_label = 1 + d = np.fromfile(path, dtype=np.int) + self.data = d.reshape(nb_samples, nb_pixels) + + + def setup(self, data_shape): + ''' Create and Setup singa Dummy layer + called by load_model_parameter + ''' + if self.singalayer == None: + setval(self.layer.dummy_conf, input=True) + setval(self.layer.dummy_conf, shape=data_shape) + self.singalayer = DummyLayer() + self.singalayer.Setup(self.layer.SerializeToString(), layerVector(0)) + + def FetchData(self, batchsize): + + d = self.data[self.batch_index*batchsize:(self.batch_index+1)*batchsize, :] + self.Feed(d, self.shape[1], self.is_label) + self.batch_index += 1 + + + def Feed(self, data, nb_channel=1, is_label=0): ''' Create and Setup singa::DummyLayer for input data Insert data using Feed() ''' @@ -174,7 +237,7 @@ def SetData(self, data, nb_channel=1, is_label=0): imgsize = int(numpy.sqrt(hdim/nb_channel)) shapeVector = [batchsize, nb_channel, imgsize, imgsize] - # create and setup the layer + # create and setup the dummy layer if self.singalayer == None: setval(self.layer.dummy_conf, input=True) setval(self.layer.dummy_conf, shape=shapeVector) @@ -213,11 +276,11 @@ def __init__(self, load, phase='train', checkpoint=None, assert load != None, 'data type should be specified' if load == 'kData': super(Data, self).__init__(name=generate_name('data'), - user_type=load) + user_type=load, **kwargs) else: self.layer_type = enumLayerType(load) super(Data, self).__init__(name=generate_name('data'), - type=self.layer_type) + type=self.layer_type, **kwargs) self.is_datalayer = True # include/exclude @@ -261,7 +324,7 @@ def __init__(self, nb_filter=0, kernel=0, stride=1, pad=0, assert nb_filter > 0, 'nb_filter should be set as positive int' super(Convolution2D, self).__init__(name=generate_name('conv', 1), - type=kCConvolution) + type=kCConvolution, **kwargs) fields = {"num_filters":nb_filter} # for kernel if type(kernel) == int: @@ -366,7 +429,7 @@ def __init__(self, size=0, **kwargs): size = (int) // local size ''' - super(LRN2D, self).__init__(name=generate_name('norm'), type=kLRN) + super(LRN2D, self).__init__(name=generate_name('norm'), type=kLRN, **kwargs) # required assert size != 0, 'local size should be set' self.layer.lrn_conf.local_size = size @@ -375,20 +438,20 @@ def __init__(self, size=0, **kwargs): class Loss(Layer): - def __init__(self, lossname, topk=1): + def __init__(self, lossname, topk=1, **kwargs): ''' required lossname = (string) // softmaxloss, euclideanloss ''' self.layer_type = enumLayerType(lossname) super(Loss, self).__init__(name=generate_name(lossname), - type=self.layer_type) + type=self.layer_type, **kwargs) if lossname == 'softmaxloss': self.layer.softmaxloss_conf.topk = topk class Activation(Layer): - def __init__(self, activation='stanh'): + def __init__(self, activation='stanh', **kwargs): ''' required activation = (string) // relu, sigmoid, tanh, stanh, softmax. @@ -403,7 +466,7 @@ def __init__(self, activation='stanh'): elif activation == 'softmax': self.layer_type = kSoftmax super(Activation, self).__init__(name=generate_name(self.name), - type=self.layer_type) + type=self.layer_type, **kwargs) if activation == 'relu': self.layer.activation_conf.type = RELU elif activation == 'sigmoid': @@ -426,19 +489,19 @@ def __init__(self, ratio=0.5): self.name = 'dropout' self.layer_type = enumLayerType(self.name) super(Dropout, self).__init__(name=generate_name(self.name), - type=self.layer_type) + type=self.layer_type, **kwargs) self.layer.dropout_conf.dropout_ratio = ratio class Accuracy(Layer): - def __init__(self): + def __init__(self, **kwargs): ''' ''' self.name = 'accuracy' self.layer_type = enumLayerType(self.name) super(Accuracy, self).__init__(name=generate_name(self.name), - type=self.layer_type) + type=self.layer_type, **kwargs) class RGB(Layer): @@ -554,7 +617,7 @@ def __init__(self, out_dim=None, w_param=None, b_param=None, self.name = kwargs['name'] if 'name' in kwargs else 'RBMVis' self.layer_type = kwargs['type'] if 'type' in kwargs else kRBMVis super(RBM, self).__init__(name=generate_name(self.name, - withnumber=False), type=self.layer_type) + withnumber=False), type=self.layer_type, **kwargs) setval(self.layer.rbm_conf, hdim=self.out_dim[-1]) if self.layer_type == kRBMHid and sampling != None: if sampling == 'gaussian': diff --git a/tool/python/singa/model.py b/tool/python/singa/model.py index 0054bb35c9..4f5ca0cc54 100644 --- a/tool/python/singa/model.py +++ b/tool/python/singa/model.py @@ -650,3 +650,44 @@ def SingaRun_script(filename='', execpath=''): #TODO better format to store the result?? return resultDic +def load_model_parameter(fin, neuralnet, batchsize=1, data_shape=None): + hly_idx = 0 + for i in range(len(neuralnet)): + if neuralnet[i].is_datalayer: + if data_shape == None: + shape = neuralnet[i].shape + shape[0] = batchsize + neuralnet[i].setup(shape) + else: + neuralnet[i].setup(data_shape) + else: + hly_idx = i + break + + net = layerVector(len(neuralnet)-hly_idx) + for i in range(hly_idx, len(neuralnet)): + if neuralnet[i].src==None: + neuralnet[i].setup(neuralnet[i-1]) + else: + neuralnet[i].setup(neuralnet[i].src) + net[i-hly_idx] = neuralnet[i].singalayer + + from singa.driver import Worker + alg = Algorithm(type=enumAlgType('bp')).proto + w = Worker.CreateWorker(alg.SerializeToString()) + w.InitNetParams(fin, net) + +def save_model_parameter(step, fout, neuralnet): + hly_idx = 0 + for i in range(len(neuralnet)): + if not neuralnet[i].is_datalayer: + hly_idx = i + break + + from singa.driver import Worker + net = layerVector(len(neuralnet)-hly_idx) + for i in range(hly_idx, len(neuralnet)): + net[i-hly_idx] = neuralnet[i].singalayer + alg = Algorithm(type=enumAlgType('bp')).proto + w = Worker.CreateWorker(alg.SerializeToString()) + w.Checkpoint(step, fout, net) From 0193da9bf6f189ebf1ba8cdeb8910801345ec570 Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Thu, 31 Mar 2016 02:33:11 +0800 Subject: [PATCH 21/26] change python model and main --- .gitignore | 1 + tool/python/examples/user1-cifar10/main.py | 131 ++++++------------ .../python/examples/user1-cifar10/main_new.py | 86 ------------ tool/python/examples/user1-cifar10/model.py | 7 +- .../examples/user1-cifar10/model_new.py | 55 -------- 5 files changed, 45 insertions(+), 235 deletions(-) delete mode 100755 tool/python/examples/user1-cifar10/main_new.py delete mode 100755 tool/python/examples/user1-cifar10/model_new.py diff --git a/.gitignore b/.gitignore index 035d147e8b..a109e24627 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,4 @@ thirdparty/* !thirdparty/install.sh !include/singa doc/ +/Debug/ diff --git a/tool/python/examples/user1-cifar10/main.py b/tool/python/examples/user1-cifar10/main.py index 8bfb3cb01d..92c3b5dc69 100755 --- a/tool/python/examples/user1-cifar10/main.py +++ b/tool/python/examples/user1-cifar10/main.py @@ -28,7 +28,7 @@ singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) sys.path.append(os.path.join(singa_root_,'tool','python')) -from model import neuralnet, loss, updater +from model import neuralnet, updater from singa.driver import Driver from singa.layer import * from singa.model import save_model_parameter, load_model_parameter @@ -37,97 +37,48 @@ ''' Example of CNN with cifar10 dataset ''' - -fname_mean_image = 'tool/python/examples/datasets/cifar10_mean_image' -mean_image = np.fromfile(fname_mean_image) - -def load_dataset(did=1): - ''' - 5 binary dataset, each contains 10000 images - 1 row (1 image) includes 1 label & 3072 pixels - 3072 pixels are 3 channels of a 32x32 image - ''' - print '[Loading CIFAR10 dataset]', did - dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" - fname_train_data = dataset_dir_ + "/data_batch_{}.bin".format(did) +def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint=None): + print '[Layer registration/declaration]' + # TODO change layer registration methods + d = Driver() + d.Init(sys.argv) + + print '[Start training]' + + #if need to load checkpoint + if checkpoint: + load_model_parameter(workspace+checkpoint, neuralnet, batchsize) + + for i in range(0,train_step): - nb_samples = 10000 - nb_pixels = 3 * 1024 - d = np.fromfile(fname_train_data, dtype=np.uint8) - d = d.reshape(nb_samples, nb_pixels + 1) # +1 for label - x = d[:, 1:] - x = x - mean_image - print ' data x:', x.shape - y = d[:, 0] - y = y.reshape(nb_samples, 1) - print ' label y:', y.shape - return x, y - -def get_labellist(): - dataset_dir_ = singa_root_ + "/examples/cifar10/cifar-10-batches-bin" - fname_label_list = dataset_dir_ + "/batches.meta.txt" - label_list_ = np.genfromtxt(fname_label_list, dtype=str) - return label_list_ - -#------------------------------------------------------------------- -print '[Layer registration/declaration]' -d = Driver() -d.Init(sys.argv) - - -#------------------------------------------------------------------- -print '[Start training]' -batchsize = 100 -disp_freq = 50 -train_step = 1000 - -workspace = 'tool/python/examples/user1-cifar10/' -checkpoint = 'step100-worker0' - -label = Dummy() - -imgsize = 32 -nb_channel = 3 -data_shape = [batchsize, nb_channel, imgsize, imgsize] -load_model_parameter(workspace+checkpoint, neuralnet, data_shape) - -#for dataset_id in range(train_step / batchsize): -for dataset_id in range(1): - - x, y = load_dataset(dataset_id%5+1) - - #for i in range(x.shape[0] / batchsize): - for i in range(100): - - xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] - neuralnet[0].Feed(xb, 3, 0) - label.Feed(yb, 1, 1) - - for h in range(1, len(neuralnet)): - neuralnet[h].ComputeFeature(neuralnet[h-1]) - loss.ComputeFeature(neuralnet[-1], label) - if (i+1)%disp_freq == 0: - print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), - loss.display() - - loss.ComputeGradient(i+1, updater) - - step_trained = 100 - save_model_parameter(step_trained, workspace, neuralnet) - - #---- test of loading - load_model_parameter(workspace+checkpoint, neuralnet) + for h in range(len(neuralnet)): + #Fetch data for input layer + if neuralnet[h].layer.type==kDummy: + neuralnet[h].FetchData(batchsize) + else: + neuralnet[h].ComputeFeature() - for i in range(100, 200): - xb, yb = x[i*batchsize:(i+1)*batchsize,:], y[i*batchsize:(i+1)*batchsize,:] + neuralnet[-1].ComputeGradient(i+1, updater) - neuralnet[0].Feed(xb) - label.Feed(yb, 1, 1) - - for h in range(1, len(neuralnet)): - neuralnet[h].ComputeFeature(neuralnet[h-1]) - loss.ComputeFeature(neuralnet[-1], label) if (i+1)%disp_freq == 0: print ' Step {:>3}: '.format(i+1), - loss.display() - loss.ComputeGradient(i+1, updater) + neuralnet[h].display() + + if (i+1)%check_freq == 0: + save_model_parameter(i+1, workspace, neuralnet) + + + print '[Finish training]' + +def main(): + train( + batchsize = 100, + disp_freq = 10, + check_freq = 100, + train_step = 1000, + workspace = 'tool/python/examples/user1-cifar10/', + checkpoint = 'step100-worker0' + ) + +if __name__=='__main__': + main() \ No newline at end of file diff --git a/tool/python/examples/user1-cifar10/main_new.py b/tool/python/examples/user1-cifar10/main_new.py deleted file mode 100755 index 0d6ba183fb..0000000000 --- a/tool/python/examples/user1-cifar10/main_new.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python - -#/************************************************************ -#* -#* Licensed to the Apache Software Foundation (ASF) under one -#* or more contributor license agreements. See the NOTICE file -#* distributed with this work for additional information -#* regarding copyright ownership. The ASF licenses this file -#* to you under the Apache License, Version 2.0 (the -#* "License"); you may not use this file except in compliance -#* with the License. You may obtain a copy of the License at -#* -#* http://www.apache.org/licenses/LICENSE-2.0 -#* -#* Unless required by applicable law or agreed to in writing, -#* software distributed under the License is distributed on an -#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -#* KIND, either express or implied. See the License for the -#* specific language governing permissions and limitations -#* under the License. -#* -#*************************************************************/ - -import os, sys -import numpy as np - -current_path_ = os.path.dirname(__file__) -singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) -sys.path.append(os.path.join(singa_root_,'tool','python')) - -from model import neuralnet, updater -from singa.driver import Driver -from singa.layer import * -from singa.model import save_model_parameter, load_model_parameter -from singa.utils.utility import swap32 - -''' -Example of CNN with cifar10 dataset -''' - -#------------------------------------------------------------------- - - - -def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint): - print '[Layer registration/declaration]' - # TODO change layer registration methods - d = Driver() - d.Init(sys.argv) - - print '[Start training]' - - #if need to load checkpoint - if checkpoint: - load_model_parameter(workspace+checkpoint, neuralnet, data_shape) - - for i in range(0,train_step): - - for h in range(0, len(neuralnet)): - #Feed data for input layer - if neuralnet[h].type=="Dummy": - neuralnet[h].FetchData(batchsize) - neuralnet[h].ComputeFeature() - - neuralnet[h].ComputeGradient(i+1, updater) - - if (i+1)%disp_freq == 0: - print ' Step {:>3}: '.format(i+1 + dataset_id*(x.shape[0]/batchsize)), - neuralnet[h].display() - - if (i+1)%check_freq == 0: - save_model_parameter(i, workspace, neuralnet) - print '[Finish training]' - -def main(): - train( - batchsize = 10, - disp_freq = 100, - check_freq = 1000, - train_step = 1000, - workspace = 'tool/python/examples/user1-cifar10/', - checkpoint = 'step100-worker0' - ) - -if __name__=='__main__': - main() \ No newline at end of file diff --git a/tool/python/examples/user1-cifar10/model.py b/tool/python/examples/user1-cifar10/model.py index d225793eda..acbcfed0fc 100755 --- a/tool/python/examples/user1-cifar10/model.py +++ b/tool/python/examples/user1-cifar10/model.py @@ -33,8 +33,8 @@ from singa.model import * from singa.utils.utility import swap32 -data1=Dummy(shape=[50000,3,32,32],path="tool/python/examples/data/out/train.bin",dtype='byte',src=[]) -data2=Dummy(shape=[50000,1],path="tool/python/examples/data/out/train.label.bin",dtype='int',src=[]) +data1=Dummy(shape=[50000,3,32,32],path="/home/aaron/work/workspace/data/out/train.bin",dtype='byte',src=[]) +data2=Dummy(shape=[50000,1],path="/home/aaron/work/workspace/data/out/train.label.bin",dtype='int',src=[]) c1=Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2,src=[data1]) p1=MaxPooling2D(pool_size=(3,3), stride=2,src=[c1]) a1=Activation('relu',src=[p1]) @@ -52,5 +52,4 @@ neuralnet = [data1, data2, c1, p1, a1, l1, c2, a2, p2, l2, c3, a3, p3, d, loss] #algorithm -updater = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) - +updater = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) \ No newline at end of file diff --git a/tool/python/examples/user1-cifar10/model_new.py b/tool/python/examples/user1-cifar10/model_new.py deleted file mode 100755 index f7b6b4304f..0000000000 --- a/tool/python/examples/user1-cifar10/model_new.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python - -#/************************************************************ -#* -#* Licensed to the Apache Software Foundation (ASF) under one -#* or more contributor license agreements. See the NOTICE file -#* distributed with this work for additional information -#* regarding copyright ownership. The ASF licenses this file -#* to you under the Apache License, Version 2.0 (the -#* "License"); you may not use this file except in compliance -#* with the License. You may obtain a copy of the License at -#* -#* http://www.apache.org/licenses/LICENSE-2.0 -#* -#* Unless required by applicable law or agreed to in writing, -#* software distributed under the License is distributed on an -#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -#* KIND, either express or implied. See the License for the -#* specific language governing permissions and limitations -#* under the License. -#* -#*************************************************************/ - -import os, sys -import numpy as np - -current_path_ = os.path.dirname(__file__) -singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) -sys.path.append(os.path.join(singa_root_,'tool','python')) - -from singa.driver import Driver -from singa.layer import * -from singa.model import * -from singa.utils.utility import swap32 - -neuralnet = [] # neural net (hidden layers) -#shape,inputfile,src -neuralnet.append(data1=Dummy(shape=[10000,3,32,32],path="examples/cifar10/cifar-10-batches-bin.",src=[])) -neuralnet.append(data2=Dummy(shape=[10000,1],path="tool/python/examples/datasets/cifar10_mean_image",src=[])) -neuralnet.append(c1=Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2,src=[data1])) -neuralnet.append(p1=MaxPooling2D(pool_size=(3,3), stride=2,src=[c1])) -neuralnet.append(a1=Activation('relu',src=[p1])) -neuralnet.append(l1=LRN2D(3, alpha=0.00005, beta=0.75,src=[a1])) -neuralnet.append(c2=Convolution2D(32, 5, 1, 2, b_lr=2,src=[l1])) -neuralnet.append(a2=Activation('relu',src=[c2])) -neuralnet.append(p2=AvgPooling2D(pool_size=(3,3), stride=2,src=[a2])) -neuralnet.append(l2=LRN2D(3, alpha=0.00005, beta=0.75,src=[p2])) -neuralnet.append(c3=Convolution2D(64, 5, 1, 2,src=[l2])) -neuralnet.append(a3=Activation('relu',src=[c3])) -neuralnet.append(p3=AvgPooling2D(pool_size=(3,3), stride=2,src=[a3])) -neuralnet.append(d=Dense(10, w_wd=250, b_lr=2, b_wd=0,src=[p3])) -neuralnet.append(loss=Loss('softmaxloss',src=[d,data2])) - -#algorithm -updater = SGD(decay=0.004, momentum=0.9, lr_type='manual', step=(0,60000,65000), step_lr=(0.001,0.0001,0.00001)) From fd619e62ff6c953a90bb9347a167c6cc14dfb739 Mon Sep 17 00:00:00 2001 From: aaron Date: Thu, 31 Mar 2016 01:17:01 +0000 Subject: [PATCH 22/26] debug python file --- examples/cifar10_mesos/entry.sh | 5 +++-- tool/python/examples/user1-cifar10/main.py | 26 +++++++++++++--------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/examples/cifar10_mesos/entry.sh b/examples/cifar10_mesos/entry.sh index f06c1124a9..55d43a6135 100644 --- a/examples/cifar10_mesos/entry.sh +++ b/examples/cifar10_mesos/entry.sh @@ -2,10 +2,11 @@ cd /workspace wget $1 tar zxf *.tar.gz -cd /usr/src/incubator-singa/examples/cifar10_mesos/ +cp /workspace/model.py /usr/src/incubator-singa/tool/python/examples/user1-cifar10/ if [ $2 -eq '2' ]; then + cd /usr/src/incubator-singa/examples/cifar10_mesos/ python main.py else cd /usr/src/incubator-singa/ - python tool/python/examples/train_cifar10.py + python tool/python/examples/user1-cifar10/main.py $3 $4 $5 $6 $7 fi diff --git a/tool/python/examples/user1-cifar10/main.py b/tool/python/examples/user1-cifar10/main.py index 92c3b5dc69..0f5ccaf694 100755 --- a/tool/python/examples/user1-cifar10/main.py +++ b/tool/python/examples/user1-cifar10/main.py @@ -69,16 +69,22 @@ def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint=None): print '[Finish training]' - -def main(): + +if __name__=='__main__': + if len(sys.argv) < 5: + print "argv should be more than 5" + if len(sys.argv) > 5: + checkpoint = sys.argv[5] + else: + checkpoint = None + print checkpoint train( - batchsize = 100, - disp_freq = 10, - check_freq = 100, - train_step = 1000, - workspace = 'tool/python/examples/user1-cifar10/', - checkpoint = 'step100-worker0' + batchsize = int(sys.argv[1]), + disp_freq = int(sys.argv[2]), + check_freq = int(sys.argv[3]), + train_step = int(sys.argv[4]), + workspace = '/workspace', + checkpoint = checkpoint, ) -if __name__=='__main__': - main() \ No newline at end of file + From eef9a9454e60fdf68914cbd85a5be8d833177010 Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Thu, 31 Mar 2016 13:25:48 +0800 Subject: [PATCH 23/26] fix bug --- tool/python/examples/user1-cifar10/main.py | 120 ++++++++++++-- tool/python/examples/user1-cifar10/model.py | 4 +- tool/python/singa/layer.py | 172 +++++++++++++++++++- 3 files changed, 279 insertions(+), 17 deletions(-) diff --git a/tool/python/examples/user1-cifar10/main.py b/tool/python/examples/user1-cifar10/main.py index 0f5ccaf694..3e4fc09806 100755 --- a/tool/python/examples/user1-cifar10/main.py +++ b/tool/python/examples/user1-cifar10/main.py @@ -28,12 +28,18 @@ singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) sys.path.append(os.path.join(singa_root_,'tool','python')) -from model import neuralnet, updater +from model2 import neuralnet, updater from singa.driver import Driver from singa.layer import * from singa.model import save_model_parameter, load_model_parameter from singa.utils.utility import swap32 +from PIL import Image +import glob,random, shutil, time +from flask import Flask, request, redirect, url_for +from singa.utils import kvstore, imgtool +app = Flask(__name__) + ''' Example of CNN with cifar10 dataset ''' @@ -69,22 +75,108 @@ def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint=None): print '[Finish training]' + + +def product(workspace,checkpoint,port): + + print '[Layer registration/declaration]' + # TODO change layer registration methods + d = Driver() + d.Init(sys.argv) + + load_model_parameter(workspace+checkpoint, neuralnet,1) + + app.debug = True + app.run(host='0.0.0.0', port=int(port)) + +@app.route("/") +def index(): + return "Hello World! This is SINGA DLAAS! Please send post request with image=file to '/predict' " + +def allowed_file(filename): + allowd_extensions_ = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) + return '.' in filename and \ + filename.rsplit('.', 1)[1] in allowd_extensions_ + +@app.route('/predict', methods=['POST']) +def predict(): + size_=(32,32) + pixel_length_=3*size_[0]*size_[1] + label_num_=10 + if request.method == 'POST': + file = request.files['image'] + if file and allowed_file(file.filename): + im = Image.open(file).convert("RGB") + im = imgtool.resize_to_center(im,size_) + pixel = floatVector(pixel_length_) + byteArray = imgtool.toBin(im,size_) + data = np.frombuffer(byteArray, dtype=np.uint8) + data = data.reshape(1, pixel_length_) + #dummy data Layer + shape = intVector(4) + shape[0]=1 + shape[1]=3 + shape[2]=size_[0] + shape[3]=size_[1] + + for h in range(len(neuralnet)): + #Fetch data for input layer + if neuralnet[h].is_datalayer: + if not neuralnet[h].is_label: + neuralnet[h].Feed(data,3) + else: + neuralnet[h].FetchData(1) + else: + neuralnet[h].ComputeFeature() + + #get result + #data = neuralnet[-1].get_singalayer().data(neuralnet[-1].get_singalayer()) + #prop =floatArray_frompointer(data.mutable_cpu_data()) + prop = neuralnet[-1].GetData() + print prop + result=[] + for i in range(label_num_): + result.append((i,prop[i])) + + result.sort(key=lambda tup: tup[1], reverse=True) + print result + response="" + for r in result: + response+=str(r[0])+":"+str(r[1]) + + return response + return "error" + + if __name__=='__main__': - if len(sys.argv) < 5: - print "argv should be more than 5" - if len(sys.argv) > 5: - checkpoint = sys.argv[5] - else: - checkpoint = None - print checkpoint - train( - batchsize = int(sys.argv[1]), - disp_freq = int(sys.argv[2]), - check_freq = int(sys.argv[3]), - train_step = int(sys.argv[4]), + + if sys.argv[1]=="train": + if len(sys.argv) < 6: + print "argv should be more than 6" + exit() + if len(sys.argv) > 6: + checkpoint = sys.argv[6] + else: + checkpoint = None + #training + train( + batchsize = int(sys.argv[2]), + disp_freq = int(sys.argv[3]), + check_freq = int(sys.argv[4]), + train_step = int(sys.argv[5]), workspace = '/workspace', checkpoint = checkpoint, ) - + else: + if len(sys.argv) < 4: + print "argv should be more than 3" + exit() + checkpoint = sys.argv[2] + port = sys.argv[3] + product( + workspace = '/workspace', + checkpoint = checkpoint, + port = port + ) diff --git a/tool/python/examples/user1-cifar10/model.py b/tool/python/examples/user1-cifar10/model.py index acbcfed0fc..67c492e391 100755 --- a/tool/python/examples/user1-cifar10/model.py +++ b/tool/python/examples/user1-cifar10/model.py @@ -33,8 +33,8 @@ from singa.model import * from singa.utils.utility import swap32 -data1=Dummy(shape=[50000,3,32,32],path="/home/aaron/work/workspace/data/out/train.bin",dtype='byte',src=[]) -data2=Dummy(shape=[50000,1],path="/home/aaron/work/workspace/data/out/train.label.bin",dtype='int',src=[]) +data1=Dummy(shape=[50000,3,32,32],path="/workspace/data/train.bin",dtype='byte',src=[]) +data2=Dummy(shape=[50000,1],path="/workspace/data/train.label.bin",dtype='int',src=[]) c1=Convolution2D(32, 5, 1, 2, w_std=0.0001, b_lr=2,src=[data1]) p1=MaxPooling2D(pool_size=(3,3), stride=2,src=[c1]) a1=Activation('relu',src=[p1]) diff --git a/tool/python/singa/layer.py b/tool/python/singa/layer.py index 95f994c489..8a0750ab45 100644 --- a/tool/python/singa/layer.py +++ b/tool/python/singa/layer.py @@ -205,7 +205,7 @@ def __init__(self, shape=[], path='', dtype='', src=[]): nb_pixels *= shape[i+2] if dtype=='byte': self.is_label = 0 - d = np.fromfile(path, dtype=np.int8) + d = np.fromfile(path, dtype=np.uint8) elif dtype=='int': self.is_label = 1 d = np.fromfile(path, dtype=np.int) @@ -260,6 +260,176 @@ def Feed(self, data, nb_channel=1, is_label=0): def get_singalayer(self): return self.singalayer.ToLayer() +class ImageData(object): + + def __init__(self, shape=[], data_path='', data_type='byte',mean_path='',mean_type='float'): + ''' Dummy layer is used for data layer + shape = (list) // [# of samples, # of channels, img h, img w] + data_path = (string) // path to dataset + mean_path + ''' + self.is_datalayer = True + self.srclayers = None + self.singalayer = None + self.is_label = False + # create layer proto for Dummy layer + kwargs = {'name':'dummy', 'type':kDummy} + self.layer = Message('Layer', **kwargs).proto + + # if dataset path is not specified, skip + # otherwise, load dataset + if data_path == '' or mean_path=='': + return + + self.shape = shape + self.data_path = data_path + self.mean_path = mean_path + self.src = None + self.batch_index = 0 + + import numpy as np + nb_samples = shape[0] + nb_pixels = shape[1] + for i in range(len(shape)-2): + nb_pixels *= shape[i+2] + + if data_type=='byte': + d = np.fromfile(data_path, dtype=np.uint8) + elif data_type=='int': + d = np.fromfile(data_path, dtype=np.int) + self.data = d.reshape(nb_samples, nb_pixels) + + if mean_type=='float': + d = np.fromfile(mean_path, dtype=np.float32) + self.mean = d.reshape(1, nb_pixels) + + def setup(self, data_shape): + ''' Create and Setup singa Dummy layer + called by load_model_parameter + ''' + if self.singalayer == None: + setval(self.layer.dummy_conf, input=True) + setval(self.layer.dummy_conf, shape=data_shape) + self.singalayer = DummyLayer() + self.singalayer.Setup(self.layer.SerializeToString(), layerVector(0)) + + + def FetchData(self, batchsize): + + d = self.data[self.batch_index*batchsize:(self.batch_index+1)*batchsize, :] + self.Feed(d, self.shape[1]) + self.batch_index += 1 + if (self.batch_index+1)*batchsize>self.data.shape[0]: + self.batch_index=0 + + + + def Feed(self, data, nb_channel=1): + ''' Create and Setup singa::DummyLayer for input data + Insert data using Feed() + Need to minus the mean file + ''' + batchsize, hdim = data.shape + datasize = batchsize * hdim + imgsize = int(numpy.sqrt(hdim/nb_channel)) + shapeVector = [batchsize, nb_channel, imgsize, imgsize] + #print shapeVector + # create and setup the dummy layer + if self.singalayer == None: + setval(self.layer.dummy_conf, input=True) + setval(self.layer.dummy_conf, shape=shapeVector) + self.singalayer = DummyLayer() + self.singalayer.Setup(self.layer.SerializeToString(), layerVector(0)) + + # feed input data and minus mean + data = data.astype(numpy.float) + dataVector = floatVector(datasize) + k = 0 + for i in range(batchsize): + for j in range(hdim): + dataVector[k] = data[i,j]-self.mean[0,j] + k += 1 + self.singalayer.Feed(shapeVector, dataVector, 0) + + def get_singalayer(self): + return self.singalayer.ToLayer() + + +class LabelData(object): + + def __init__(self, shape=[], label_path='', label_type='int'): + ''' Dummy layer is used for label data layer + shape = (list) // [# of samples, # of channels, img h, img w] + data_path = (string) // path to dataset + mean_path + ''' + self.is_datalayer = True + self.srclayers = None + self.singalayer = None + self.is_label = True + # create layer proto for Dummy layer + kwargs = {'name':'dummy', 'type':kDummy} + self.layer = Message('Layer', **kwargs).proto + + # if dataset path is not specified, skip + # otherwise, load dataset + if label_path == '': + return + + self.shape = shape + self.label_path = label_path + self.src = None + self.batch_index = 0 + + import numpy as np + nb_samples = shape[0] + + if label_type=='int': + d = np.fromfile(label_path, dtype=np.int) + self.data = d.reshape(nb_samples, 1) + + def setup(self, data_shape): + ''' Create and Setup singa Dummy layer + called by load_model_parameter + ''' + if self.singalayer == None: + setval(self.layer.dummy_conf, input=True) + setval(self.layer.dummy_conf, shape=data_shape) + self.singalayer = DummyLayer() + self.singalayer.Setup(self.layer.SerializeToString(), layerVector(0)) + + + def FetchData(self, batchsize): + + d = self.data[self.batch_index*batchsize:(self.batch_index+1)*batchsize, :] + self.Feed(d, self.shape[1]) + self.batch_index += 1 + if (self.batch_index+1)*batchsize>self.data.shape[0]: + self.batch_index=0 + + def Feed(self, data,nb_chanel=1): + ''' Create and Setup singa::DummyLayer for input data + Insert data using Feed() + Need to minus the mean file + ''' + batchsize = data.shape[0] + shapeVector = [batchsize, 1] + + # create and setup the dummy layer + if self.singalayer == None: + setval(self.layer.dummy_conf, input=True) + setval(self.layer.dummy_conf, shape=shapeVector) + self.singalayer = DummyLayer() + self.singalayer.Setup(self.layer.SerializeToString(), layerVector(0)) + + data = data.astype(numpy.float) + dataVector = floatVector(batchsize) + for i in range(batchsize): + dataVector[i] = data[i,0] + self.singalayer.Feed(shapeVector, dataVector, 1) + + def get_singalayer(self): + return self.singalayer.ToLayer() class Data(Layer): From 700c719098bdc6b32e3926454ed8a53aaead2e7b Mon Sep 17 00:00:00 2001 From: aaronwwf Date: Thu, 31 Mar 2016 13:44:10 +0800 Subject: [PATCH 24/26] fix bug --- tool/python/examples/user1-cifar10/main.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tool/python/examples/user1-cifar10/main.py b/tool/python/examples/user1-cifar10/main.py index 3e4fc09806..882a3b1591 100755 --- a/tool/python/examples/user1-cifar10/main.py +++ b/tool/python/examples/user1-cifar10/main.py @@ -77,7 +77,7 @@ def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint=None): print '[Finish training]' -def product(workspace,checkpoint,port): +def product(workspace,checkpoint): print '[Layer registration/declaration]' # TODO change layer registration methods @@ -87,7 +87,7 @@ def product(workspace,checkpoint,port): load_model_parameter(workspace+checkpoint, neuralnet,1) app.debug = True - app.run(host='0.0.0.0', port=int(port)) + app.run(host='0.0.0.0', port=80) @app.route("/") @@ -176,7 +176,6 @@ def predict(): port = sys.argv[3] product( workspace = '/workspace', - checkpoint = checkpoint, - port = port + checkpoint = checkpoint ) From 4d03b32fd1515efbf8a159901d71ab6a4b44b5ff Mon Sep 17 00:00:00 2001 From: aaron Date: Tue, 26 Apr 2016 14:23:26 +0000 Subject: [PATCH 25/26] add rafiki scripts --- tool/rafiki/main.py | 181 +++++++++++++++++++++++++++++++++++++++++++ tool/rafiki/test.sh | 7 ++ tool/rafiki/train.sh | 7 ++ 3 files changed, 195 insertions(+) create mode 100755 tool/rafiki/main.py create mode 100644 tool/rafiki/test.sh create mode 100644 tool/rafiki/train.sh diff --git a/tool/rafiki/main.py b/tool/rafiki/main.py new file mode 100755 index 0000000000..661afc4e08 --- /dev/null +++ b/tool/rafiki/main.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python + +#/************************************************************ +#* +#* Licensed to the Apache Software Foundation (ASF) under one +#* or more contributor license agreements. See the NOTICE file +#* distributed with this work for additional information +#* regarding copyright ownership. The ASF licenses this file +#* to you under the Apache License, Version 2.0 (the +#* "License"); you may not use this file except in compliance +#* with the License. You may obtain a copy of the License at +#* +#* http://www.apache.org/licenses/LICENSE-2.0 +#* +#* Unless required by applicable law or agreed to in writing, +#* software distributed under the License is distributed on an +#* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +#* KIND, either express or implied. See the License for the +#* specific language governing permissions and limitations +#* under the License. +#* +#*************************************************************/ + +import os, sys +import numpy as np + +current_path_ = os.path.dirname(__file__) +singa_root_=os.path.abspath(os.path.join(current_path_,'../../../..')) +sys.path.append(os.path.join(singa_root_,'tool','python')) + +from model import neuralnet, updater +from singa.driver import Driver +from singa.layer import * +from singa.model import save_model_parameter, load_model_parameter +from singa.utils.utility import swap32 + +from PIL import Image +import glob,random, shutil, time +from flask import Flask, request, redirect, url_for +from singa.utils import kvstore, imgtool +app = Flask(__name__) + +''' +Example of CNN with cifar10 dataset +''' +def train(batchsize,disp_freq,check_freq,train_step,workspace,checkpoint=None): + print '[Layer registration/declaration]' + # TODO change layer registration methods + d = Driver() + d.Init(sys.argv) + + print '[Start training]' + + #if need to load checkpoint + if checkpoint: + load_model_parameter(workspace+checkpoint, neuralnet, batchsize) + + for i in range(0,train_step): + + for h in range(len(neuralnet)): + #Fetch data for input layer + if neuralnet[h].layer.type==kDummy: + neuralnet[h].FetchData(batchsize) + else: + neuralnet[h].ComputeFeature() + + neuralnet[h].ComputeGradient(i+1, updater) + + if (i+1)%disp_freq == 0: + print ' Step {:>3}: '.format(i+1), + neuralnet[h].display() + + if (i+1)%check_freq == 0: + save_model_parameter(i+1, workspace, neuralnet) + + + print '[Finish training]' + + +def product(workspace,checkpoint): + + print '[Layer registration/declaration]' + # TODO change layer registration methods + d = Driver() + d.Init(sys.argv) + + load_model_parameter(workspace+checkpoint, neuralnet,1) + + app.debug = True + app.run(host='0.0.0.0', port=80) + + +@app.route("/") +def index(): + return "Hello World! This is SINGA DLAAS! Please send post request with image=file to '/predict' " + +def allowed_file(filename): + allowd_extensions_ = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) + return '.' in filename and \ + filename.rsplit('.', 1)[1] in allowd_extensions_ + +@app.route('/predict', methods=['POST']) +def predict(): + size_=(32,32) + pixel_length_=3*size_[0]*size_[1] + label_num_=10 + if request.method == 'POST': + file = request.files['image'] + if file and allowed_file(file.filename): + im = Image.open(file).convert("RGB") + im = imgtool.resize_to_center(im,size_) + pixel = floatVector(pixel_length_) + byteArray = imgtool.toBin(im,size_) + data = np.frombuffer(byteArray, dtype=np.uint8) + data = data.reshape(1, pixel_length_) + #dummy data Layer + shape = intVector(4) + shape[0]=1 + shape[1]=3 + shape[2]=size_[0] + shape[3]=size_[1] + + for h in range(len(neuralnet)): + #Fetch data for input layer + if neuralnet[h].is_datalayer: + if not neuralnet[h].is_label: + neuralnet[h].Feed(data,3) + else: + neuralnet[h].FetchData(1) + else: + neuralnet[h].ComputeFeature() + + #get result + #data = neuralnet[-1].get_singalayer().data(neuralnet[-1].get_singalayer()) + #prop =floatArray_frompointer(data.mutable_cpu_data()) + prop = neuralnet[-1].GetData() + print prop + result=[] + for i in range(label_num_): + result.append((i,prop[i])) + + result.sort(key=lambda tup: tup[1], reverse=True) + print result + response="" + for r in result: + response+=str(r[0])+":"+str(r[1]) + + return response + return "error" + + +if __name__=='__main__': + + if sys.argv[1]=="train": + if len(sys.argv) < 6: + print "argv should be more than 6" + exit() + if len(sys.argv) > 6: + checkpoint = sys.argv[6] + else: + checkpoint = None + #training + train( + batchsize = int(sys.argv[2]), + disp_freq = int(sys.argv[3]), + check_freq = int(sys.argv[4]), + train_step = int(sys.argv[5]), + workspace = '/workspace', + checkpoint = checkpoint, + ) + else: + if len(sys.argv) < 4: + print "argv should be more than 3" + exit() + checkpoint = sys.argv[2] + port = sys.argv[3] + product( + workspace = '/workspace', + checkpoint = checkpoint + ) + diff --git a/tool/rafiki/test.sh b/tool/rafiki/test.sh new file mode 100644 index 0000000000..992745000f --- /dev/null +++ b/tool/rafiki/test.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cd /workspace +wget $1 +tar zxf *.tar.gz +cp /workspace/model.py /usr/src/incubator-singa/tool/rafiki/ +cd /usr/src/incubator-singa/ +python tool/rafiki/main.py test $2 $3 diff --git a/tool/rafiki/train.sh b/tool/rafiki/train.sh new file mode 100644 index 0000000000..3e347b2f1f --- /dev/null +++ b/tool/rafiki/train.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cd /workspace +wget $1 +tar zxf *.tar.gz +cp /workspace/model.py /usr/src/incubator-singa/tool/rafiki/ +cd /usr/src/incubator-singa/ +python tool/rafiki/main.py train $2 $3 $4 $5 $6 From 89c3024e96f141877c726ad24d0c17172a77f36b Mon Sep 17 00:00:00 2001 From: aaron Date: Tue, 26 Apr 2016 23:10:22 +0000 Subject: [PATCH 26/26] fix bug --- tool/rafiki/main.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tool/rafiki/main.py b/tool/rafiki/main.py index 661afc4e08..bdc1bb30bf 100755 --- a/tool/rafiki/main.py +++ b/tool/rafiki/main.py @@ -169,11 +169,10 @@ def predict(): checkpoint = checkpoint, ) else: - if len(sys.argv) < 4: - print "argv should be more than 3" + if len(sys.argv) < 3: + print "argv should be more than 2" exit() checkpoint = sys.argv[2] - port = sys.argv[3] product( workspace = '/workspace', checkpoint = checkpoint

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 literal 0 HcmV?d00001 diff --git a/examples/cifar10_mesos/checkpoint/step1000-worker0 b/examples/cifar10_mesos/checkpoint/step1000-worker0 new file mode 100644 index 0000000000000000000000000000000000000000..d4805e95c519da50a2a599d537a9a612b785689d GIT binary patch literal 340543 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