def find_inputs(self,
                    rnn_scope_name,
                    rnn_props,
                    match,
                    input_blacklist=None):
        cell_node = match.get_op("GRUBlockCell")
        read_node = cell_node.inputs[0]
        utils.make_sure(is_tensor_array_read_op(read_node),
                        "ta read op check fail")
        enter_node = read_node.inputs[2]
        utils.make_sure(enter_node.type == "Enter", "enter check fail")
        scatter_node = enter_node.inputs[0]
        utils.make_sure(is_tensor_array_scatter_op(scatter_node),
                        "ta scatter check fail")

        node = scatter_node.inputs[2]
        node_id = scatter_node.input[2]
        # dynamic_rnn may insert transpose op if input data format is [B, T, D]
        if node.type == "Transpose" and node.name.startswith(rnn_scope_name):
            node_id = node.input[0]
            node = node.inputs[0]

        utils.make_sure(not node.name.startswith(rnn_scope_name),
                        "rnn input should not has rnn scope name")
        rnn_props.input_node = node
        rnn_props.input_id = node_id
    def find_inputs(self, rnn_scope_name, rnn_props, match, input_blacklist=None):
        concat_node = match.get_op("cell_inputs")
        assert is_concat_op(concat_node)
        read_node = concat_node.inputs[0]
        assert is_tensor_array_read_op(read_node)
        enter_node = read_node.inputs[2]
        assert enter_node.type == "Enter"
        scatter_node = enter_node.inputs[0]
        assert is_tensor_array_scatter_op(scatter_node)
        node = scatter_node.inputs[2]
        node_id = scatter_node.input[2]
        # dynamic_rnn may insert transpose op if input data format is [B, T, D]
        if node.type == "Transpose" and node.name.startswith(rnn_scope_name):
            node_id = node.input[0]
            node = node.inputs[0]

        assert not node.name.startswith(rnn_scope_name)
        rnn_props.input_node = node
        rnn_props.input_id = node_id