def jacobian(self, *args, reembed=None, strip_dummies=None, converter_options=None, **kwargs):
    if (converter_options is None):
        converter_options = {}
    merged_convert_options = dict(self.converter_options, **converter_options)
    try:
        remb = (merged_convert_options['reembed'] if (reembed is None) else reembed)
    except KeyError:
        remb = None
    try:
        strip_dummies = (merged_convert_options['strip_dummies'] if (strip_dummies is None) else strip_dummies)
    except KeyError:
        strip_dummies = False
    if strip_dummies:
        dummies = self.molecule.dummy_positions
    else:
        dummies = None
    if (dummies is not None):
        main_excludes = np.setdiff1d(np.arange(self.molecule.num_atoms), dummies)
    try:
        self.converter_options['reembed'] = (True if (remb is None) else remb)
        jacs = super().jacobian(*args, converter_options=converter_options, **kwargs)
        raw_jacs = []
        for j in jacs:
            ext_dim = (j.ndim - 2)
            shp = (sum((((j.shape[i] // 3), 3) for i in range(ext_dim)), ()) + j.shape[(- 2):])
            j = j.reshape(shp)
            if (dummies is not None):
                for i in range(ext_dim):
                    j = np.take(j, main_excludes, axis=(2 * i))
            raw_jacs.append(j)
        jacs = raw_jacs
        return jacs
    finally:
        if (remb is not None):
            self.converter_options['reembed'] = remb
def jacobian(self, *args, reembed=None, strip_dummies=None, converter_options=None, **kwargs):
    if (converter_options is None):
        converter_options = {}
    merged_convert_options = dict(self.converter_options, **converter_options)
    try:
        remb = (merged_convert_options['reembed'] if (reembed is None) else reembed)
    except KeyError:
        remb = None
    try:
        strip_dummies = (merged_convert_options['strip_dummies'] if (strip_dummies is None) else strip_dummies)
    except KeyError:
        strip_dummies = False
    if strip_dummies:
        dummies = self.molecule.dummy_positions
    else:
        dummies = None
    if (dummies is not None):
        main_excludes = np.setdiff1d(np.arange(self.molecule.num_atoms), dummies)
    try:
        self.converter_options['reembed'] = (True if (remb is None) else remb)
        jacs = super().jacobian(*args, converter_options=converter_options, **kwargs)
        raw_jacs = []
        for j in jacs:
            ext_dim = (j.ndim - 2)
            shp = (sum((((j.shape[i] // 3), 3) for i in range(ext_dim)), ()) + j.shape[(- 2):])
            j = j.reshape(shp)
            if (dummies is not None):
                for i in range(ext_dim):
                    j = np.take(j, main_excludes, axis=(2 * i))
            raw_jacs.append(j)
        jacs = raw_jacs
        return jacs
    finally:
        if (remb is not None):
            self.converter_options['reembed'] = remb