@Override public IndexMappingProvider create(final IndexMappingProvider opu, final Tensor from, final Tensor to) { if (from.equals(to)) if (((Complex) from).isZero()) return new PlusMinusIndexMappingProvider(opu); else return new DummyIndexMappingProvider(opu); else if (from.equals(((Complex) to).negate())) return new MinusIndexMappingProvider(opu); return IndexMappingProvider.Util.EMPTY_PROVIDER; } };
@Override public boolean tick() { return dummyProvider.tick(); }
@Override public IndexMappingProvider create(IndexMappingProvider opu, Tensor from, Tensor to) { if (IndexMappings.createPortOfBuffers(from.get(0), to.get(0)).take() != null) return new DummyIndexMappingProvider(opu); return IndexMappingProvider.Util.EMPTY_PROVIDER; } };
@Override public IndexMappingProvider create(IndexMappingProvider opu, Tensor from, Tensor to) { if (((SimpleTensor) from).getName() != ((SimpleTensor) to).getName()) return IndexMappingProvider.Util.EMPTY_PROVIDER; if (from.getIndices().size() == 0) return new DummyIndexMappingProvider(opu); return new ProviderSimpleTensor(opu, (SimpleTensor) from, (SimpleTensor) to); } };
@Override public IndexMappingProvider create(IndexMappingProvider opu, Tensor from, Tensor to) { IndexMappingBuffer buffer; if ((buffer = IndexMappings.createPortOfBuffers(from.get(0), to.get(0)).take()) != null && !buffer.getSign()) return new DummyIndexMappingProvider(opu); return IndexMappingProvider.Util.EMPTY_PROVIDER; } };
@Override public IndexMappingProvider create(IndexMappingProvider opu, Tensor from, Tensor to) { OutputPort<IndexMappingBuffer> mp = IndexMappings.createPortOfBuffers(from.get(0), to.get(0)); IndexMappingBuffer buffer; byte state = 0; while ((buffer = mp.take()) != null) { state |= (byte) (buffer.getSign() ? 0x10 : 0x01); if (state == 0x11) break; } switch (state) { case 0x00: return IndexMappingProvider.Util.EMPTY_PROVIDER; case 0x01: return new DummyIndexMappingProvider(opu); case 0x10: return new MinusIndexMappingProvider(opu); case 0x11: return new PlusMinusIndexMappingProvider(opu); default: throw new RuntimeException("Ups"); } } };
private ProviderProduct(final OutputPort<IndexMappingBuffer> opu, final Product from, final Product to) { this.dummyProvider = new DummyIndexMappingProvider(opu);
@Override public IndexMappingProvider create(IndexMappingProvider opu, Tensor from, Tensor to) { IndexMappingBuffer exponentMapping = IndexMappings.getFirstBuffer(from.get(1), to.get(1)); //todo try get first positive mapping if (exponentMapping == null || exponentMapping.getSign()) return IndexMappingProvider.Util.EMPTY_PROVIDER; //todo two signs are possible IndexMappingBuffer baseMapping = IndexMappings.getFirstBuffer(from.get(0), to.get(0)); if (baseMapping == null) return IndexMappingProvider.Util.EMPTY_PROVIDER; if (baseMapping.getSign() == false) return new DummyIndexMappingProvider(opu); if (!(from.get(1) instanceof Complex)) return IndexMappingProvider.Util.EMPTY_PROVIDER; assert to.get(1) instanceof Complex; Complex exponent = (Complex) from.get(1); if (NumberUtils.isIntegerEven(exponent)) return new DummyIndexMappingProvider(opu); if (NumberUtils.isIntegerOdd(exponent)) return new MinusIndexMappingProvider(opu); return IndexMappingProvider.Util.EMPTY_PROVIDER; } }