'Encode a document to a new :class:`BSON` instance.
A document can be any mapping type (like :class:`dict`).
Raises :class:`TypeError` if `document` is not a mapping type,
or contains keys that are not instances of
:class:`basestring` (:class:`str` in python 3). Raises
:class:`~bson.errors.InvalidDocument` if `document` cannot be
converted to :class:`BSON`.
:Parameters:
- `document`: mapping type representing a document
- `check_keys` (optional): check if keys start with \'$\' or
contain \'.\', raising :class:`~bson.errors.InvalidDocument` in
either case
- `codec_options` (optional): An instance of
:class:`~bson.codec_options.CodecOptions`.
.. versionchanged:: 3.0
Replaced `uuid_subtype` option with `codec_options`.'

@classmethod
def encode(cls, document, check_keys=False, codec_options=DEFAULT_CODEC_OPTIONS):

    if (not isinstance(codec_options, CodecOptions)):
        raise _CODEC_OPTIONS_TYPE_ERROR
    return cls(_dict_to_bson(document, check_keys, codec_options))
