'Drops the specified index on this collection.
Can be used on non-existant collections or collections with no
indexes.  Raises OperationFailure on an error (e.g. trying to
drop an index that does not exist). `index_or_name`
can be either an index name (as returned by `create_index`),
or an index specifier (as passed to `create_index`). An index
specifier should be a list of (key, direction) pairs. Raises
TypeError if index is not an instance of (str, unicode, list).
.. warning::
if a custom name was used on index creation (by
passing the `name` parameter to :meth:`create_index` or
:meth:`ensure_index`) the index **must** be dropped by name.
:Parameters:
- `index_or_name`: index (or name of index) to drop
.. note:: The :attr:`~pymongo.collection.Collection.write_concern` of
this collection is automatically applied to this operation when using
MongoDB >= 3.4.
.. versionchanged:: 3.4
Apply this collection\'s write concern automatically to this operation
when connected to MongoDB >= 3.4.'

def drop_index(self, index_or_name):

    name = index_or_name
    if isinstance(index_or_name, list):
        name = helpers._gen_index_name(index_or_name)
    if (not isinstance(name, string_type)):
        raise TypeError('index_or_name    must    be    an    index    name    or    list')
    self.__database.client._purge_index(self.__database.name, self.__name, name)
    cmd = SON([('dropIndexes', self.__name), ('index', name)])
    with self._socket_for_writes() as sock_info:
        self._command(sock_info, cmd, read_preference=ReadPreference.PRIMARY, allowable_errors=['ns    not    found'], write_concern=self.write_concern, parse_write_concern_error=True)
