'Return the pointwise stabilizer for a set of points.
For a permutation group `G` and a set of points
`\{p_1, p_2,\ldots, p_k\}`, the pointwise stabilizer of
`p_1, p_2, \ldots, p_k` is defined as
`G_{p_1,\ldots, p_k} =
\{g\in G | g(p_i) = p_i \forall i\in\{1, 2,\ldots,k\}\}` ([1],p20).
It is a subgroup of `G`.
Examples
>>> from sympy.combinatorics.named_groups import SymmetricGroup
>>> S = SymmetricGroup(7)
>>> Stab = S.pointwise_stabilizer([2, 3, 5])
>>> Stab.is_subgroup(S.stabilizer(2).stabilizer(3).stabilizer(5))
True
See Also
stabilizer, schreier_sims_incremental
Notes
When incremental == True,
rather than the obvious implementation using successive calls to
``.stabilizer()``, this uses the incremental Schreier-Sims algorithm
to obtain a base with starting segment - the given points.'

def pointwise_stabilizer(self, points, incremental=True):

    if incremental:
        (base, strong_gens) = self.schreier_sims_incremental(base=points)
        stab_gens = []
        degree = self.degree
        for gen in strong_gens:
            if ([gen(point) for point in points] == points):
                stab_gens.append(gen)
        if (not stab_gens):
            stab_gens = _af_new(list(range(degree)))
        return PermutationGroup(stab_gens)
    else:
        gens = self._generators
        degree = self.degree
        for x in points:
            gens = _stabilizer(degree, gens, x)
    return PermutationGroup(gens)
