def METHOD_NAME(self, magnetic: bool = True):
    tokens = self.hall_symbol.split(" ")
    assert len(tokens) >= 1
    self._parse_L(tokens[0])
    self._Ns = []
    rotation_count = 0
    self._V = np.zeros(3)
    prev_nfold = None
    prev_axis = None
    for i in range(1, len(tokens)):
        if tokens[i][0] == "(":
            # tokens[i:] = ["(" + vx, vy, vz + ")"]
            self._V = self._parse_V(tokens[i:])
            break
        else:
            # We need to remember the location of "N" symbols and preceding "N" symbol
            # because its default axis depends on them!
            rotation, translation, nfold, axis, time_reversal = self._parse_N(
                tokens[i], rotation_count, prev_nfold, prev_axis, magnetic
            )
            self._Ns.append((rotation, translation, time_reversal))
            prev_nfold = nfold
            prev_axis = axis
            rotation_count += 1
    # change basis by (I, v)
    # (R, tau) -> (R, tau + v - Rv)
    self._generators = []
    for t in lattice_symbols[self.lattice_symbol]:  # type: ignore
        if not np.allclose(t, 0):
            ops = MagneticOperation.from_linear_translation_time_reversal(translation=np.array(t))
            self._generators.append(ops)
    if self.inversion_at_origin:
        r, t = self.change_of_basis(-np.eye(3), np.zeros(3))
        ops = MagneticOperation.from_linear_translation_time_reversal(linear=r, translation=t)
        self._generators.append(ops)
    for rotation, translation, time_reversal in self._Ns:
        r, t = self.change_of_basis(rotation, translation)
        ops = MagneticOperation.from_linear_translation_time_reversal(linear=r, translation=t, time_reversal=time_reversal)
        self._generators.append(ops)