def __init__(self, data, eps, param, firstGrid=None, use_domain_knowledge=None):
        """
        two levels grid
        """
        self.eps = eps
        self.first = False
        self.DOMAIN_KNOWLEDGE = use_domain_knowledge

        if firstGrid is None:
            # this first grid --> need to construct
            self.first = True
            Grid_adaptiveM.__init__(self, data, eps, param, self.DOMAIN_KNOWLEDGE)
        else:
            self.param = param
            self.differ = Differential(self.param.Seed)

            # update root
            self.root = copy.deepcopy(firstGrid.root)
            self.root.n_data = data
    def __init__(self, data, eps, param, firstGrid=None, use_domain_knowledge=None):
        """
        two levels grid
        """
        self.eps = eps
        self.first = False
        self.DOMAIN_KNOWLEDGE = use_domain_knowledge

        if firstGrid is None:
            # this first grid --> need to construct
            self.first = True
            Grid_adaptiveM.__init__(self, data, eps, param, self.DOMAIN_KNOWLEDGE)
        else:
            self.param = param
            self.differ = Differential(self.param.Seed)

            # update root
            self.root = copy.deepcopy(firstGrid.root)
            self.root.n_data = data