All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.tensorics.core.math.impl.ExplicitFieldImpl Maven / Gradle / Ivy

Go to download

Tensorics is a java framework which uses a tensor as a central object. A tensor represents a set of values placed in an N-dimensional space. Wherever you are tempted to use maps of maps, a tensor might be a good choice ;-) Tensorics provides methods to create, transform and performing calculations with those tensors.

There is a newer version: 0.0.81
Show newest version
// @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.math.impl;

import java.util.Comparator;

import org.tensorics.core.math.BinaryPredicates;
import org.tensorics.core.math.ExplicitField;
import org.tensorics.core.math.Operations;
import org.tensorics.core.math.operations.BinaryOperation;
import org.tensorics.core.math.operations.UnaryOperation;
import org.tensorics.core.math.predicates.BinaryPredicate;
import org.tensorics.core.math.structures.ringlike.OrderedField;

/**
 * @author kfuchsbe
 * @param  the type of the field elements
 */
@SuppressWarnings("PMD.TooManyMethods")
public class ExplicitFieldImpl implements ExplicitField {

    private final OrderedField field;
    private final BinaryOperation subtractionOperation;
    private final BinaryOperation divisionOperation;
    private final T twoValue;
    private final BinaryPredicate greaterPredicate;
    private final BinaryPredicate greaterOrEqualPredicate;
    private final BinaryPredicate lessPredicate;
    private final BinaryPredicate equalPredicate;
    private final Comparator comparator;

    public ExplicitFieldImpl(OrderedField field) {
        this.field = field;
        subtractionOperation = Operations.inverseBinaryFor(field.additionStructure());
        divisionOperation = Operations.inverseBinaryFor(field.multiplicationStructure());
        twoValue = addition().perform(one(), one());

        greaterPredicate = BinaryPredicates.not(field.lessOrEqualPredicate());
        greaterOrEqualPredicate = BinaryPredicates.invert(field.lessOrEqualPredicate());
        lessPredicate = BinaryPredicates.not(greaterOrEqualPredicate);
        equalPredicate = BinaryPredicates.and(field.lessOrEqualPredicate(), greaterOrEqualPredicate);

        this.comparator = (elementA, elementB) -> {
            if (lessOrEqual().test(elementA, elementB)) {
                if (less().test(elementA, elementB)) {
                    return -1;
                }
                return 0;
            }
            return 1;
        };
    }

    @Override
    public final BinaryOperation addition() {
        return field.additionStructure().operation();
    }

    @Override
    public final BinaryOperation multiplication() {
        return field.multiplicationStructure().operation();
    }

    @Override
    public final UnaryOperation additiveInversion() {
        return field.additionStructure().inversion();
    }

    @Override
    public final BinaryOperation subtraction() {
        return subtractionOperation;
    }

    @Override
    public final T zero() {
        return field.additionStructure().identity();
    }

    @Override
    public final BinaryOperation division() {
        return divisionOperation;
    }

    @Override
    public final UnaryOperation multiplicativeInversion() {
        return field.multiplicationStructure().inversion();
    }

    @Override
    public final T one() {
        return field.multiplicationStructure().identity();
    }

    @Override
    public final T two() {
        return twoValue;
    }

    @Override
    public BinaryPredicate less() {
        return lessPredicate;
    }

    @Override
    public BinaryPredicate lessOrEqual() {
        return field.lessOrEqualPredicate();
    }

    @Override
    public BinaryPredicate equal() {
        return equalPredicate;
    }

    @Override
    public BinaryPredicate greaterOrEqual() {
        return greaterOrEqualPredicate;
    }

    @Override
    public BinaryPredicate greater() {
        return greaterPredicate;
    }

    @Override
    public Comparator comparator() {
        return comparator;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy