block({ func(cadd,{[x]+[y]}): func(csub,{[x]-[y]}): func(cmul,{}): func(conj,{}): func(cmag2,{elem([x],1)^2+elem([x],2)^2}): func(cmag,{sqrt(cmag2([x]))}): func(cdiv,{cmul([x],conj([y]))/cmag2([y])}): func(cpol,{}): func(pcart,{}): func(cexp,{pcart()}): func(csin,{ cdiv(csub(cexp(cmul(<0,1>,[x])),cexp(cmul(<0,-1>,[x]))),<0,2>) }): func(ccos,{ cadd(cexp(cmul(<0,1>,[x])),cexp(cmul(<0,-1>,[x])))/2 }): func(ctan,{cdiv(csin([x]),ccos([x]))}): func(cpow,{sub({ let(polar,cpol([x])): let(radius,elem([polar],1)): let(angle,elem([polar],2)): let(power,[y]): print_pcart(<[radius]^[power],[angle]*[power]>) })}): func(csqrt,{cpow([x],0.5)}): func(croot,{sub({ let(polar,cpol([x])): let(degree,[y]): let(branch,[z]): print_pcart(< elem([polar],1)^(1/[degree]), (elem([polar],2)+2*(4*atan(1))*[branch])/[degree] >) })}): func(croots,{sub({ let(radicand,[x]): let(degree,[y]): print_smooth(,{ croot([radicand],[degree],[k]), })>) })}): func(cpow2,{sub({ let(ex,elem([x],1)): let(ey,elem([x],2)): let(ea,elem([y],1)): let(eb,elem([y],2)): let(lnz,[ex]*[ex]+[ey]*[ey]): print_iff(([ea]=0)&([eb]=0),{<1,0>},{ iff(([lnz]=0)&greater([ea],0),{<0,0>},{sub({ let(lnz,0.5*ln([lnz])): let(argz,atan2([ey],[ex])): let(magnitude,eul([ea]*[lnz]-[eb]*[argz])): let(angle,[ea]*[argz]+[eb]*[lnz]): print_pcart(<[magnitude],[angle]>) })}) }) })}): func(clog,{sub({ let(ex,elem([x],1)): let(ey,elem([x],2)): let(lnz,[ex]*[ex]+[ey]*[ey]): print_<0.5*ln([lnz]),atan2([ey],[ex])> })}): func(cderiv,{ cdiv( csub([x](cadd([y],[z])),[x](csub([y],[z]))), cmul(<2,0>,[z]) ) }): func(clinapx,{ csub([y],cdiv([x]([y]),cderiv([x],[y],[z]))) }): func(cnewton,{ iff( greater(0.000001,abs(cmag([x]([y])))) |greater(abs(cmag([x]([y]))),1000000), {[y]}, {cnewton([x],clinapx([x],[y],<0.001,0>))} ) }): let(I,<0,1>): print_`complex-prg.txt' })