aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/TensorMaxMinTransformer.java
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2019-06-12 20:33:45 +0200
committerGitHub <noreply@github.com>2019-06-12 20:33:45 +0200
commit6ad5df4f4a2ceebcfab47f6ae86d30dcf93efd4e (patch)
tree19bef88a22a7218c5620cc0f044c094d83379d17 /searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/TensorMaxMinTransformer.java
parent9423f1774e10129522a7f2cc9995bc4778ee9da0 (diff)
Revert "Require constant() for large constants and fix a type resolving bug (#9769)"
This reverts commit cee1c3a3804d5d3c25407b3c4ac64228e9d194e3.
Diffstat (limited to 'searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/TensorMaxMinTransformer.java')
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/TensorMaxMinTransformer.java93
1 files changed, 0 insertions, 93 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/TensorMaxMinTransformer.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/TensorMaxMinTransformer.java
deleted file mode 100644
index 979c5b0f88c..00000000000
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/transform/TensorMaxMinTransformer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchlib.rankingexpression.transform;
-
-import com.yahoo.searchlib.rankingexpression.Reference;
-import com.yahoo.searchlib.rankingexpression.rule.CompositeNode;
-import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
-import com.yahoo.searchlib.rankingexpression.rule.FunctionNode;
-import com.yahoo.searchlib.rankingexpression.rule.NameNode;
-import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode;
-import com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode;
-import com.yahoo.tensor.TensorType;
-import com.yahoo.tensor.evaluation.TypeContext;
-import com.yahoo.tensor.functions.Reduce;
-
-import java.util.Optional;
-
-/**
- * Transforms min(tensor,dim) and max(tensor,dim) to
- * reduce(tensor,min/max,dim). This is necessary as the backend does
- * not recognize these forms of min and max.
- *
- * @author lesters
- */
-public class TensorMaxMinTransformer<CONTEXT extends TransformContext> extends ExpressionTransformer<CONTEXT> {
-
- @Override
- public ExpressionNode transform(ExpressionNode node, CONTEXT context) {
- if (node instanceof CompositeNode) {
- node = transformChildren((CompositeNode) node, context);
- }
- if (node instanceof FunctionNode) {
- node = transformFunctionNode((FunctionNode) node, context.types());
- }
- return node;
- }
-
- public static ExpressionNode transformFunctionNode(FunctionNode node, TypeContext<Reference> context) {
- switch (node.getFunction()) {
- case min:
- case max:
- return transformMaxAndMinFunctionNode(node, context);
- }
- return node;
- }
-
- /**
- * Transforms max and min functions if the first
- * argument returns a tensor type and the second argument is a valid
- * dimension in the tensor.
- */
- private static ExpressionNode transformMaxAndMinFunctionNode(FunctionNode node, TypeContext<Reference> context) {
- if (node.children().size() != 2) {
- return node;
- }
- ExpressionNode arg1 = node.children().get(0);
- Optional<String> dimension = dimensionName(node.children().get(1));
- if (dimension.isPresent()) {
- TensorType type = arg1.type(context);
- if (type.dimension(dimension.get()).isPresent()) {
- return replaceMaxAndMinFunction(node);
- }
- }
- return node;
- }
-
- private static Optional<String> dimensionName(ExpressionNode node) {
- if (node instanceof ReferenceNode) {
- Reference reference = ((ReferenceNode)node).reference();
- if (reference.isIdentifier())
- return Optional.of(reference.name());
- else
- return Optional.empty();
- }
- else if (node instanceof NameNode) {
- return Optional.of(((NameNode)node).getValue());
- }
- else {
- return Optional.empty();
- }
- }
-
- private static ExpressionNode replaceMaxAndMinFunction(FunctionNode node) {
- ExpressionNode arg1 = node.children().get(0);
- ExpressionNode arg2 = node.children().get(1);
-
- TensorFunctionNode.TensorFunctionExpressionNode expression = TensorFunctionNode.wrapArgument(arg1);
- Reduce.Aggregator aggregator = Reduce.Aggregator.valueOf(node.getFunction().name());
- String dimension = ((ReferenceNode) arg2).getName();
-
- return new TensorFunctionNode(new Reduce(expression, aggregator, dimension));
- }
-
-}