def materialize(self, output_path=None, output_name=None,  all_load=True):
        """
        *Wrapper of* ``MATERIALIZE``

        Starts the execution of the operations for the GMQLDataset. PyGMQL implements lazy execution
        and no operation is performed until the materialization of the results is requestd.
        This operation can happen both locally or remotely.

        * Local mode: if the GMQLDataset is local (based on local data) the user can specify the

        :param output_path: (Optional) If specified, the user can say where to locally save the results
                            of the computations.
        :param output_name: (Optional) Can be used only if the dataset is remote. It represents the name that
                            the user wants to give to the resulting dataset on the server
        :param all_load: (Optional) It specifies if the result dataset should be directly converted to a GDataframe (True) or to a
                         GMQLDataset (False) for future local queries.
        :return: A GDataframe or a GMQLDataset
        """
        current_mode = get_mode()
        new_index = self.__modify_dag(current_mode)
        if current_mode == 'local':
            return Materializations.materialize_local(new_index, output_path, all_load)
        elif current_mode == 'remote':
            return Materializations.materialize_remote(new_index, output_name, output_path, all_load)
        else:
            raise ValueError("Current mode is not defined. {} given".format(current_mode))