 # Example using a_float ---------------------------------------------------- from pycppad import * def pycppad_test_condexp() : x = numpy.array( [1. , 1., 3., 4. ] ) a_x = independent(x) a_left = a_x[0]; a_right = a_x[1]; a_if_true = a_x[2]; a_if_false = a_x[3]; a_y_lt = condexp_lt(a_left, a_right, a_if_true, a_if_false); a_y_le = condexp_le(a_left, a_right, a_if_true, a_if_false); a_y_eq = condexp_eq(a_left, a_right, a_if_true, a_if_false); a_y_ge = condexp_ge(a_left, a_right, a_if_true, a_if_false); a_y_gt = condexp_gt(a_left, a_right, a_if_true, a_if_false); a_y = numpy.array( [ a_y_lt, a_y_le, a_y_eq, a_y_ge, a_y_gt ] ); f = adfun(a_x, a_y) y = f.forward(0, x) assert ( y[0] == 4. ) # 1 < 1 is false so result is 4 assert ( y[1] == 3. ) # 1 <= 1 is true so result is 3 assert ( y[2] == 3. ) # 1 == 1 is true so result is 3 assert ( y[3] == 3. ) # 1 >= 1 is true so result is 3 assert ( y[4] == 4. ) # 1 > 2 is false so result is 4 x = numpy.array( [4., 3., 2., 1.] ) y = f.forward(0, x) assert ( y[0] == 1. ) # 4 < 3 is false so result is 1 assert ( y[1] == 1. ) # 4 <= 3 is false so result is 1 assert ( y[2] == 1. ) # 4 == 3 is false so result is 1 assert ( y[3] == 2. ) # 4 >= 3 is true so result is 2 assert ( y[4] == 2. ) # 4 > 3 is true so result is 2 # Example using a2float ---------------------------------------------------- def pycppad_test_condexp_a2() : x = numpy.array( [1. , 1., 3., 4. ] ) a_x = ad(x) # begin level two recording of conditional expression a2x = independent(a_x) a2left = a2x[0]; a2right = a2x[1]; a2if_true = a2x[2]; a2if_false = a2x[3]; a2y_lt = condexp_lt(a2left, a2right, a2if_true, a2if_false); a2y_le = condexp_le(a2left, a2right, a2if_true, a2if_false); a2y_eq = condexp_eq(a2left, a2right, a2if_true, a2if_false); a2y_ge = condexp_ge(a2left, a2right, a2if_true, a2if_false); a2y_gt = condexp_gt(a2left, a2right, a2if_true, a2if_false); a2y = numpy.array( [ a2y_lt, a2y_le, a2y_eq, a2y_ge, a2y_gt ] ); a_f = adfun(a2x, a2y) # begin level one recording of conditional expression a_x = independent(x) a_y = a_f.forward(0, a_x) f = adfun(a_x, a_y) y = f.forward(0, x) assert ( y[0] == 4. ) # 1 < 1 is false so result is 4 assert ( y[1] == 3. ) # 1 <= 1 is true so result is 3 assert ( y[2] == 3. ) # 1 == 1 is true so result is 3 assert ( y[3] == 3. ) # 1 >= 1 is true so result is 3 assert ( y[4] == 4. ) # 1 > 2 is false so result is 4 x = numpy.array( [4., 3., 2., 1.] ) y = f.forward(0, x) assert ( y[0] == 1. ) # 4 < 3 is false so result is 1 assert ( y[1] == 1. ) # 4 <= 3 is false so result is 1 assert ( y[2] == 1. ) # 4 == 3 is false so result is 1 assert ( y[3] == 2. ) # 4 >= 3 is true so result is 2 assert ( y[4] == 2. ) # 4 > 3 is true so result is 2