from oricrete.folding.cnstr_target_face import \
    CnstrTargetFace, r_, s_, t_
from oricrete.folding.crease_pattern import \
    CreasePattern
from oricrete.folding.crease_pattern_view import \
    CreasePatternView
import numpy as np
from scipy.optimize import fmin_slsqp

if __name__ == '__main__':

    caf = CnstrTargetFace(F = [r_ , s_, 0.01 + t_ * (r_ ** 2 * s_ ** 2 + 0.2 * r_)])

    # trivial example with a single triangle positioned 

    cp = CreasePattern(n_steps = 3)

    cp.nodes = [[ 0, 0, 0 ],
                [ 1, 0, 0 ],
                [ 0.5, -0.5, 0 ],
                [ 0.5, 0.5, 0],
                [ 1, 1, 0],
                [ 1.5, 0.5, 0],
                [ 0, 1, 0],
                ]

    cp.crease_lines = [[ 0, 2 ],
                       [ 2, 1 ],
                       [ 0, 3 ],
                       [ 3, 1 ],
                       [ 2, 3],
from oricrete.folding.cnstr_target_face import CnstrTargetFace, r_, s_, t_
from oricrete.folding.crease_pattern import CreasePattern
from oricrete.folding.crease_pattern_view import CreasePatternView
import numpy as np
from scipy.optimize import fmin_slsqp

if __name__ == "__main__":

    caf = CnstrTargetFace(
        #        F=[r_, s_, 0.01 + t_ * (r_ ** 2 * s_ ** 2 + 0.2 * r_)]
        F=[r_, s_, t_]
    )

    # trivial example with a single triangle positioned

    cp = CreasePattern(n_steps=1)

    if False:
        cp.nodes = [[0, 0, 0], [1, 0, 0], [0.5, 0.5, 0]]

        cp.crease_lines = [[0, 1], [1, 2], [2, 0]]

        cp.facets = [[0, 1, 2]]
    else:
        cp.nodes = [[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0.5, 0.5, 0]]
        cp.crease_lines = [[0, 1], [1, 2], [3, 0], [0, 4], [1, 4], [2, 4], [3, 4]]
        cp.facets = [[0, 1, 4], [1, 2, 4], [4, 3, 0]]

    cp.tf_lst = [(caf, [0, 1, 4])]

    cp.cnstr_lhs = [
    caf = CnstrTargetFace(F = [r_ , s_, 2])

    print 'x_arr:\n', caf.X_arr
    print 'r_arr:\n', caf.r_arr
    print 'd_arr:\n', caf.d_arr

    caf.X_arr = caf.X_arr + 1.0

    print 'x_arr:\n', caf.X_arr
    print 'r_arr:\n', caf.r_arr
    print 'd_arr:\n', caf.d_arr

    # trivial example with a single triangle positioned 

    cp = CreasePattern()

    cp.nodes = [[ 0, 0, 0 ],
                [ 1, 1, 0 ],
                [ 0, 2, 0 ]]

    cp.crease_lines = [[ 0, 1 ],
                       [ 1, 2 ]]

    cp.cnstr_lhs = [[(0, 0, 1.0)],
                    [(0, 1, 1.0)],
                    [(0, 2, 1.0)],
                    [(2, 0, 1.0)],
                    [(2, 1, 1.0)],
                    [(2, 2, 1.0)], ]
    caf = CnstrTargetFace(F=[r_, s_, 1])

    print "x_arr:\n", caf.X_arr
    print "r_arr:\n", caf.r_arr
    print "d_arr:\n", caf.d_arr

    caf.X_arr = caf.X_arr + 1.0

    print "x_arr:\n", caf.X_arr
    print "r_arr:\n", caf.r_arr
    print "d_arr:\n", caf.d_arr

    # trivial example with a single triangle positioned

    cp = CreasePattern()

    cp.nodes = [[0, 0, 0], [1, 0, 0], [0.5, -0.5, 0], [0.5, 0.5, 0]]

    cp.crease_lines = [[0, 2], [2, 1], [0, 3], [3, 1], [2, 3]]
    cp.facets = [[0, 3, 2], [1, 2, 3]]

    cp.cnstr_lhs = [[(0, 0, 1.0)], [(0, 1, 1.0)], [(0, 2, 1.0)], [(1, 1, 1.0)], [(1, 2, 1.0)], [(3, 2, 1.0)]]

    cp.cnstr_rhs = [0.0, 0.0, 0.0, 0, 0, 0.2]

    x0 = np.zeros((cp.n_dofs), dtype=float)

    print "initial lengths\n", cp.c_lengths
    print "initial vectors\n", cp.c_vectors
    print "initial R\n", cp.get_G(x0)