def __init__(self, S, x, check=True): """ Create the element ``x`` of the StringMonoid ``S``. This should typically be called by a StringMonoid. """ FreeMonoidElement.__init__(self, S, []) if isinstance(x, list): if check: for b in x: if not isinstance(b, (int, long, Integer)): raise TypeError( "x (= %s) must be a list of integers." % x) self._element_list = list(x) # make copy elif isinstance(x, str): alphabet = list(self.parent().alphabet()) self._element_list = [] for i in range(len(x)): try: b = alphabet.index(x[i]) except ValueError: raise TypeError( "Argument x (= %s) is not a valid string." % x) self._element_list += [b] else: raise TypeError("Argument x (= %s) is of the wrong type." % x)