001package conexp.fx.core.context.negation; 002 003/* 004 * #%L 005 * Concept Explorer FX 006 * %% 007 * Copyright (C) 2010 - 2023 Francesco Kriegel 008 * %% 009 * This program is free software: you can redistribute it and/or modify 010 * it under the terms of the GNU General Public License as 011 * published by the Free Software Foundation, either version 3 of the 012 * License, or (at your option) any later version. 013 * 014 * This program is distributed in the hope that it will be useful, 015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 017 * GNU General Public License for more details. 018 * 019 * You should have received a copy of the GNU General Public 020 * License along with this program. If not, see 021 * <http://www.gnu.org/licenses/gpl-3.0.html>. 022 * #L% 023 */ 024 025import java.util.ArrayList; 026import java.util.Collection; 027 028import org.ujmp.core.calculation.Calculation.Ret; 029 030import conexp.fx.core.context.MatrixContext; 031import conexp.fx.core.context.negation.Literal.Type; 032 033public class NegationScaling { 034 035 public static final <G, M> MatrixContext<G, Literal<M>> negationScaling( 036 final MatrixContext<G, M> cxt, 037 final Collection<M> attributes) { 038 final MatrixContext<G, Literal<M>> ncxt = new MatrixContext<G, Literal<M>>(false); 039 final ArrayList<Literal<M>> negations = new ArrayList<Literal<M>>(); 040 ncxt.rowHeads().addAll(cxt.rowHeads()); 041 for (M m : cxt.colHeads()) { 042 ncxt.colHeads().add(new Literal<M>(m)); 043 if (attributes.contains(m)) 044 negations.add(new Literal<M>(Type.NEGATIVE, m)); 045 } 046 ncxt.colHeads().addAll(negations); 047 ncxt.setMatrix(cxt 048 .matrix() 049 .clone() 050 .appendHorizontally(Ret.NEW, 051 cxt.matrix().selectColumns(Ret.NEW, cxt.colHeads().indicesOf(attributes, false)).not(Ret.NEW)) 052 .toBooleanMatrix()); 053 return ncxt; 054 } 055 056}