message: [tf.data] Whitelist the "Assert", "Print", and "Timestamp" logging ops for iterator checkpointing.
  These ops are marked as "stateful" because they are impure or have a side-effect, but they do not contain internal state. As such, functions using them are safe to serialize as part of an iterator checkpoint.
diff: @@ -14,6 +14,7 @@ limitations under the License.
  ==============================================================================*/
  #include "tensorflow/core/framework/common_shape_fns.h"
  +#include "tensorflow/core/framework/dataset_stateful_op_whitelist.h"
  #include "tensorflow/core/framework/op.h"
  #include "tensorflow/core/framework/shape_inference.h"
  @@ -27,6 +28,8 @@ REGISTER_OP("Assert")
  .Attr("summarize: int = 3")
  .SetShapeFn(shape_inference::NoOutputs);
  +WHITELIST_STATEFUL_OP_FOR_DATASET_FUNCTIONS("Assert");
  +
  REGISTER_OP("Print")
  .Input("input: T")
  .Input("data: U")
  @@ -39,6 +42,8 @@ REGISTER_OP("Print")
  .Attr("summarize: int = 3")
  .SetShapeFn(shape_inference::UnchangedShape);
  +WHITELIST_STATEFUL_OP_FOR_DATASET_FUNCTIONS("Print");
  +
  // ----------------------------------------------------------------------------
  // Operators that deal with SummaryProtos (encoded as DT_STRING tensors) as
  // inputs or outputs in various ways.
  @@ -116,4 +121,6 @@ REGISTER_OP("Timestamp")
  .SetIsStateful()
  .SetShapeFn(shape_inference::ScalarShape);
  +WHITELIST_STATEFUL_OP_FOR_DATASET_FUNCTIONS("Timestamp");
  +
  } // end namespace tensorflow
  