23if (!function_exists(__NAMESPACE__ . 
'\\atan')) {
 
   24    function atan($complex): Complex
 
   26        $complex = Complex::validateComplexArgument($complex);
 
   28        if ($complex->isReal()) {
 
   29            return new Complex(\atan($complex->getReal()));
 
   32        $t1Value = 
new Complex(-1 * $complex->getImaginary(), $complex->getReal());
 
   33        $uValue = 
new Complex(1, 0);
 
   35        $d1Value = clone $uValue;
 
   36        $d1Value = subtract($d1Value, $t1Value);
 
   37        $d2Value = 
add($t1Value, $uValue);
 
   38        $uResult = $d1Value->divideBy($d2Value);
 
   39        $uResult = ln($uResult);
 
   42            (($uResult->getImaginary() == M_PI) ? -M_PI : $uResult->getImaginary()) * -0.5,
 
   43            $uResult->getReal() * 0.5,
 
An exception for terminatinating execution or to throw for unit testing.