package jmathlib.toolbox.general;
import jmathlib.core.tokens.numbertokens.DoubleNumberToken;
import jmathlib.core.tokens.Token;
import jmathlib.core.tokens.OperandToken;
import jmathlib.core.functions.ExternalFunction;
import jmathlib.core.interpreter.GlobalValues;
/**Display the debug information of an expression*/
public class complex extends ExternalFunction
{
/**Creates a complex number from a pair of numbers
@param operand[0] = real part
@param operand[2] = imaginary part
@return the complex number*/
public OperandToken evaluate(Token[] operands, GlobalValues globals)
{
OperandToken result = null;
if (getNArgIn(operands) != 2)
throwMathLibException("complex: number of arguments != 2");
if((operands[0] instanceof DoubleNumberToken) &&
(operands[1] instanceof DoubleNumberToken) )
{
DoubleNumberToken number1 = ((DoubleNumberToken)operands[0]);
DoubleNumberToken number2 = ((DoubleNumberToken)operands[1]);
int sizeX1 = number1.getSizeX();
int sizeY1 = number1.getSizeY();
int sizeX2 = number2.getSizeX();
int sizeY2 = number2.getSizeY();
//check that the two values are the same size
if((sizeX1 == sizeX2) && (sizeY1 == sizeY2))
{
double [][] valuesR1 = number1.getReValues();
double [][] valuesR2 = number2.getReValues();
double[][] resultR = new double[sizeY1][sizeX1];
double[][] resultI = new double[sizeY1][sizeX1];
for(int yy = 0; yy < sizeY1; yy++)
{
for(int xx = 0; xx < sizeX1; xx++)
{
resultR[yy][xx] = valuesR1[yy][xx];
resultI[yy][xx] = valuesR2[yy][xx];
}
}
result = new DoubleNumberToken(resultR, resultI);
}
}
return result;
}
}
/*
@GROUP
general
@SYNTAX
complex(real, imaginary)
@DOC
Creates a complex number from real and imaginary
@EXAMPLES
complex(1,1) = 1+i
@NOTES
@SEE
*/