[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