def numpy2vec(array, dtype, shape, syntax, name): # # dtype assert dtype in [bool, int, float, cppad_py.a_double] # ------------------------------------------------------------------------- # if not isinstance(array, numpy.ndarray): msg = syntax + ': ' + name + ' is not an numpy.ndarray' raise NotImplementedError(msg) if not array.dtype == dtype: msg = syntax + ': ' + name + '.dtype is not ' + str(dtype) raise NotImplementedError(msg) # # vector, nr, nc if isinstance(shape, int): vector = True nr = shape nc = 1 elif len(shape) == 1: vector = True nr = shape[0] nc = 1 else: assert len(shape) == 2 vector = False nr = shape[0] nc = shape[1] # if vector and len(array.shape) != 1: msg = syntax + ': ' + name + ' is not a vector' elif len(array.shape) != 2: msg = syntax + ': ' + name + ' is not a matrix' # if array.shape[0] != nr: msg = syntax + ': ' + name + '.shape[0] is not ' + str(nr) # if dtype == bool: vec = cppad_py.vec_bool(nr * nc) if dtype == int: vec = cppad_py.vec_int(nr * nc) if dtype == float: vec = cppad_py.vec_double(nr * nc) if dtype == cppad_py.a_double: vec = cppad_py.vec_a_double(nr * nc) # if vector: for i in range(nr): # must copy data so vec can manage its own memory vec[i] = dtype(array[i]) else: if array.shape[1] != nc: msg = syntax + ': ' + name + '.shape[1] is not ' + str(nc) # for i in range(nr): for j in range(nc): # must copy data so vec can manage its own memory vec[i * nc + j] = dtype(array[i, j]) # return vec
def fun_dynamic_xam(): ok = True nx = 2 nd = 2 # # value of independent variables during recording x = numpy.empty(nx, dtype=float) x[0] = 1.0 x[1] = 2.0 # # value of independent dynamic parameters during recording dynamic = numpy.empty(nd, dtype=float) dynamic[0] = 3.0 dynamic[1] = 4.0 # # start recording (ax, adynamic) = cppad_py.independent(x, dynamic) # # create another dynamic paramerer adyn = adynamic[0] + adynamic[1] # # create another variable avar = ax[0] + ax[1] + adyn # # create f(x) = x[0] + x[1] + dynamic[0] + dynamic[1] ay = numpy.empty(1, dtype=cppad_py.a_double) ay[0] = avar f = cppad_py.d_fun(ax, ay) # # check some properties of f ok = ok and f.size_domain() == nx ok = ok and f.size_order() == 0 # # zero order forward mode using same values as during the recording y = cppad_py.vec_double(1) y = f.forward(0, x) ok = ok and y[0] == (x[0] + x[1] + dynamic[0] + dynamic[1]) # # zero order forward mode using different value for dynamic parameters dynamic[0] = dynamic[0] + 1.0 dynamic[1] = dynamic[1] + 1.0 f.new_dynamic(dynamic) y = f.forward(0, x) ok = ok and y[0] == (x[0] + x[1] + dynamic[0] + dynamic[1]) # return ok
def vector_size_xam(): # import numpy import cppad_py # # initialize return variable ok = True # --------------------------------------------------------------------- # create vectors bv = cppad_py.vec_bool() iv = cppad_py.vec_int(1) dv = cppad_py.vec_double(2) av = cppad_py.vec_a_double(3) # # check size of vectors ok = ok and bv.size() == 0 ok = ok and iv.size() == 1 ok = ok and dv.size() == 2 ok = ok and av.size() == 3 # return (ok)