From f8ccc4f39e07285e271446c1b0fe7f3fbfd4d2d6 Mon Sep 17 00:00:00 2001 From: Jozef Daniecki Date: Wed, 10 Mar 2021 07:58:58 +0100 Subject: [PATCH] FloorMod operation specification refactoring. (#4569) * FloorMod operation specification refactoring. * Add dummy broadcast_rules.md. * Minor fixes, e.g. capitalize operation names, typos. * Add comment about division by zero. * Fix division by zero sentence. Co-authored-by: Szymon Durawa --- docs/ops/arithmetic/FloorMod_1.md | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/docs/ops/arithmetic/FloorMod_1.md b/docs/ops/arithmetic/FloorMod_1.md index fca707d5a31..26986df0f3c 100644 --- a/docs/ops/arithmetic/FloorMod_1.md +++ b/docs/ops/arithmetic/FloorMod_1.md @@ -4,9 +4,16 @@ **Category**: Arithmetic binary operation -**Short description**: *FloorMod* returns an element-wise division reminder with two given tensors applying multi-directional broadcast rules. -The result here is consistent with a flooring divide (like in Python programming language): `floor(x / y) * y + mod(x, y) = x`. -The sign of the result is equal to a sign of the divisor. +**Short description**: *FloorMod* performs an element-wise floor modulo operation with two given tensors applying broadcasting rule specified in the *auto_broadcast* attribute. + +**Detailed description** +As a first step input tensors *a* and *b* are broadcasted if their shapes differ. Broadcasting is performed according to `auto_broadcast` attribute specification. As a second step *FloorMod* operation is computed element-wise on the input tensors *a* and *b* according to the formula below: + +\f[ +o_{i} = a_{i} % b_{i} +\f] + +*FloorMod* operation computes a reminder of a floored division. It is the same behaviour like in Python programming language: `floor(x / y) * y + floor_mod(x, y) = x`. The sign of the result is equal to a sign of a dividend. The result of division by zero is undefined. **Attributes**: @@ -14,20 +21,20 @@ The sign of the result is equal to a sign of the divisor. * **Description**: specifies rules used for auto-broadcasting of input tensors. * **Range of values**: - * *none* - no auto-broadcasting is allowed, all input shapes should match - * *numpy* - numpy broadcasting rules, aligned with ONNX Broadcasting. Description is available in ONNX docs. + * *none* - no auto-broadcasting is allowed, all input shapes must match + * *numpy* - numpy broadcasting rules, description is available in [Broadcast Rules For Elementwise Operations](../broadcast_rules.md) * **Type**: string * **Default value**: "numpy" * **Required**: *no* **Inputs** -* **1**: A tensor of type T. Required. -* **2**: A tensor of type T. Required. +* **1**: A tensor of type T and arbitrary shape. Required. +* **2**: A tensor of type T and arbitrary shape. Required. **Outputs** -* **1**: The element-wise division reminder. A tensor of type T. +* **1**: The result of element-wise floor modulo operation. A tensor of type T with shape equal to broadcasted shape of two inputs. **Types** @@ -35,10 +42,11 @@ The sign of the result is equal to a sign of the divisor. **Examples** -*Example 1* +*Example 1 - no broadcasting* ```xml + 256 @@ -58,9 +66,10 @@ The sign of the result is equal to a sign of the divisor. ``` -*Example 2: broadcast* +*Example 2: numpy broadcasting* ```xml + 8