@Override public boolean is(ParseTokenSimpleTensor object) { String name = object.name; int i; for (i = 0; i < INPUT_VALUES_GENERAL_COUNT; ++i) if (name.equals(getStringInputName(i))) return true; for (i = 0; i < HAT_QUANTITIES_GENERAL_COUNT; ++i) if (name.equals(getStringHatQuantitieName(i))) return true; if (name.equals("F") && F_TYPES.isStructureOf(object.indices)) return true; if (name.equals("HATF")) return true; return false; } };
@Override public void setSymmetries(IndicesSymmetries symmetries) { if (!symmetries.getStructureOfIndices().isStructureOf(this)) throw new IllegalArgumentException("Illegal symmetries instance."); this.symmetries = symmetries; } }
if (descriptor.getStructuresOfIndices().length - 1 != argIndices.length) throw new IllegalArgumentException("This name corresponds to field with different number of arguments."); if (!descriptor.getStructureOfIndices().isStructureOf(indices)) throw new IllegalArgumentException("Specified indices are not indices of specified tensor."); for (int i = 0; i < argIndices.length; ++i) { if (!descriptor.getStructuresOfIndices()[i + 1].isStructureOf(argIndices[i])) throw new IllegalArgumentException("Arguments indices are inconsistent with field signature."); if (!arguments[i].getIndices().getFree().equalsRegardlessOrder(argIndices[i]))
/** * Returns new tensor field with specified int name (see {@link cc.redberry.core.context.NameManager} * for details), indices and arguments list. Free indices of arguments * assumed as arguments indices bindings of this field bindings. * * @param name int name of the field * @param indices indices * @param arguments arguments list * @return new instance of {@link TensorField} object */ public static TensorField field(int name, SimpleIndices indices, Tensor[] arguments) { if (arguments.length == 0) throw new IllegalArgumentException("No arguments in field."); NameDescriptor descriptor = CC.getNameDescriptor(name); if (descriptor == null) throw new IllegalArgumentException("This name is not registered in the system."); if (!descriptor.getStructureOfIndices().isStructureOf(indices)) throw new IllegalArgumentException("Specified indices are not indices of specified tensor."); SimpleIndices[] argIndices = new SimpleIndices[arguments.length]; for (int i = 0; i < arguments.length; ++i) argIndices[i] = IndicesFactory.createSimple(null, arguments[i].getIndices().getFree()); return new TensorField(name, UnsafeIndicesFactory.createOfTensor(descriptor.getSymmetries(), indices), arguments, argIndices); }
/** * Returns an instance of specified simple tensor with specified indices * * @param tensor simple tensor * @param indices indices * @return instance of specified simple tensor with specified indices */ public static SimpleTensor setIndices(SimpleTensor tensor, SimpleIndices indices) { if (tensor.getIndices() == indices) return tensor; NameDescriptor descriptor = tensor.getNameDescriptor(); if (!descriptor.getStructureOfIndices().isStructureOf(indices)) throw new IllegalArgumentException(String.format("Illegal structure of indices (tensor = %s, indices = %s).", tensor, indices)); if (indices.size() == 0) return tensor; if (descriptor.isField()) return new TensorField(tensor.name, UnsafeIndicesFactory.createOfTensor(descriptor.getSymmetries(), indices), ((TensorField) tensor).args, ((TensorField) tensor).argIndices); else return new SimpleTensor(tensor.name, UnsafeIndicesFactory.createOfTensor(descriptor.getSymmetries(), indices)); }
/** * Returns new simple tensor with specified int name (see {@link cc.redberry.core.context.NameManager} * for details) and indices. * * @param name int name of the tensor * @param indices indices * @return new instance of {@link SimpleTensor} object */ public static SimpleTensor simpleTensor(int name, SimpleIndices indices) { NameDescriptor descriptor = CC.getNameDescriptor(name); if (descriptor == null) throw new IllegalArgumentException("This name is not registered in the system."); if (!descriptor.getStructureOfIndices().isStructureOf(indices)) throw new IllegalArgumentException("Specified indices ( " + indices + " )are not indices of specified tensor ( " + descriptor + " )."); if (indices.size() == 0) { assert indices == IndicesFactory.EMPTY_SIMPLE_INDICES; NameDescriptorForSimpleTensor nst = (NameDescriptorForSimpleTensor) descriptor; if (nst.getCachedSymbol() == null) { SimpleTensor st; nst.setCachedInstance(st = new SimpleTensor(descriptor.getId(), indices)); return st; } else return nst.getCachedSymbol(); } return new SimpleTensor(name, UnsafeIndicesFactory.createOfTensor(descriptor.getSymmetries(), indices)); }