From 168d4d1db1c9f45f7d4c79489c1f48f1812fad6c Mon Sep 17 00:00:00 2001
From: Pratyush Patel <pratyushpatel.1995@gmail.com>
Date: Sat, 6 Oct 2018 10:20:12 -0700
Subject: [PATCH] [RELAY][OP] Add relay minimum op (#1840)

---
 docs/langref/relay_op.rst            |  4 +++-
 python/tvm/relay/op/tensor.py        | 18 ++++++++++++++++++
 src/relay/op/tensor/binary.cc        |  4 ++++
 tests/python/relay/test_op_level4.py |  3 ++-
 4 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/docs/langref/relay_op.rst b/docs/langref/relay_op.rst
index 6563903a9..856640456 100644
--- a/docs/langref/relay_op.rst
+++ b/docs/langref/relay_op.rst
@@ -61,6 +61,7 @@ This level enables typical convnet models.
    tvm.relay.less
    tvm.relay.less_equal
    tvm.relay.maximum
+   tvm.relay.minimum
 
 **Level 5: Vision/Image Operators**
 
@@ -89,4 +90,5 @@ Level 4 Definitions
 .. autofunction:: tvm.relay.greater_equal
 .. autofunction:: tvm.relay.less
 .. autofunction:: tvm.relay.less_equal
-.. autofunction:: tvm.relay.maximum
\ No newline at end of file
+.. autofunction:: tvm.relay.maximum
+.. autofunction:: tvm.relay.minimum
diff --git a/python/tvm/relay/op/tensor.py b/python/tvm/relay/op/tensor.py
index d6e4f32ae..859bfdc26 100644
--- a/python/tvm/relay/op/tensor.py
+++ b/python/tvm/relay/op/tensor.py
@@ -246,6 +246,24 @@ def maximum(lhs, rhs):
     return _make.maximum(lhs, rhs)
 
 
+def minimum(lhs, rhs):
+    """Minimum with numpy-style broadcasting.
+
+    Parameters
+    ----------
+    lhs : relay.Expr
+        The left hand side input data
+    rhs : relay.Expr
+        The right hand side input data
+
+    Returns
+    -------
+    result : relay.Expr
+        The computed result.
+    """
+    return _make.minimum(lhs, rhs)
+
+
 def right_shift(lhs, rhs):
     """Right shift with numpy-style broadcasting.
 
diff --git a/src/relay/op/tensor/binary.cc b/src/relay/op/tensor/binary.cc
index 7f8f6884c..11175f215 100644
--- a/src/relay/op/tensor/binary.cc
+++ b/src/relay/op/tensor/binary.cc
@@ -45,6 +45,10 @@ RELAY_REGISTER_BINARY_OP("maximum")
 .describe("Elementwise maximum of two tensors with broadcasting")
 .set_support_level(4);
 
+RELAY_REGISTER_BINARY_OP("minimum")
+.describe("Elementwise minimum of two tensors with broadcasting")
+.set_support_level(4);
+
 // Comparisons
 #define RELAY_REGISTER_CMP_OP(OpName)                               \
   TVM_REGISTER_API("relay.op._make." OpName)                        \
diff --git a/tests/python/relay/test_op_level4.py b/tests/python/relay/test_op_level4.py
index a4b8cebd2..72876780f 100644
--- a/tests/python/relay/test_op_level4.py
+++ b/tests/python/relay/test_op_level4.py
@@ -23,7 +23,8 @@ def test_cmp_type():
 def test_binary_broadcast():
     for op in [relay.right_shift,
                relay.left_shift,
-               relay.maximum]:
+               relay.maximum,
+               relay.minimum]:
         ib = relay.ir_builder.IRBuilder()
         x = ib.param("x", relay.TensorType((10, 4), "int32"))
         y = ib.param("y", relay.TensorType((5, 10, 1), "int32"))
-- 
GitLab