[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [analitza/imaginary] /: Add complex conjugate operator
From: Percy_Camilo_Triveño_Aucahuasi <percy.camilo.ta () gmail ! com>
Date: 2014-06-15 6:59:14
Message-ID: E1Ww4PK-0006Fz-LO () scm ! kde ! org
[Download RAW message or body]
Git commit 92ffce157d278ff9309b331d352514282799cf53 by Percy Camilo Triveño \
Aucahuasi. Committed on 15/06/2014 at 06:59.
Pushed by aucahuasi into branch 'imaginary'.
Add complex conjugate operator
M +5 -2 analitza/htmlexpressionwriter.cpp
M +1 -1 analitza/mathmlpresentationexpressionwriter.cpp
M +11 -12 analitza/operations.cpp
M +6 -6 analitza/operator.cpp
M +1 -1 analitza/operator.h
M +5 -2 analitza/stringexpressionwriter.cpp
M +4 -2 analitza/tests/analitzatest.cpp
M +16 -20 analitzagui/operatorsmodel.cpp
http://commits.kde.org/analitza/92ffce157d278ff9309b331d352514282799cf53
diff --git a/analitza/htmlexpressionwriter.cpp b/analitza/htmlexpressionwriter.cpp
index ab5a21a..1d8cb25 100644
--- a/analitza/htmlexpressionwriter.cpp
+++ b/analitza/htmlexpressionwriter.cpp
@@ -99,7 +99,7 @@ QVariant HtmlExpressionWriter::visit(const Cn* var)
else
realiszero = true;
- if (var->complexValue().imag() != 1) {
+ if (var->complexValue().imag() != 1 && var->complexValue().imag() != -1) {
if (qAbs(var->complexValue().imag()) > MIN_PRINTABLE_VALUE) {
if (!realiszero && var->complexValue().imag()>0.)
realpart += QLatin1String("+");
@@ -107,7 +107,10 @@ QVariant HtmlExpressionWriter::visit(const Cn* var)
imagpart += QLatin1String("*i");
}
} else {
- imagpart = QLatin1String("i");
+ if (var->complexValue().imag() == 1)
+ imagpart = QLatin1String("i");
+ else if (var->complexValue().imag() == -1)
+ imagpart = QLatin1String("-i");
}
innerhtml = realpart+imagpart;
diff --git a/analitza/mathmlpresentationexpressionwriter.cpp \
b/analitza/mathmlpresentationexpressionwriter.cpp index 614de7d..7c95ae5 100644
--- a/analitza/mathmlpresentationexpressionwriter.cpp
+++ b/analitza/mathmlpresentationexpressionwriter.cpp
@@ -180,7 +180,7 @@ MathMLPresentationExpressionWriter::operatorToString
0,0,0,// arccosh, arccsc, arccsch,
0,0,0,0,// arcsec, arcsech, arcsinh, arctanh,
exp, prefixOp<&_log10>, prefixOp<&logE>,// exp, ln, log,
-// 0,0,0,0,// // conjugate, arg, real, imaginary,
+ 0,0,0,0,// // conjugate, arg, real, imaginary,
sum, product, diff,// sum, product, diff,
prefix<&cardinal>, joinOp<&scalarproduct>, selector, 0,
function // function
diff --git a/analitza/operations.cpp b/analitza/operations.cpp
index bb59b9c..09f7d5b 100644
--- a/analitza/operations.cpp
+++ b/analitza/operations.cpp
@@ -331,10 +331,13 @@ Cn* Operations::reduceUnaryComplex(Operator::OperatorType op, \
Cn* val, QString** case Operator::abs:
val->setValue(a>=0. ? a : -a);
break;
- //case Object::conjugate:
- //case Object::arg:
- //case Object::real:
- //case Object::imaginary:
+ case Operator::conjugate:
+ val->setValue(complex<double>(a.real(), -a.imag()));
+ break;
+ case Operator::arg:
+ case Operator::real:
+ case Operator::imaginary:
+ break;
default:
*correct=new QString(i18n("Could not calculate a value %1", \
Operator(op).toString())); }
@@ -438,10 +441,6 @@ Cn* Operations::reduceUnaryReal(enum Operator::OperatorType op, \
Cn *val, QString case Operator::abs:
val->setValue(a>=0. ? a : -a);
break;
- //case Object::conjugate:
- //case Object::arg:
- //case Object::real:
- //case Object::imaginary:
case Operator::floor:
val->setValue(floor(a));
break;
@@ -821,10 +820,10 @@ QList<ExpressionType> \
Operations::inferUnary(Operator::OperatorType op) case Operator::ln:
case Operator::log:
case Operator::abs:
- //case Object::conjugate:
- //case Object::arg:
- //case Object::real:
- //case Object::imaginary:
+ case Operator::conjugate:
+ case Operator::arg:
+ case Operator::real:
+ case Operator::imaginary:
case Operator::floor:
case Operator::ceiling:
ret << TypePair(ExpressionType(ExpressionType::Value), \
ExpressionType(ExpressionType::Value));
diff --git a/analitza/operator.cpp b/analitza/operator.cpp
index 0acbcae..4ea3f00 100644
--- a/analitza/operator.cpp
+++ b/analitza/operator.cpp
@@ -38,8 +38,8 @@ const char Operator::words[nOfOps][14] = {
"arccot", //"arccoth",
"arccosh", "arccsc", "arccsch",
"arcsec", "arcsech", "arcsinh", "arctanh",
- "exp", "ln", "log",// "real",
-// "conjugate", "arg", "imaginary",
+ "exp", "ln", "log",
+ "conjugate", "arg", "real", "imaginary",
"sum", "product", "diff",
//Vector operations
"card", "scalarproduct", "selector", "union",
@@ -157,10 +157,10 @@ int Operator::nparams(Operator::OperatorType t)
case log:
case _not:
case factorial:
-// case real:
-// case conjugate:
-// case arg:
-// case imaginary:
+ case real:
+ case conjugate:
+ case arg:
+ case imaginary:
case floor:
case ceiling:
case sum:
diff --git a/analitza/operator.h b/analitza/operator.h
index 51c578c..231b498 100644
--- a/analitza/operator.h
+++ b/analitza/operator.h
@@ -55,7 +55,7 @@ class ANALITZA_EXPORT Operator : public Object
arccosh, arccsc, arccsch,
arcsec, arcsech, arcsinh, arctanh,
exp, ln, log,
-// conjugate, arg, real, imaginary,
+ conjugate, arg, real, imaginary,
sum, product, diff,
card, scalarproduct, selector, _union,
forall, exists,
diff --git a/analitza/stringexpressionwriter.cpp \
b/analitza/stringexpressionwriter.cpp index 50012b3..c93c564 100644
--- a/analitza/stringexpressionwriter.cpp
+++ b/analitza/stringexpressionwriter.cpp
@@ -116,7 +116,7 @@ QVariant StringExpressionWriter::visit(const Cn* var)
else
realiszero = true;
- if (var->complexValue().imag() != 1) {
+ if (var->complexValue().imag() != 1 && var->complexValue().imag() != -1) {
if (qAbs(var->complexValue().imag()) > MIN_PRINTABLE_VALUE) {
if (!realiszero && var->complexValue().imag()>0.)
realpart += QLatin1String("+");
@@ -124,7 +124,10 @@ QVariant StringExpressionWriter::visit(const Cn* var)
imagpart += QLatin1String("*i");
}
} else {
- imagpart = QLatin1String("i");
+ if (var->complexValue().imag() == 1)
+ imagpart = QLatin1String("i");
+ else if (var->complexValue().imag() == -1)
+ imagpart = QLatin1String("-i");
}
return QVariant::fromValue<QString>(realpart+imagpart);
diff --git a/analitza/tests/analitzatest.cpp b/analitza/tests/analitzatest.cpp
index 28e0ce3..721f6c5 100644
--- a/analitza/tests/analitzatest.cpp
+++ b/analitza/tests/analitzatest.cpp
@@ -155,6 +155,8 @@ void AnalitzaTest::testTrivialEvaluate_data()
QTest::newRow("complex*complex") << "(5.3-9.8*i)*(-6.2+3.7*i)" << "3.4+80.37*i";
QTest::newRow("simple complex/complex") << "i/i" << "1";
QTest::newRow("complex/complex") << "(9.3-5.4*i)/(3.6-9.5*i)" << \
"0.82143203178+0.667667861641*i"; + QTest::newRow("simple complex conjugate") << \
"conjugate(i)" << "-i"; + QTest::newRow("complex conjugate") << \
"conjugate(-9.3+5.87*i)" << "-9.3-5.87*i"; QTest::newRow("simple addition") << "2+2" \
<< "4"; QTest::newRow("simple addition with var") << "2+x" << "x+2";
QTest::newRow("minus irreductibility") << "-x" << "-x";
@@ -638,8 +640,8 @@ void AnalitzaTest::testSimplify_data()
QTest::newRow("diff") << "diff(x^2:x)" << "x->2*x";
QTest::newRow("sum times") << "sum(n*x : n=0..99)" << "4950*x";
QTest::newRow("levelout") << "-y-(x+y)" << "-2*y-x";
- QTest::newRow("sum") << "n->sum((i+n) * i : i=0..9)" << "n->sum((i+n)*i:i=0..9)";
- QTest::newRow("sum.sum") << "k->sum(sum(x:x=0..i):i=0..k)" << \
"k->sum(sum(x:x=0..i):i=0..k)"; + QTest::newRow("sum") << "n->sum((s+n) * s : \
s=0..9)" << "n->sum((s+n)*s:s=0..9)"; + QTest::newRow("sum.sum") << \
"k->sum(sum(x:x=0..s):s=0..k)" << "k->sum(sum(x:x=0..s):s=0..k)"; \
QTest::newRow("unrelated sum") << "sum(x : n=0..99)" << "100*x"; QTest::newRow("ln") \
<< "ln(x)" << "ln(x)";
diff --git a/analitzagui/operatorsmodel.cpp b/analitzagui/operatorsmodel.cpp
index 31be991..ab7240b 100644
--- a/analitzagui/operatorsmodel.cpp
+++ b/analitzagui/operatorsmodel.cpp
@@ -263,18 +263,18 @@ QString OperatorsModel::description(const Analitza::Operator& \
o) case Operator::abs:
s = i18n("Absolute value. abs(n)=|n|");
break;
-// case Operator::conjugate:
-// s = i18n("Conjugate");
-// break;
-// case Operator::arg:
-// s = "---";//i18n("Arg?");
-// break;
-// case Operator::real:
-// s = i18n("Real");
-// break;
-// case Operator::imaginary:
-// s = i18n("Imaginary");
-// break;
+ case Operator::conjugate:
+ s = i18n("Conjugate");
+ break;
+ case Operator::arg:
+ s = i18n("Arg");
+ break;
+ case Operator::real:
+ s = i18n("Real");
+ break;
+ case Operator::imaginary:
+ s = i18n("Imaginary");
+ break;
case Operator::floor:
s = i18n("Floor value. floor(n)=⌊n⌋");
break;
@@ -510,10 +510,6 @@ QString OperatorsModel::example(const Analitza::Operator& o)
case Operator::ln:
case Operator::log:
case Operator::abs:
- //case Object::conjugate:
- //case Object::arg:
- //case Object::real:
- //case Object::imaginary:
case Operator::floor:
case Operator::ceiling:
s=QString("%1(x)").arg(o.toString());
@@ -521,10 +517,10 @@ QString OperatorsModel::example(const Analitza::Operator& o)
case Operator::nOfOps:
case Operator::none:
case Operator::function:
-// case Operator::real:
-// case Operator::conjugate:
-// case Operator::arg:
-// case Operator::imaginary:
+ case Operator::real:
+ case Operator::conjugate:
+ case Operator::arg:
+ case Operator::imaginary:
break;
}
return "x->"+s;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic