def __init__(self,data=None,alphabet=None): self._initial={} self._terminal={} letters=[] if isinstance(data,dict): new_data=dict() for a in data: letters.append(a) if data[a][0] in new_data: if data[a][1] in new_data[data[a][0]]: new_data[data[a][0]][data[a][1]].append(a) else: new_data[data[a][0]][data[a][1]]=[a] else: new_data[data[a][0]]={data[a][1]:[a]} data=new_data elif isinstance(data,list): new_data=dict() for e in data: letters.append(e[2]) if e[0] in new_data: if e[1] in new_data[e[0]]: new_data[e[0]][e[1]].append(e[2]) else: new_data[e[0]][e[1]]=[e[2]] else: new_data[e[0]]={e[1]:[e[2]]} data=new_data if alphabet is None: from inverse_alphabet import AlphabetWithInverses alphabet = AlphabetWithInverses(self._initial.keys()) self._alphabet=alphabet DiGraph.__init__(self,data=data,loops=True,multiedges=True,vertex_labels=True,pos=None,format=None,\ boundary=[],weighted=None,implementation='c_graph',sparse=True) for e in self.edges(): self._initial[e[2]]=e[0] self._terminal[e[2]]=e[1] self._initial[alphabet.inverse_letter(e[2])]=e[1] self._terminal[alphabet.inverse_letter(e[2])]=e[0]
def __init__(self, data=None, alphabet=None): self._initial = {} self._terminal = {} letters = [] if isinstance(data, dict): new_data = dict() for a in data: letters.append(a) if data[a][0] in new_data: if data[a][1] in new_data[data[a][0]]: new_data[data[a][0]][data[a][1]].append(a) else: new_data[data[a][0]][data[a][1]] = [a] else: new_data[data[a][0]] = {data[a][1]: [a]} data = new_data elif isinstance(data, list): new_data = dict() for e in data: letters.append(e[2]) if e[0] in new_data: if e[1] in new_data[e[0]]: new_data[e[0]][e[1]].append(e[2]) else: new_data[e[0]][e[1]] = [e[2]] else: new_data[e[0]] = {e[1]: [e[2]]} data = new_data if alphabet is None: from inverse_alphabet import AlphabetWithInverses alphabet = AlphabetWithInverses(self._initial.keys()) self._alphabet = alphabet DiGraph.__init__(self,data=data,loops=True,multiedges=True,vertex_labels=True,pos=None,format=None,\ boundary=[],weighted=None,implementation='c_graph',sparse=True) for e in self.edges(): self._initial[e[2]] = e[0] self._terminal[e[2]] = e[1] self._initial[alphabet.inverse_letter(e[2])] = e[1] self._terminal[alphabet.inverse_letter(e[2])] = e[0]
def __init__(self, data=None, alphabet=None): """ INPUT: - ``data`` -- (default None) a list or dictionary from a list of edges: ``[initial_vertex,terminal_vertex,letter]``. a dictionnary that maps letters of the alphabet to lists ``(initial_vertex,terminal_vertex)`` - ``alphabet`` -- (default None ) alphabet AlphabetWithInverses by default """ self._initial = {} self._terminal = {} letters = [] if isinstance(data, dict): new_data = dict() for a in data: letters.append(a) if data[a][0] in new_data: if data[a][1] in new_data[data[a][0]]: new_data[data[a][0]][data[a][1]].append(a) else: new_data[data[a][0]][data[a][1]] = [a] else: new_data[data[a][0]] = {data[a][1]: [a]} data = new_data elif isinstance(data, list): new_data = dict() for e in data: letters.append(e[2]) if e[0] in new_data: if e[1] in new_data[e[0]]: new_data[e[0]][e[1]].append(e[2]) else: new_data[e[0]][e[1]] = [e[2]] else: new_data[e[0]] = {e[1]: [e[2]]} data = new_data if alphabet is None: from inverse_alphabet import AlphabetWithInverses alphabet = AlphabetWithInverses(letters) self._alphabet = alphabet DiGraph.__init__(self, data=data, loops=True, multiedges=True, vertex_labels=True, pos=None, format=None, weighted=None, implementation='c_graph', sparse=True) # DiGraph.__init__(self,data=data, loops=True,multiedges=True, # vertex_labels=True, pos=None, format=None, # boundary=[], weighted=None, # implementation='c_graph', sparse=True) for e in self.edges(): self._initial[e[2]] = e[0] self._terminal[e[2]] = e[1] self._initial[alphabet.inverse_letter(e[2])] = e[1] self._terminal[alphabet.inverse_letter(e[2])] = e[0]
def __init__(self, data=None, alphabet=None): """ INPUT: - ``data`` -- (default None) a list or dictionary from a list of edges: ``[initial_vertex,terminal_vertex,letter]``. a dictionnary that maps letters of the alphabet to lists ``(initial_vertex,terminal_vertex)`` - ``alphabet`` -- (default None ) alphabet AlphabetWithInverses by default EXAMPLES:: sage: from train_track.inverse_graph import GraphWithInverses sage: print(GraphWithInverses({'a':(0,0),'b':(0,1),'c':(1,0)})) a: 0->0, c: 1->0, b: 0->1 """ self._initial = {} self._terminal = {} letters = [] if isinstance(data, dict): new_data = dict() for a in data: letters.append(a) if data[a][0] in new_data: if data[a][1] in new_data[data[a][0]]: new_data[data[a][0]][data[a][1]].append(a) else: new_data[data[a][0]][data[a][1]] = [a] else: new_data[data[a][0]] = {data[a][1]: [a]} data = new_data elif isinstance(data, list): new_data = dict() for e in data: letters.append(e[2]) if e[0] in new_data: if e[1] in new_data[e[0]]: new_data[e[0]][e[1]].append(e[2]) else: new_data[e[0]][e[1]] = [e[2]] else: new_data[e[0]] = {e[1]: [e[2]]} data = new_data if alphabet is None: from .inverse_alphabet import AlphabetWithInverses alphabet = AlphabetWithInverses(letters) self._alphabet = alphabet DiGraph.__init__( self, data=data, loops=True, multiedges=True, vertex_labels=True, pos=None, format=None, weighted=None, #implementation='c_graph', sparse=True) # DiGraph.__init__(self,data=data, loops=True,multiedges=True, # vertex_labels=True, pos=None, format=None, # boundary=[], weighted=None, # implementation='c_graph', sparse=True) for e in self.edges(): self._initial[e[2]] = e[0] self._terminal[e[2]] = e[1] self._initial[alphabet.inverse_letter(e[2])] = e[1] self._terminal[alphabet.inverse_letter(e[2])] = e[0]