| #include "is_empty_op.h" |
| namespace caffe2 { |
| |
| REGISTER_CPU_OPERATOR(IsEmpty, IsEmptyOp<CPUContext>); |
| |
| OPERATOR_SCHEMA(IsEmpty) |
| .NumInputs(1) |
| .NumOutputs(1) |
| .SetDoc(R"DOC( |
| The *IsEmpty* op accepts a single input $tensor$, and produces a single boolean output $is\_empty$. The output is *True* if and only if $tensor$ has size == 0. |
| |
| Github Links: |
| |
| - https://github.com/caffe2/caffe2/blob/master/caffe2/operators/utility_ops.cc |
| - https://github.com/caffe2/caffe2/blob/master/caffe2/operators/utility_ops.h |
| |
| |
| <details> |
| |
| <summary> <b>Example</b> </summary> |
| |
| **Code** |
| |
| ``` |
| |
| workspace.ResetWorkspace() |
| |
| op = core.CreateOperator( |
| "IsEmpty", |
| ["tensor"], |
| ["is_empty"], |
| ) |
| |
| // Use a not-empty tensor |
| workspace.FeedBlob("tensor", np.random.randn(2, 2).astype(np.float32)) |
| print("tensor:\n", workspace.FetchBlob("tensor")) |
| |
| workspace.RunOperatorOnce(op) |
| print("is_empty: ", workspace.FetchBlob("is_empty"),"\n") |
| |
| // Use an empty tensor |
| workspace.FeedBlob("tensor", np.empty(0)) |
| print("tensor:\n", workspace.FetchBlob("tensor")) |
| |
| workspace.RunOperatorOnce(op) |
| print("is_empty: ", workspace.FetchBlob("is_empty")) |
| |
| ``` |
| |
| **Result** |
| |
| ``` |
| |
| tensor: |
| [[ 0.26018378 0.6778789 ] |
| [-1.3097627 -0.40083608]] |
| is_empty: False |
| |
| tensor: |
| [] |
| is_empty: True |
| |
| ``` |
| |
| </details> |
| |
| )DOC") |
| .ScalarType(::caffe2::TensorProto_DataType::TensorProto_DataType_BOOL) |
| .Input(0, "tensor", "Input data tensor to check if empty.") |
| .Output( |
| 0, |
| "is_empty", |
| "Output scalar boolean tensor. True if input has size == 0."); |
| |
| } // namespace caffe2 |