Ticket #9714: trac_9714_incidence_checking.patch

File trac_9714_incidence_checking.patch, 3.0 KB (added by brunellus, 11 years ago)
  • sage/graphs/graph.py

    # HG changeset patch
    # User Lukas Lansky <lansky@kam.mff.cuni.cz>
    # Date 1327348262 0
    # Node ID 7d0f7e4d1219f7c9c95c7858cbd601cd99643376
    # Parent  7e8784ab604a363654f47cfeaf0c3f5a1725d2c2
    Trac 9714: better incidence matrix checking
    
    diff --git a/sage/graphs/graph.py b/sage/graphs/graph.py
    a b  
    698698            sage: Graph(M,sparse=True)
    699699            Graph on 3 vertices
    700700
    701             sage: M = Matrix([[0,1,1],[1,0,0],[0,0,0]]); M
    702             [0 1 1]
    703             [1 0 0]
    704             [0 0 0]
    705             sage: Graph(M)
    706             Traceback (most recent call last):
    707             ...
    708             ValueError: Non-symmetric or non-square matrix assumed to be an incidence matrix: There must be two nonzero entries (-1 & 1) per column.
    709 
    710701            sage: M = Matrix([[0,1,1],[1,0,1],[-1,-1,0]]); M
    711702            [ 0  1  1]
    712703            [ 1  0  1]
     
    716707            ...
    717708            ValueError: Non-symmetric or non-square matrix assumed to be an incidence matrix: Each column represents an edge: -1 goes to 1.
    718709
     710        ::
     711
     712            sage: MA = Matrix([[1,2,0], [0,2,0], [0,0,1]])      # trac 9714
     713            sage: MI = Graph(MA, format='adjacency_matrix').incidence_matrix(); MI
     714            [-1 -1  0  0  0  1]
     715            [ 1  1  0  1  1  0]
     716            [ 0  0  1  0  0  0]
     717            sage: Graph(MI).edges(labels=None)
     718            [(0, 0), (0, 1), (0, 1), (1, 1), (1, 1), (2, 2)]
     719
     720            sage: M = Matrix([[1], [-1]]); M
     721            [ 1]
     722            [-1]
     723            sage: Graph(M).edges()
     724            [(0, 1, None)]
     725
    719726    #. a list of edges, or labelled edges::
    720727
    721728          sage: g = Graph([(1,3),(3,8),(5,2)])
     
    10501057                positions = []
    10511058                for c in data.columns():
    10521059                    NZ = c.nonzero_positions()
    1053                     positions.append(tuple(NZ))
    1054                     if len(NZ) != 2:
     1060                    if len(NZ) == 1:
     1061                        if loops is None:
     1062                            loops = True
     1063                        elif not loops:
     1064                            msg += "There must be two nonzero entries (-1 & 1) per column."
     1065                            assert False
     1066                        positions.append((NZ[0], NZ[0]))
     1067                    elif len(NZ) != 2:
    10551068                        msg += "There must be two nonzero entries (-1 & 1) per column."
    10561069                        assert False
     1070                    else:
     1071                        positions.append(tuple(NZ))
    10571072                    L = uniq(c.list())
    10581073                    L.sort()
    1059                     if L != [-1,0,1]:
     1074                    desirable = [-1, 0, 1] if len(NZ) == 2 else [0, 1]
     1075                    if data.nrows() == len(desirable) - 1:
     1076                        desirable = filter(lambda i: i != 0, desirable)
     1077                    if L != desirable:
    10601078                        msg += "Each column represents an edge: -1 goes to 1."
    10611079                        assert False
    10621080                if loops      is None: loops     = False