| #include "caffe2/operators/do_op.h" | 
 |  | 
 | namespace caffe2 { | 
 |  | 
 | REGISTER_CPU_OPERATOR(Do, DoOp<CPUContext>); | 
 |  | 
 | OPERATOR_SCHEMA(Do) | 
 |     .NumInputs(1, INT_MAX) | 
 |     .NumOutputs(1, INT_MAX) | 
 |     .SetDoc(R"DOC( | 
 | 'Do' control operator, executes a subnet in a separate workspace. | 
 | Last blobs in the input and output lists should be the same blob created with | 
 | CreateScope op. Arguments 'inner_blobs' and 'outer_blobs_idx' provide a mapping | 
 | between selected inner blob names and corresponding outer blob indices. | 
 |     )DOC") | 
 |     .Arg("net", "Subnet with blob bindings") | 
 |     .Arg( | 
 |         "inner_blobs", | 
 |         "List of inner net blob names to bind to outer workspace") | 
 |     .Arg( | 
 |         "outer_blobs_idx", | 
 |         "Indices of corresponding outer workspace blobs, " | 
 |         "in order: operator inputs, operator outputs (skipping workspace blobs)") | 
 |     .Arg( | 
 |         "saved_fwd_blobs", | 
 |         "List of blobs from the forward Do operator workspace needed " | 
 |         "in backward pass, used in gradient Do operator") | 
 |     .Arg( | 
 |         "reuse_workspace", | 
 |         "Whether to reuse workspace or create a new one in a given scope") | 
 |     .AllowInplace([](int in, int out) -> bool { return true; }); | 
 |  | 
 | } // namespace caffe2 |