@staticmethod
def from_dict(input_dict):
    """
        Instantiate an object of a derived class using the information
        in input_dict (built by the to_dict method of the derived class).
        More specifically, after reading the derived class from input_dict,
        it calls the method _build_from_input_dict of the derived class.
        Note: This method should not be overrided in the derived class. In case
        it is needed, please override _build_from_input_dict instate.

        :param dict input_dict: Dictionary with all the information needed to
           instantiate the object.
        """
    import copy
    input_dict = copy.deepcopy(input_dict)
    mapping_class = input_dict.pop('class')
    input_dict['name'] = str(input_dict['name'])
    import GPy
    mapping_class = eval(mapping_class)
    return mapping_class._build_from_input_dict(mapping_class, input_dict)
