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

org.ejml.ops.FSemiRings Maven / Gradle / Ivy

Go to download

A fast and easy to use dense and sparse matrix linear algebra library written in Java.

There is a newer version: 0.43.1
Show newest version
/*
 * Copyright (c) 2020, Peter Abeles. All Rights Reserved.
 *
 * This file is part of Efficient Java Matrix Library (EJML).
 *
 * 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.
 */

package org.ejml.ops;

import javax.annotation.Generated;
import static org.ejml.ops.FMonoids.*;

/**
 * as defined in the graphblas c-api (https://people.eecs.berkeley.edu/~aydin/GraphBLAS_API_C_v13.pdf)
 * p. 27-28
 * Note: some don’t have a multiplicative annihilator (thus no "true" semi-rings")
 */
@Generated("org.ejml.ops.DSemiRings")
public final class FSemiRings {
    public static final FSemiRing PLUS_TIMES = new FSemiRing(PLUS, TIMES);
    public static final FSemiRing MIN_PLUS = new FSemiRing(MIN, PLUS);
    public static final FSemiRing MAX_PLUS = new FSemiRing(MAX, PLUS);
    public static final FSemiRing MIN_TIMES = new FSemiRing(MIN, TIMES);
    public static final FSemiRing MIN_MAX = new FSemiRing(MIN, MAX);
    public static final FSemiRing MAX_MIN = new FSemiRing(MAX, MIN);
    public static final FSemiRing MAX_TIMES = new FSemiRing(MAX, TIMES);
    public static final FSemiRing PLUS_MIN = new FSemiRing(PLUS, MIN);

    public static final FSemiRing OR_AND = new FSemiRing(OR, AND);
    public static final FSemiRing AND_OR = new FSemiRing(AND, OR);
    public static final FSemiRing XOR_AND = new FSemiRing(XOR, AND);
    public static final FSemiRing XNOR_OR = new FSemiRing(XNOR, OR);

    // only private as they have no identity element, hence can only be used for add
    private static final FMonoid FIRST = new FMonoid(Float.NaN, ( x, y ) -> x);
    private static final FMonoid SECOND = new FMonoid(Float.NaN, ( x, y ) -> y);

    // semi-rings with no multiplicative annihilator
    public static final FSemiRing MIN_FIRST = new FSemiRing(MIN, FIRST);
    public static final FSemiRing MIN_SECOND = new FSemiRing(MIN, SECOND);
    public static final FSemiRing MAX_FIRST = new FSemiRing(MAX, FIRST);
    public static final FSemiRing MAX_SECOND = new FSemiRing(MAX, SECOND);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy