docs: def from_timestamp(timestamp: TimestampPrimitive) -> ulid.ULID:
      """
      Create a new :class:`~ulid.ulid.ULID` instance using a timestamp value of a supported type.
  
      The following types are supported for timestamp values:
  
      * :class:`~datetime.datetime`
      * :class:`~int`
      * :class:`~float`
      * :class:`~str`
      * :class:`~memoryview`
      * :class:`~ulid.ulid.Timestamp`
      * :class:`~ulid.ulid.ULID`
      * :class:`~bytes`
      * :class:`~bytearray`
  
      :param timestamp: Unix timestamp in seconds
      :type timestamp: See docstring for types
      :return: ULID using given timestamp and new randomness
      :rtype: :class:`~ulid.ulid.ULID`
      :raises ValueError: when the value is an unsupported type
      :raises ValueError: when the value is a string and cannot be Base32 decoded
      :raises ValueError: when the value is or was converted to something 48 bits
      """
      if isinstance(timestamp, datetime.datetime):
          timestamp = timestamp.timestamp()
      if isinstance(timestamp, (int, float)):
          timestamp = int(timestamp * 1000.0).to_bytes(6, byteorder='big')
      elif isinstance(timestamp, str):
          timestamp = base32.decode_timestamp(timestamp)
      elif isinstance(timestamp, memoryview):
          timestamp = timestamp.tobytes()
      elif isinstance(timestamp, ulid.Timestamp):
          timestamp = timestamp.bytes
      elif isinstance(timestamp, ulid.ULID):
          timestamp = timestamp.timestamp().bytes
  
      if not isinstance(timestamp, (bytes, bytearray)):
          raise ValueError('Expected datetime, int, float, str, memoryview, Timestamp, ULID, '
                           'bytes, or bytearray; got {}'.format(type(timestamp).__name__))
  
      length = len(timestamp)
      if length != 6:
          raise ValueError('Expects timestamp to be 48 bits; got {} bytes'.format(length))
  
      randomness = os.urandom(10)
      return ulid.ULID(timestamp + randomness)