| 1498 | def get_reverse(self,nadj,name,inames,onames,opts): |
| 1499 | assert(nadj==1) |
| 1500 | class BackwardFun(Callback): |
| 1501 | # sin(x+3*y) |
| 1502 | |
| 1503 | def __init__(self): |
| 1504 | Callback.__init__(self) |
| 1505 | self.construct(name, {"verbose":True}) |
| 1506 | def get_n_in(self): return 2+1+1 |
| 1507 | def get_n_out(self): return 2 |
| 1508 | |
| 1509 | def eval(self,arg): |
| 1510 | x,y = arg[0],arg[1] |
| 1511 | z = arg[2] |
| 1512 | seeds = arg[3:] |
| 1513 | |
| 1514 | z0 = 3*y |
| 1515 | z1 = x+z0 |
| 1516 | z2 = sin(z1) |
| 1517 | |
| 1518 | ret = [] |
| 1519 | |
| 1520 | for i in range(3,len(arg)): |
| 1521 | z_bar = arg[i] |
| 1522 | bx = 0 |
| 1523 | by = 0 |
| 1524 | bz1 = 0 |
| 1525 | bz0 = 0 |
| 1526 | |
| 1527 | bz2 = z_bar |
| 1528 | bz1 += bz2*cos(z1) |
| 1529 | bx+= bz1;bz0+= bz1 |
| 1530 | by+= 3*bz0 |
| 1531 | ret.append(bx) |
| 1532 | ret.append(by) |
| 1533 | return ret |
| 1534 | |
| 1535 | self.cb_rev = BackwardFun() |
| 1536 | return self.cb_rev |