Example #1
0
 /**
  * Creates output port of mappings of two products of tensors represented as arrays of
  * multipliers, where each multiplier of {@code from} will be mapped on the multiplier of {@code
  * to} at the same position. Such ordering can be obtained via {@link
  * cc.redberry.core.transformations.substitutions.ProductsBijectionsPort}. In contrast to {@link
  * #createPort(cc.redberry.core.tensor.Tensor, cc.redberry.core.tensor.Tensor)}, this method will
  * fully handles mappings of free indices on contracted ones (like e.g. _i^j -> _k^k).
  *
  * @param from from tensor
  * @param to to tensor
  * @return port of mappings of indices
  */
 public static MappingsPort createBijectiveProductPort(Tensor[] from, Tensor[] to) {
   if (from.length != to.length) throw new IllegalArgumentException("From length != to length.");
   if (from.length == 0) return IndexMappingProvider.Util.singleton(new IndexMappingBufferImpl());
   if (from.length == 1) return createPort(from[0], to[0]);
   return new MappingsPortRemovingContracted(
       new SimpleProductMappingsPort(
           IndexMappingProvider.Util.singleton(new IndexMappingBufferImpl()), from, to));
 }
Example #2
0
 /**
  * Creates output port of mappings of two simple tensors and do not takes into account the
  * arguments of fields.
  *
  * @param from from tensor
  * @param to to tensor
  * @return port of mappings of indices
  */
 public static MappingsPort simpleTensorsPort(SimpleTensor from, SimpleTensor to) {
   final IndexMappingProvider provider =
       ProviderSimpleTensor.FACTORY_SIMPLETENSOR.create(
           IndexMappingProvider.Util.singleton(new IndexMappingBufferImpl()), from, to);
   provider.tick();
   return new MappingsPortRemovingContracted(provider);
 }
Example #3
0
 /**
  * Creates output port of mappings of tensor {@code from} on tensor {@code to} with specified
  * mappings rules defined in specified {@link IndexMappingBuffer}.
  *
  * @param buffer initial mapping rules
  * @param from from tensor
  * @param to to tensor
  * @return output port of mapping
  */
 public static MappingsPort createPort(
     final IndexMappingBuffer buffer, final Tensor from, final Tensor to) {
   final IndexMappingProvider provider =
       createPort(IndexMappingProvider.Util.singleton(buffer), from, to);
   provider.tick();
   return new MappingsPortRemovingContracted(provider);
 }