code: def set_edge_attr(self, n, m, attr, value):
          '''
          API: set_edge_attr(self, n, m, attr, value)
          Description:
          Sets attr attribute of edge (n,m) to value.
          Input:
              n: Source node name.
              m: Sink node name.
              attr: Attribute of edge to set.
              value: New value of attribute.
          Pre:
              Graph should have this edge.
          Post:
              Edge attribute will be updated.
          '''
          if self.graph_type is DIRECTED_GRAPH:
              self.edge_attr[(n,m)][attr] = value
          else:
              try:
                  self.edge_attr[(n,m)][attr] = value
              except KeyError:
                  self.edge_attr[(m,n)][attr] = valuf set_edge_attr(self, n, m, attr, value):
          '''
          API: set_edge_attr(self, n, m, attr, value)
          Description:
          Sets attr attribute of edge (n,m) to value.
          Input:
              n: Source node name.
              m: Sink node name.
              attr: Attribute of edge to set.
              value: New value of attribute.
          Pre:
              Graph should have this edge.
          Post:
              Edge attribute will be updated.
          '''
          if self.graph_type is DIRECTED_GRAPH:
              self.edge_attr[(n,m)][attr] = value
          else:
              try:
                  self.edge_attr[(n,m)][attr] = value
              except KeyError:
                  self.edge_attr[(m,n)][attr] = value
docs: API: set_edge_attr(self, n, m, attr, value)
          Description:
          Sets attr attribute of edge (n,m) to value.
          Input:
              n: Source node name.
              m: Sink node name.
              attr: Attribute of edge to set.
              value: New value of attribute.
          Pre:
              Graph should have this edge.
          Post:
              Edge attribute will be updated.