def METHOD_NAME(self, datapoint: RDKitMol, **kwargs) -> np.ndarray:
    """Calculate circular fingerprint.
    Parameters
    ----------
    datapoint: rdkit.Chem.rdchem.Mol
        RDKit Mol object
    Returns
    -------
    np.ndarray
        A numpy array of circular fingerprint.
    """
    try:
        from rdkit import Chem, DataStructs
        from rdkit.Chem import rdMolDescriptors
    except ModuleNotFoundError:
        raise ImportError("This class requires RDKit to be installed.")
    if 'mol' in kwargs:
        datapoint = kwargs.get("mol")
        raise DeprecationWarning(
            'Mol is being phased out as a parameter, please pass "datapoint" instead.'
        )
    if self.sparse:
        info: Dict = {}
        fp = rdMolDescriptors.GetMorganFingerprint(
            datapoint,
            self.radius,
            useChirality=self.chiral,
            useBondTypes=self.bonds,
            useFeatures=self.features,
            bitInfo=info)
        fp = fp.GetNonzeroElements()  # convert to a dict
        # generate SMILES for fragments
        if self.smiles:
            fp_smiles = {}
            for fragment_id, count in fp.items():
                root, radius = info[fragment_id][0]
                env = Chem.FindAtomEnvironmentOfRadiusN(
                    datapoint, radius, root)
                frag = Chem.PathToSubmol(datapoint, env)
                smiles = Chem.MolToSmiles(frag)
                fp_smiles[fragment_id] = {'smiles': smiles, 'count': count}
            fp = fp_smiles
    else:
        if self.is_counts_based:
            fp_sparse = rdMolDescriptors.GetHashedMorganFingerprint(
                datapoint,
                self.radius,
                nBits=self.size,
                useChirality=self.chiral,
                useBondTypes=self.bonds,
                useFeatures=self.features)
            fp = np.zeros(
                (self.size,), dtype=float
            )  # initialise numpy array of zeros (shape: (required size,))
            DataStructs.ConvertToNumpyArray(fp_sparse, fp)
        else:
            fp = rdMolDescriptors.GetMorganFingerprintAsBitVect(
                datapoint,
                self.radius,
                nBits=self.size,
                useChirality=self.chiral,
                useBondTypes=self.bonds,
                useFeatures=self.features)
            fp = np.asarray(fp, dtype=float)
    return fp