org.tensorics.core.scalar.lang.ScalarExpressionSupport Maven / Gradle / Ivy
Show all versions of tensorics-core Show documentation
// @formatter:off
/*******************************************************************************
* This file is part of tensorics.
*
* Copyright (c) 2008-2011, CERN. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
// @formatter:on
package org.tensorics.core.scalar.lang;
import org.tensorics.core.expressions.UnaryOperationExpression;
import org.tensorics.core.math.ExtendedField;
import org.tensorics.core.tree.domain.Expression;
import org.tensorics.core.tree.domain.ResolvedExpression;
/**
* Provides starting methods for tensoric eDSL expressions, which create expressions of scalars.
*
* @param the type of the scalar values (elements of the field on which all the operations are based on)
* @author kfuchsbe
*/
@SuppressWarnings("PMD.TooManyMethods")
public class ScalarExpressionSupport {
private final ExtendedField extendedField;
public ScalarExpressionSupport(ExtendedField field) {
this.extendedField = field;
}
public final Expression negativeOf(V element) {
return negativeOf(ResolvedExpression.of(element));
}
public final Expression negativeOf(Expression element) {
return new UnaryOperationExpression<>(this.field().additiveInversion(), element);
}
public final Expression inverseOf(V element) {
return inverseOf(ResolvedExpression.of(element));
}
public final Expression inverseOf(Expression element) {
return new UnaryOperationExpression<>(this.field().multiplicativeInversion(), element);
}
protected ExtendedField field() {
return this.extendedField;
}
public final V zero() {
return this.field().zero();
}
public final V two() {
return this.field().two();
}
public final V one() {
return this.field().one();
}
public Expression squareRootOf(V value) {
return squareRootOf(ResolvedExpression.of(value));
}
public Expression squareRootOf(Expression value) {
return calculate(value).root(ResolvedExpression.of(two()));
}
public Expression squareOf(V value) {
return squareOf(ResolvedExpression.of(value));
}
public Expression squareOf(Expression value) {
return calculate(value).toThePowerOf(ResolvedExpression.of(two()));
}
public OngoingDeferredBinaryOperation calculate(V left) {
return calculate(ResolvedExpression.of(left));
}
public OngoingDeferredBinaryOperation calculate(Expression left) {
return new OngoingDeferredBinaryOperation<>(extendedField, left);
}
public OngoingDeferredBinaryPredicate testIf(Expression expression) {
return new OngoingDeferredBinaryPredicate<>(extendedField, expression);
}
}