<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def scalar(name, data, step=None, description=None):
 """Write a scalar summary. Arguments: name: A name for this summary. The summary tag used for TensorBoard will be this name prefixed by any active name scopes. data: A real numeric scalar value, convertible to a `float32` Tensor. step: Explicit `int64`-castable monotonic step value for this summary. If omitted, this defaults to `tf.summary.experimental.get_step()`, which must not be None. description: Optional long-form description for this summary, as a constant `str`. Markdown is supported. Defaults to empty. Returns: True on success, or false if no summary was written because no default summary writer was available. Raises: ValueError: if a default writer exists, but no step was provided and `tf.summary.experimental.get_step()` is None. """

  summary_metadata = metadata.create_summary_metadata(
      display_name=None, description=description)
  # TODO(https://github.com/tensorflow/tensorboard/issues/2109): remove fallback
  summary_scope = (
      getattr(tf.summary.experimental, 'summary_scope', None) or
      tf.summary.summary_scope)
  with summary_scope(
      name, 'scalar_summary', values=[data, step]) as (tag, _):
    tf.debugging.assert_scalar(data)
    return tf.summary.write(tag=tag,
                            tensor=tf.cast(data, tf.float32),
                            step=step,
                            metadata=summary_metadata)