public MultivectorWithValues(int bladeCount, boolean isMultivector) { entries = new double[bladeCount]; multivector = isMultivector; clear(); }
/** * Creates a vector with a name and a size * @param name The name * @param size The size */ private void createVector(String name, int size) { values.put(name, new MultivectorWithValues(size, false)); }
public void restart() { executer = new Executer(inputValues); curInstruction = 0; repaint(); }
@Override public Object visitDotVectors(GAPPDotVectors gappDotVectors, Object arg) { MultivectorWithValues destination = getMultivector(gappDotVectors.getDestination().getName()); // calculate the dot product double sum = 0; int size = getMultivector(gappDotVectors.getParts().getFirst().getName()).getEntries().length; for (int slot = 0; slot < size; slot++) { double prod = 1; for (GAPPVector part : gappDotVectors.getParts()) { prod *= getMultivector(part.getName()).getEntry(slot); } sum += prod; } Selector sDest = gappDotVectors.getDestSelector(); destination.setEntry(sDest.getIndex(), sDest.getSign() * sum); return null; }
MultivectorWithValues v = executer.getValues().get(varName); if (v.isMultivector()) { int bladeCount = v.getEntries().length; for (int blade = 0; blade < bladeCount; blade++) { Vector row = new Vector(); row.add(algebra.getBlade(blade).toString()); row.add(Double.toString(v.getEntry(blade))); model.addRow(row); int entryCount = v.getEntries().length; for (int entry = 0; entry < entryCount; entry++) { Vector row = new Vector(); row.add(entry); row.add(""); row.add(Double.toString(v.getEntry(entry))); model.addRow(row);
createVector(destName, size); MultivectorWithValues destination = getMultivector(destName); destination.setEntries(new double[size]); int i = 0; for (SetVectorArgument curArg: gappSetVector.getEntries()) { if (curArg.isConstant()) { ConstantSetVectorArgument c = (ConstantSetVectorArgument) curArg; destination.setEntry(i, c.getValue()); i++; } else { PairSetOfVariablesAndIndices p = (PairSetOfVariablesAndIndices) curArg; MultivectorWithValues source = getMultivector(p.getSetOfVariable().getName()); for (Selector sel: p.getSelectors()) { destination.setEntry(i, sel.getSign() * source.getEntries()[sel.getIndex()]); i++;
@Override public Object visitCalculateMv(GAPPCalculateMv gappCalculate, Object arg) { MultivectorWithValues mv1 = getMultivector(gappCalculate.getOperand1().getName()); double op1 = mv1.getEntry(0); mv2 = getMultivector(gappCalculate.getOperand2().getName()); op2 = mv2.getEntry(0); MultivectorWithValues target = getMultivector(gappCalculate.getDestination().getName()); target.setEntry(0, result);
@Override public Object visitAssignInputsVector(GAPPAssignInputsVector gappAssignInputsVector, Object arg) { int size = gappAssignInputsVector.getValues().size(); String name = "inputsVector"; createVector(name, size); MultivectorWithValues destination = getMultivector(name); for (int sel = 0; sel < size; sel++) { GAPPValueHolder scalarVar = gappAssignInputsVector.getValues().get(sel); double value = (scalarVar.isVariable()) ? getVariableValue(((GAPPVariable) scalarVar).getName()) : ((GAPPConstant) scalarVar).getValue(); destination.getEntries()[sel] = value; } return null; }
@Override public Object visitAssignMv(GAPPAssignMv gappAssignMv, Object arg) { MultivectorWithValues destination = getMultivector(gappAssignMv.getDestination().getName()); PosSelectorset selector = gappAssignMv.getSelectors(); int selCount = selector.size(); for (int sel = 0; sel < selCount; sel++) { GAPPValueHolder scalarVar = gappAssignMv.getValues().get(sel); double value = (scalarVar.isVariable()) ? getVariableValue(((GAPPVariable) scalarVar).getName()) : ((GAPPConstant) scalarVar).getValue(); destination.getEntries()[selector.get(sel).getIndex()] = value; } return null; }
@Override public Object visitSetMv(GAPPSetMv gappSetMv, Object arg) { MultivectorWithValues destination = getMultivector(gappSetMv.getDestination().getName()); MultivectorWithValues source = getMultivector(gappSetMv.getSource().getName()); Selectorset selSrc = gappSetMv.getSelectorsSrc(); PosSelectorset selDest = gappSetMv.getSelectorsDest(); int selCount = gappSetMv.getSelectorsSrc().size(); for (int sel = 0; sel < selCount; sel++) { PosSelector sDest = selDest.get(sel); Selector sSrc = selSrc.get(sel); destination.getEntries()[sDest.getIndex()] = sSrc.getSign() * source.getEntries()[sSrc.getIndex()]; } return null; }
/** * Prints all values, vectors and their contents. * * This is used commonly for debug purposes. */ public void printAllValues() { String[] keys = values.keySet().toArray(new String[0]); Arrays.sort(keys); for (String m : keys) { System.out.println(m + " = " + Arrays.toString(values.get(m).getEntries())); } }
@Override public Object visitResetMv(GAPPResetMv gappResetMv, Object arg) { MultivectorWithValues mv = new MultivectorWithValues(gappResetMv.getSize(),true); values.put(gappResetMv.getDestination().getName(), mv); mv.clear(); return null; }
public void repaint() { modelVars.clear(); String[] keyArr = inputValues.keySet().toArray(new String[0]); Arrays.sort(keyArr); for (String var : keyArr) { modelVars.addElement(var + " = " + inputValues.get(var).toString()); } String[] keyArr2 = executer.getValues().keySet().toArray(new String[0]); Arrays.sort(keyArr2); for (String var : keyArr2) { modelVars.addElement(var); } ui.jListSrc.repaint(); ui.jListVariables.repaint(); if (curInstruction < instructions.length) { ui.jListSrc.setSelectedIndex(curInstruction); } else { ui.jListSrc.clearSelection(); } } }
@Override public Object visitCalculateMvCoeff(GAPPCalculateMvCoeff gappCalculateCoeff, Object arg) { MultivectorWithValues mv1 = getMultivector(gappCalculateCoeff.getOperand1().getName()); double op1 = mv1.getEntry(0); mv2 = getMultivector(gappCalculateCoeff.getOperand2().getName()); op2 = mv2.getEntry(0); MultivectorWithValues target = getMultivector(gappCalculateCoeff.getDestination().getName()); target.setEntry(gappCalculateCoeff.getDestination().getBladeIndex(), result);