'Set the internal _format, scale, and _time attrs from user
inputs.  This handles coercion into the correct shapes and
some basic input validation.'

def _init_from_vals(self, val, val2, format, scale, copy, precision=None, in_subfmt=None, out_subfmt=None):

    if (precision is None):
        precision = 3
    if (in_subfmt is None):
        in_subfmt = u'*'
    if (out_subfmt is None):
        out_subfmt = u'*'
    val = _make_array(val, copy)
    if (val2 is not None):
        val2 = _make_array(val2, copy)
        try:
            np.broadcast(val, val2)
        except ValueError:
            raise ValueError(u'Input    val    and    val2    have    inconsistent    shape;    they    cannot    be    broadcast    together.')
    if (scale is not None):
        if (not (isinstance(scale, six.string_types) and (scale.lower() in self.SCALES))):
            raise ScaleValueError(u'Scale    {0!r}    is    not    in    the    allowed    scales    {1}'.format(scale, sorted(self.SCALES)))
    self._time = self._get_time_fmt(val, val2, format, scale, precision, in_subfmt, out_subfmt)
    self._format = self._time.name
