コード例 #1
0
ファイル: utility.py プロジェクト: mbannick/cppad_py
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
コード例 #2
0
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
コード例 #3
0
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)